<?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>229175</bug_id>
          
          <creation_ts>2021-08-16 20:04:52 -0700</creation_ts>
          <short_desc>[ARM64] Fix pre-index address mode</short_desc>
          <delta_ts>2024-08-09 14:53:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>277807</dup_id>
          
          <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>229609</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yijia Huang">yijia_huang</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1784729</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-16 20:04:52 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784821</commentid>
    <comment_count>1</comment_count>
      <attachid>435686</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-17 08:13:21 -0700</bug_when>
    <thetext>Created attachment 435686
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784825</commentid>
    <comment_count>2</comment_count>
      <attachid>435688</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-17 08:16:33 -0700</bug_when>
    <thetext>Created attachment 435688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784911</commentid>
    <comment_count>3</comment_count>
      <attachid>435703</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-17 13:04:26 -0700</bug_when>
    <thetext>Created attachment 435703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786122</commentid>
    <comment_count>4</comment_count>
      <attachid>436068</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-21 04:02:06 -0700</bug_when>
    <thetext>Created attachment 436068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786145</commentid>
    <comment_count>5</comment_count>
      <attachid>436077</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-21 10:29:58 -0700</bug_when>
    <thetext>Created attachment 436077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786443</commentid>
    <comment_count>6</comment_count>
      <attachid>436201</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-23 09:09:36 -0700</bug_when>
    <thetext>Created attachment 436201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786476</commentid>
    <comment_count>7</comment_count>
      <attachid>436211</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-23 11:01:16 -0700</bug_when>
    <thetext>Created attachment 436211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786523</commentid>
    <comment_count>8</comment_count>
      <attachid>436226</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-23 13:10:59 -0700</bug_when>
    <thetext>Created attachment 436226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786658</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-23 20:05:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/82273878&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786817</commentid>
    <comment_count>10</comment_count>
      <attachid>436308</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-24 10:54:47 -0700</bug_when>
    <thetext>Created attachment 436308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786927</commentid>
    <comment_count>11</comment_count>
      <attachid>436308</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-24 14:15:33 -0700</bug_when>
    <thetext>Comment on attachment 436308
Patch

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

Mostly LGTM, but I have a lot of minor comments/suggestions, and a bigger comment/suggestion on the main dominance check algorithm.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:61
&gt; +    HashMap&lt;Value*, Vector&lt;Value*&gt;&gt; addToParents;

name nit: I&apos;d call this something like &quot;addUses&quot; or &quot;usersOfAdd&quot;

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:77
&gt; +                // Pre-Index Load Pattern:

Might also be worth a comment at the top of this file that strength reduction will leave the IR in the form we&apos;re matching now. It&apos;ll take an add(x, constant) that&apos;s an address and move the offset into the load itself, and that&apos;s why we can match this redundancy.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:89
&gt; +                if (!baseOffsetToAddresses.contains(baseOffsetkey))
&gt; +                    break;
&gt; +                for (Value* address : baseOffsetToAddresses.get(baseOffsetkey)) {

this is doing two hash table lookups. I believe the canonical way to do this in WK is:

auto iter = baseOffsetToAddresses.find(baseOffsetkey);
if (iter == baseOffsetToAddresses.end())
    break;
for (Value* address : iter-&gt;value) { ... }

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:92
&gt; +                    if (addToParents.contains(address) &amp;&amp; addToParents.find(address)-&gt;value.size() &gt; 0)
&gt; +                        continue;

ditto two hash table lookups here

Also, more importantly, this algorithm looks a bit iffy. Currently, you may be saved by the controlEquivalent check, but I think a better algorithm here would just be to check that the load dominates all users of the add, perhaps in some separate check below after gathering all candidates. Let me give you an example that&apos;s saved by your controlEquivalent check, but is the reason why I don&apos;t love the current algorithm.

```
bb#0:
x = add()
branch(#1, #2)

bb#1:
load(x)
jump#3

bb#2:
use(x)
jump #3

bb#3:
return
```

Since we&apos;re iterating the graph in pre-order, we&apos;re guaranteed to visit #0 before #1 or #2. But, we&apos;re not guaranteed to visit #2 before #1. If we visit #1 before #2. I think it&apos;s much nicer to just directly check that all users of the add are dominated by the load we&apos;re moving to.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:126
&gt; +            // Post-Index Load Pattern:
&gt; +            //     memory = Load(base, 0)
&gt; +            //     ...
&gt; +            //     address = Add(base, offset)
&gt; +            //
&gt; +            // Post-Index Store Pattern:
&gt; +            //     memory = Store(value1, base, 0)
&gt; +            //     ...
&gt; +            //     address = Add(base, offset)

nit: I think no need to write both load/store variants in all your comments, you can just be like:

```
Post-Index Pattern:
memory = MemoryValue(base, 0)
...
address = Add(base, offset)
```

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:129
&gt; +            if (!baseToMemories.contains(left))
&gt; +                break;
&gt; +            for (MemoryValue* memory : baseToMemories.get(left)) {

ditto: two hash table lookups here, too

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:142
&gt; +            if (addToParents.contains(child))
&gt; +                addToParents.find(child)-&gt;value.append(value);

ditto, two hash table lookups here

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:187
&gt; +                        Value* child = parent-&gt;child(i);
&gt; +                        if (child == address)
&gt; +                            parent-&gt;child(i) = newAddress;

small nit: I think you could write this without invoking parent-&gt;child(i) twice. Not crucial, but a touch nicer IMO, if you just make it:
Value*&amp; child = parent-&gt;child(i);
if (child == address)
    child = newAddress;

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:208
&gt; +            // Convert Post-Index Load Pattern to the Canonical Form:
&gt; +            //     ...                                  newOffset = Constant
&gt; +            //     ...                                  newAddress = Add(base, newOffset)
&gt; +            //     memory = Load(base, 0)               memory = Load(base, 0)
&gt; +            //     ...                            --&gt;   ...
&gt; +            //     address = Add(base, offset)          address = Identity(newAddress)
&gt; +            //
&gt; +            // Convert Post-Index Store Pattern to the Canonical Form:
&gt; +            //     ...                                  newOffset = Constant
&gt; +            //     ...                                  newAddress = Add(base, newOffset)
&gt; +            //     memory = Store(value, base, 0)       memory = Store(value, base, 0)
&gt; +            //     ...                            --&gt;   ...
&gt; +            //     address = Add(base, offset)          address = Identity(newAddress)

ditto, let&apos;s just make this one comment abstracting the difference between store/load, since there is no need to double the size of the comment. Same goes to elsewhere in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786995</commentid>
    <comment_count>12</comment_count>
      <attachid>436345</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-24 16:37:32 -0700</bug_when>
    <thetext>Created attachment 436345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787059</commentid>
    <comment_count>13</comment_count>
      <attachid>436345</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-24 19:17:04 -0700</bug_when>
    <thetext>Comment on attachment 436345
Patch

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

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:163
&gt; +                auto dominateUses = [&amp;] () -&gt; bool {

name nit: dominatesAllAddUses

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:165
&gt; +                    if (iter == addUses.end() || !iter-&gt;value.size())

I think this will return false if the memory value is the only user of the add. Is that right? If so, that seems wrong.

Actually, re-reading the code, I think the Load will always be put as a user of this. So size() is guaranteed to be &gt;= 1. But see below for comments on dominance.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:169
&gt; +                        if (!dominators.dominates(memory-&gt;owner, parent-&gt;owner))
&gt; +                            return false;

So this is just checking if the basic block of memory dominates parent, but this won&apos;t give you a precise answer if memory-&gt;owner == parent-&gt;owner. So if they&apos;re in the same block, we need to check that the position in that block dominates.

However, maybe we can do this when visiting the Load instruction above. When visiting the Load, if we see that addUses isn&apos;t empty, it means there was a user in the same block. So we can remove it from being a candidate.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:212
&gt; +        // This will reset values&apos; indexes if there are any insertions.

why does this matter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787079</commentid>
    <comment_count>14</comment_count>
      <attachid>436345</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-24 22:49:22 -0700</bug_when>
    <thetext>Comment on attachment 436345
Patch

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

&gt;&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:212
&gt;&gt; +        // This will reset values&apos; indexes if there are any insertions.
&gt; 
&gt; why does this matter?

Because we preprocess the index information in the memoryToIndex map. Suppose there are several matched patterns in the same basic block. If we process them one by one in the sequence, the latter real value indexes will be changed with a displacement. And the mechanism of updating the insertions in the basic block is basic-block-based. So, we need to collect all matched patterns in one basic block and update the insertions at one time. And this is one of the challenges to implement this algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787082</commentid>
    <comment_count>15</comment_count>
      <attachid>436345</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-24 22:58:40 -0700</bug_when>
    <thetext>Comment on attachment 436345
Patch

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

Because we preprocess the index information in the memoryToIndex map. Suppose there are several matched patterns in the same basic block. If we process them one by one in the sequence, the latter real value indexes will be changed with a displacement. And the mechanism of updating the insertions in the basic block is basic-block-based. So, we need to collect all matched patterns in one basic block and update the insertions at one time. And this is one of the challenges to implement this algorithm.

&gt;&gt;&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:212
&gt;&gt;&gt; +        // This will reset values&apos; indexes if there are any insertions.
&gt;&gt; 
&gt;&gt; why does this matter?
&gt; 
&gt; Because we preprocess the index information in the memoryToIndex map. Suppose there are several matched patterns in the same basic block. If we process them one by one in the sequence, the latter real value indexes will be changed with a displacement. And the mechanism of updating the insertions in the basic block is basic-block-based. So, we need to collect all matched patterns in one basic block and update the insertions at one time. And this is one of the challenges to implement this algorithm.

So, insertionSet.insert is just collecting all inserted values but does not actually do the insertions. And insertionSet.execute(basicBlock); is the execution to insert those collected values to the insertionIndex in the target basic block. This is tricky. It took me some time to figure that out since we initially would think that insertionSet.insert will do the real insertions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787088</commentid>
    <comment_count>16</comment_count>
      <attachid>436345</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-24 23:17:23 -0700</bug_when>
    <thetext>Comment on attachment 436345
Patch

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

&gt;&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:165
&gt;&gt; +                    if (iter == addUses.end() || !iter-&gt;value.size())
&gt; 
&gt; I think this will return false if the memory value is the only user of the add. Is that right? If so, that seems wrong.
&gt; 
&gt; Actually, re-reading the code, I think the Load will always be put as a user of this. So size() is guaranteed to be &gt;= 1. But see below for comments on dominance.

After strength reduction, the address is still in the B3 IR which indicates there must be other users. Here, I want to make sure this scenario is always true. Maybe I should an assertion here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787097</commentid>
    <comment_count>17</comment_count>
      <attachid>436371</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-24 23:40:53 -0700</bug_when>
    <thetext>Created attachment 436371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787178</commentid>
    <comment_count>18</comment_count>
      <attachid>436393</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-25 08:58:56 -0700</bug_when>
    <thetext>Created attachment 436393
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787194</commentid>
    <comment_count>19</comment_count>
      <attachid>436398</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-25 10:03:28 -0700</bug_when>
    <thetext>Created attachment 436398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787247</commentid>
    <comment_count>20</comment_count>
      <attachid>436398</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-25 12:06:45 -0700</bug_when>
    <thetext>Comment on attachment 436398
Patch

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

r=me with comments

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:93
&gt; +                    auto addUsesIter = addUses.find(address);
&gt; +                    if (addUsesIter != addUses.end() &amp;&amp; addUsesIter-&gt;value.size() &gt; 0)
&gt; +                        continue;

I think this is a bit more subtle, and deserves a subtle comment. You may want to refine, but something like:

```
The goal is to move the Add to this Load/Store. We only move the Add to this Memory value if we guarantee it dominates all uses.
If there are already other uses of the Add, it guarantees this Memory value doesn&apos;t dominate those uses. This is because we&apos;re visiting the program
in pre-order traversal, so we visit this Memory value before all the things it dominates. So if the Add has other users, we must not dominate those
users. Therefore, this MemoryValue won&apos;t be a candidate.
```

An alternative approach could be to just record indices of all users of the Add. And in your dominance check, you can also add a same-block dominance check, where the index of the memory value is &lt; index of the Add user if they are in the same basic block. That algorithm requires more space, but is less subtle, and more explicit in what it&apos;s doing.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:160
&gt; +            // Convert Pre-Index Load/Store Pattern to the Canonical Form:

both loops inside this loop check for &quot;handledValues.contains(memory)&quot;. But that check should go here before the loops below.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:185
&gt; +                Value* newAddress = insertionSet.insert&lt;Value&gt;(insertionIndex, Add, memory-&gt;origin(), address-&gt;child(0), address-&gt;child(1));

nit: I forgot about the nicer way to do this. We have a clone(Value*) function on Procedure. So I think the slightly more idiomatic way to do this is:
Value* newAddress = proc.clone(address);

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:186
&gt; +                // update all address references with the newAddress

nit: remove this comment, since it&apos;s just saying exactly what the code below is doing. We avoid these kinds of comments in WebKit, like:

// do X
X

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:219
&gt; +        // This will reset values&apos; indexes if there are any insertions.

I see what you&apos;re saying now. I&apos;d just say that after this executes, memoryToIndex no longer contains up to date information for this block. But that&apos;s ok because we never touch this block again.

&gt; Source/JavaScriptCore/b3/B3ValueKeyInlines.h:41
&gt; +    // The observation is that when both child-&gt;index() and offset are 0&apos;s,
&gt; +    // HashMap would not accept the ValueKey.

Isn&apos;t it sufficient to just do child-&gt;index() + 1? Why also offset + 1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787250</commentid>
    <comment_count>21</comment_count>
      <attachid>436398</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-25 12:22:32 -0700</bug_when>
    <thetext>Comment on attachment 436398
Patch

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

&gt;&gt; Source/JavaScriptCore/b3/B3ValueKeyInlines.h:41
&gt;&gt; +    // HashMap would not accept the ValueKey.
&gt; 
&gt; Isn&apos;t it sufficient to just do child-&gt;index() + 1? Why also offset + 1?

Actually, this update is for the Load/Store pair. When we have MemoryValue with base and offset, we can search for:

ValueKey(base, offset + bytes) and ValueKey(base, offset - bytes)

Here, the offset could be 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787270</commentid>
    <comment_count>22</comment_count>
      <attachid>436412</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-25 13:22:44 -0700</bug_when>
    <thetext>Created attachment 436412
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787318</commentid>
    <comment_count>23</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-25 14:19:38 -0700</bug_when>
    <thetext>Committed r281587 (240951@main): &lt;https://commits.webkit.org/240951@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 436412.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788011</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-08-27 07:40:38 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 229609</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788241</commentid>
    <comment_count>25</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-27 17:08:36 -0700</bug_when>
    <thetext>Yusuke found that stress/put-to-proto-chain-overrides-put.js.ftl-eager is failing only in OSS bot (https://build.webkit.org/#/builders/102). I bisected and found that this is caused by https://trac.webkit.org/changeset/281587/webkit.

The failure only happens on ARM64. Not in ARM64E (That’s why OSS bot is failing while Internal bot is not failing). The way to reproduce this crash is, In one shell, building WebKit to stress the machine In the other multiple shells (4~ shells), run source testing.zsh

The testing.zsh is:
```
for ((i = 0; i &lt; 10000; i++)); do
    echo &quot;Run $i&quot;
    VM=~/dev/OpenSource/WebKitBuild/Release; DYLD_FRAMEWORK_PATH=$VM $VM/jsc --useFTLJIT\=false --useFunctionDotArguments\=true --validateExceptionChecks\=true --useDollarVM\=true --maxPerThreadStackUsage\=1572864 --airForceBriggsAllocator\=true --useRandomizingExecutableIslandAllocation\=true --forcePolyProto\=true --useDataIC\=true --useFTLJIT\=true --thresholdForJITAfterWarmUp\=10 --thresholdForJITSoon\=10 --thresholdForOptimizeAfterWarmUp\=20 --thresholdForOptimizeAfterLongWarmUp\=20 --thresholdForOptimizeSoon\=20 --thresholdForFTLOptimizeAfterWarmUp\=20 --thresholdForFTLOptimizeSoon\=20 --thresholdForOMGOptimizeAfterWarmUp\=20 --thresholdForOMGOptimizeSoon\=20 --maximumEvalCacheableSourceLength\=150000 --useEagerCodeBlockJettisonTiming\=true --repatchBufferingCountdown\=0 --collectContinuously\=true --useGenerationalGC\=false --verifyGC\=true JSTests/stress/put-to-proto-chain-overrides-put.js
done
```

In the investigation, the problem is related to store-with-post-increment. I have confirmed that the canonicalization works fine.

So, I suspect that the problem is due to the application of store-with-post-increment in the B3LowerToAir.cpp

```
incrementArg = Arg::postIndex(tmp(address), smallOffset);
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788242</commentid>
    <comment_count>26</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-27 17:09:31 -0700</bug_when>
    <thetext>The detailed discussion is in this slack thread: https://a1391192.slack.com/archives/GM9EK0UGL/p1630059992114800</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2051765</commentid>
    <comment_count>27</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2024-08-09 14:53:19 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 277807 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435686</attachid>
            <date>2021-08-17 08:13:21 -0700</date>
            <delta_ts>2021-08-17 08:16:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210817101320.patch</filename>
            <type>text/plain</type>
            <size>18533</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li5jNTM1ZDc5OGRkYWU2ZTE2
YjQyZDE3NGFjNTYzODRjNGJhNzMyZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAyMS0wOC0xNyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgdGhl
IHByZS1pbmRleCBhZGRyZXNzIG1vZGUgZm9yIExvYWQgaW5zdHJ1Y3Rpb24gY29udmVydCB0aGUg
cGF0dGVybiAKKyAgICAgICAgdG8gdGhlIGNhbm9uaWNhbCBmb3JtIGxpa2UgdGhpczoKKworICAg
ICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAt
LT4gIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5ld01lbW9yeSkKKworICAgICAg
ICB3aGljaCBpcyB3cm9uZy4gQXNzdW1lICIuLi4iIGNvbnRhaW5zIGEgc3RvcmUgdG8gYSBtZW1v
cnkgbG9jYXRpb24gdGhhdCBhbGlhc2VzIGZvciBhZGRyZXNzOgorCisgICAgICAgICAgICBhZGRy
ZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
CisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFkZHJlc3MpICAgICAg
ICAgICAgU3RvcmUodmFsdWUxLCBhZGRyZXNzKQorICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5ld01lbW9yeSkKKworICAgICAg
ICBUaGUgbG9hZGVkIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgdmFsdWUxIHdoaWNoIGlzIG5vdCB0
cnVlIGFmdGVyIHRoZSBjb252ZXJzaW9uLiAKKyAgICAgICAgU28sIG1vdmluZyB0aGUgbG9hZCBh
Ym92ZSB0aGUgc3RvcmUgaXMgc2VtYW50aWNhbGx5IGluY29ycmVjdCBiZWNhdXNlIGl0J3Mgbm90
IGlkZW50aWNhbCB0byAKKyAgICAgICAgdGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9n
cmFtLgorCisgICAgICAgIEFsc28sIHRoaXMgcGF0Y2ggZml4ZXMgb3RoZXIgYnVncyBjb21tZW50
ZWQgb24gaW4gdGhlIHByZXZpb3VzIHBhdGNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzgKKworICAgICAgICAqIGIzL0IzQ2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y2Fub25pY2FsaXplUHJl
UG9zdEluY3JlbWVudHMpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAg
ICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVz
dExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKwogMjAy
MS0wOC0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5zdXJl
IHRoYXQgdW51c2VkIExMSW50IG9wY29kZXMgYXJlIG5vdCBpbmFkdmVydGVudGx5IHVzZWQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0
SW5jcmVtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQ
cmVQb3N0SW5jcmVtZW50cy5jcHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0
M2Y4OTI3YTJlMS4uNGNjNDE4MDhkYWI2ODk4MDFkM2JjOWEzMTJkNWRiN2M4ODJiMzk1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdElu
Y3JlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6
ZVByZVBvc3RJbmNyZW1lbnRzLmNwcApAQCAtNTIsNjkgKzUyLDM5IEBAIGJvb2wgY2Fub25pY2Fs
aXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5k
ZXggeyAwIH07CiAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBC
bG9ja0luc2VydGlvblNldCBibG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWlu
YXRvcnMmIGRvbWluYXRvcnMgPSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21p
bmF0b3JzJiBiYWNrd2FyZHNEb21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7
CiAKICAgICBJbmRleFNldDxWYWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1
ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9y
eVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVt
b3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8
VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+PiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXM7CisgICAgSGFz
aE1hcDxWYWx1ZSosIHVuc2lnbmVkPiBtZW1vcnlUb0luZGV4OworICAgIEhhc2hNYXA8TWVtb3J5
VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxWYWx1ZSos
IFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9NZW1vcmllczsKKyAgICBIYXNoTWFwPEJhc2lj
QmxvY2sqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmxvY2tUb1Bvc3RJbmRleENhbmRpZGF0ZXM7
CiAKLSAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb1N0b3Jl
czsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhTdG9yZUNhbmRp
ZGF0ZXM7Ci0KLSAgICBhdXRvIHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZSA9IFsmXSAoVmFs
dWUqIHZhbHVlKSB7CisgICAgYXV0byB0cnlBZGRDYW5kaWRhdGVzID0gWyZdIChWYWx1ZSogdmFs
dWUpIHsKICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBM
b2FkOiB7Ci0gICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vICAgICAuLi4K
LSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAg
ICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBM
b2FkKGJhc2UsIDApCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAg
YWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeUFkZHByZUlu
ZGV4TG9hZENhbmRpZGF0ZXMgPSBbJl0gKCkgewotICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KG1lbW9yeS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zm
c2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJ
bmRleEZvcm0obWVtb3J5LT5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtl
eShtZW1vcnktPmNoaWxkKDApLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNldCgp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRh
aW5zKGJhc2VPZmZzZXRrZXkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRkcmVz
c2VzLmdldChiYXNlT2Zmc2V0a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZUluZGV4
TG9hZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGJhc2VUb0xvYWRzLmFkZChtZW1vcnktPmNoaWxkKDAp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRh
dGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogCisgICAgICAgIC8vIFBvc3Qt
SW5kZXggTG9hZCBQYXR0ZXJuOgorICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAw
KQorICAgICAgICAvLyAgICAgLi4uCisgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2Us
IG9mZnNldCkKKworICAgICAgICAvLyBQb3N0LUluZGV4IFN0b3JlIFBhdHRlcm46CisgICAgICAg
IC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKKyAgICAgICAgLy8gICAgIC4u
LgorICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgIGNh
c2UgTG9hZDoKICAgICAgICAgY2FzZSBTdG9yZTogewotICAgICAgICAgICAgLy8gUHJlLUluZGV4
IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIG9mZnNldCkK
LSAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKLSAgICAgICAgICAgIC8vICAgICAuLi4KLSAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAg
IGF1dG8gdHJ5VXBkYXRlQmFzZVRvU3RvcmVzID0gWyZdICgpIHsKLSAgICAgICAgICAgICAgICBN
ZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwotICAgICAgICAg
ICAgICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT5j
aGlsZCgwKS0+dHlwZSgpICE9IEludDY0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+Y2hpbGQoMCktPmhhc0ludCgpIHx8IG1lbW9yeS0+
b2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBi
YXNlVG9TdG9yZXMuYWRkKG1lbW9yeS0+Y2hpbGQoMSksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkp
Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcygpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUq
IG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgIFZhbHVlKiB0
eXBlID0gdmFsdWUtPm9wY29kZSgpID09IExvYWQgPyBtZW1vcnkgOiBtZW1vcnktPmNoaWxkKDAp
OworICAgICAgICAgICAgaWYgKHR5cGUtPnR5cGUoKSAhPSBJbnQzMiAmJiB0eXBlLT50eXBlKCkg
IT0gSW50NjQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobWVtb3J5
LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbWVtb3J5
VG9JbmRleC5hZGQobWVtb3J5LCBpbmRleCk7CisgICAgICAgICAgICBiYXNlVG9NZW1vcmllcy5h
ZGQobWVtb3J5LT5sYXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZChtZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtMTIyLDI3ICs5MiwxOSBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFBy
b2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDAp
OwogICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOwogCi0gICAgICAg
ICAgICBhdXRvIHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMgPSBbJl0gKCkgewotICAgICAgICAg
ICAgICAgIGlmICghcmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSByaWdodC0+YXNJbnRQdHIoKTsKLSAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0
VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQp
OwotICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNW
YWxpZEluY3JlbWVudEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2
YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVy
bgotICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShsZWZ0
LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJh
c2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VU
b0xvYWRzLmNvbnRhaW5zKGxlZnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5
VmFsdWUqIG1lbW9yeSA6IGJhc2VUb0xvYWRzLmdldChsZWZ0KSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBvc3RJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUb1N0b3Jlcy5jb250YWlucyhs
ZWZ0KSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBi
YXNlVG9TdG9yZXMuZ2V0KGxlZnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4
U3RvcmVDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghcmln
aHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQdHIo
KTsKKyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nh
c3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICBpZiAoc21hbGxPZmZz
ZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZvcm0oc21hbGxPZmZz
ZXQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoYmFzZVRvTWVt
b3JpZXMuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVl
KiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnktPm93bmVyLCBWZWN0
b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgdHJ5QWRkcG9zdElu
ZGV4Q2FuZGlkYXRlcygpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIApAQCAtMTUzLDcgKzExNSw3IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3Jl
bWVudHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2Nr
IDogcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgZm9yIChpbmRleCA9IDA7IGlu
ZGV4IDwgYmFzaWNCbG9jay0+c2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgdHJ5QWRkUHJl
UG9zdEluZGV4Q2FuZGlkYXRlKGJhc2ljQmxvY2stPmF0KGluZGV4KSk7CisgICAgICAgICAgICB0
cnlBZGRDYW5kaWRhdGVzKGJhc2ljQmxvY2stPmF0KGluZGV4KSk7CiAgICAgfQogCiAgICAgYXV0
byBjb250cm9sRXF1aXZhbGVudCA9IFsmXSAoVmFsdWUqIHYxLCBWYWx1ZSogdjIpIC0+IGJvb2wg
ewpAQCAtMTYxLDY4ICsxMjMsMzkgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50
cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICB8fCAoZG9taW5hdG9ycy5kb21pbmF0ZXMo
djItPm93bmVyLCB2MS0+b3duZXIpICYmIGJhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKHYx
LT5vd25lciwgdjItPm93bmVyKSk7CiAgICAgfTsKIAotICAgIC8vIFRoaXMgc2VhcmNoIGlzIGV4
cGVuc2l2ZS4gSG93ZXZlciwgZHVlIHRvIHRoZSBncmVlZHkgcGF0dGVybgotICAgIC8vIG1hdGNo
aW5nLCBubyBiZXR0ZXIgbWV0aG9kIGNhbiBiZSBwcm9wb3NlZCBhdCBwcmVzZW50LgotICAgIGF1
dG8gdmFsdWVJbmRleEluQmFzaWNCbG9jayA9IFsmXSAoVmFsdWUqIHZhbHVlKSAtPiB1bnNpZ25l
ZCB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSB2YWx1ZS0+b3duZXI7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChibG9jay0+YXQoaW5kZXgpID09
IHZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gaW5kZXg7Ci0gICAgfTsKLQotICAgIGZvciAoYXV0byBwYWlyIDogcHJlSW5kZXhM
b2FkQ2FuZGlkYXRlcykgewotICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7
Ci0gICAgICAgIFZhbHVlKiBhZGRyZXNzID0gcGFpci52YWx1ZTsKLSAgICAgICAgaWYgKGlnbm9y
ZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJl
c3MpIHx8ICFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAtLT4gIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAv
LyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCi0gICAgICAgIC8vIG1lbW9y
eSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAgICAgICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1vcnkp
Ci0gICAgICAgIHVuc2lnbmVkIGluc2VydGlvbkluZGV4ID0gdmFsdWVJbmRleEluQmFzaWNCbG9j
ayhhZGRyZXNzKSArIDE7Ci0gICAgICAgIE1lbW9yeVZhbHVlKiBuZXdNZW1vcnkgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPihpbnNlcnRpb25JbmRleCwgTG9hZCwgbWVtb3J5LT50
eXBlKCksIGFkZHJlc3MtPm9yaWdpbigpLCBtZW1vcnktPmxhc3RDaGlsZCgpKTsKLSAgICAgICAg
bmV3TWVtb3J5LT5zZXRPZmZzZXQobWVtb3J5LT5vZmZzZXQoKSk7Ci0gICAgICAgIG1lbW9yeS0+
cmVwbGFjZVdpdGhJZGVudGl0eShuZXdNZW1vcnkpOwotICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShhZGRyZXNzLT5vd25lcik7Ci0KLSAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5
KTsKLSAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7Ci0gICAgfQorICAgIC8vIENv
bnZlcnQgUG9zdC1JbmRleCBMb2FkIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorICAg
IC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBDb25z
dGFudAorICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRy
ZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKKyAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIDAp
ICAgICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQorICAgIC8vIC4uLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KKyAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2Us
IG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCiAKLSAgICBh
dXRvIGRldGVjdFBvc3RJbmRleCA9IFsmXSAoY29uc3QgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZh
bHVlKj4mIGNhbmRpZGF0ZXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBjYW5kaWRhdGVz
KSB7Ci0gICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7Ci0gICAgICAg
ICAgICBWYWx1ZSogYWRkcmVzcyA9IHBhaXIudmFsdWU7CisgICAgLy8gQ29udmVydCBQb3N0LUlu
ZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorICAgIC8vIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAorICAgIC8v
IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJh
c2UsIG5ld09mZnNldCkKKyAgICAvLyBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgICAg
ICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCisgICAgLy8gLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0tPiAgIC4uLgorICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zm
c2V0KSAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKyAgICBmb3IgKGF1
dG8gcGFpciA6IGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRhdGVzKSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJhc2ljQmxvY2sgPSBwYWlyLmtleTsKKyAgICAgICAgVmVjdG9yPE1lbW9yeVZhbHVlKj4g
Y2FuZGlkYXRlcyA9IHBhaXIudmFsdWU7CisgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9y
eSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gcG9zdEluZGV4
Q2FuZGlkYXRlcy5nZXQobWVtb3J5KTsKICAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNv
bnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29u
dHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5C
YXNpY0Jsb2NrKG1lbW9yeSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9
IG1lbW9yeVRvSW5kZXguZ2V0KG1lbW9yeSk7CiAgICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KGluc2VydGlvbkluZGV4LCBtZW1v
cnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnQoKSk7CiAgICAgICAgICAgICBW
YWx1ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbklu
ZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQp
OwogICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsK
LSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKG1lbW9yeS0+b3duZXIpOwogCiAgICAg
ICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOwogICAgICAgICAgICAgaWdub3JlZFZh
bHVlcy5hZGQoYWRkcmVzcyk7CiAgICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50Ci0gICAgLy8g
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFz
ZSwgbmV3T2Zmc2V0KQotICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAgICAgICAg
ICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0tPiAgIC4uLgotICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgo
cG9zdEluZGV4TG9hZENhbmRpZGF0ZXMpOworICAgICAgICAvLyBUaGlzIHdpbGwgcmVzZXQgdmFs
dWVzJyBpbmRleGVzIGR1ZSB0byB0aGUgaW5zZXJ0aW9uLgorICAgICAgICBpbnNlcnRpb25TZXQu
ZXhlY3V0ZShiYXNpY0Jsb2NrKTsKKyAgICB9CiAKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKLSAgICAvLyAuLi4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZz
ZXQpCi0gICAgLy8gbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApICAgICAgIG1lbW9yeSA9
IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtLT4gICAuLi4KLSAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAg
ICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCi0gICAgZGV0ZWN0UG9zdEluZGV4KHBv
c3RJbmRleFN0b3JlQ2FuZGlkYXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggNmQzZGM0ZGZhN2VmZGQyZmI0
ZjZmZjEwNDQyNTZjMzhmZWY0ODg1Ni4uNmNkZGE2ZmY3YTdmNTJhODE1NjQ5YjhkYzQ0ZjVkMjVh
ZjM4N2RiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAg
LTM0NzIsNyArMzQ3Miw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBpZiAoaW5jcmVt
ZW50QXJnKSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUo
YWRkcmVzcy0+dHlwZSgpKSwgdG1wKGJhc2UxKSwgdG1wKGFkZHJlc3MpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHZhbHVlKSwgaW5jcmVtZW50QXJnKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kKGNyZWF0ZVN0b3JlKG9wY29kZSwgdmFsdWUsIGluY3JlbWVu
dEFyZykpOwogICAgICAgICAgICAgICAgICAgICBtX2xvY2tlZC5hZGQoYWRkcmVzcyk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuaAppbmRleCBlMTcxYWNmNTVlMzY3MGY4OTFmMTViYThmMjBjNmNkYzFj
MTg2OTJmLi45ZDcyZjI0MTA2MDcxNjhkNjA0N2M5YTU3OTc4MzMyM2NmZmNlMTlkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTY0LDYgKzExNjQsNyBAQCB2b2lkIGFkZENvcHlU
ZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+
PiYpOwogYm9vbCBzaG91bGRSdW4oY29uc3QgY2hhciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0
TmFtZSk7CiAKIHZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkV2l0aFN0
b3JlUHJlSW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKIHZvaWQgdGVzdExv
YWRQb3N0SW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCAxZjlhZjdiZjI4ZDExOTI5Y2JlMDJkYjBmMmJi
NTNhNmY3ZjExOGY5Li4wMjU0NTA3MjEzOGZmZDEwYWM0OGVmZDc1MGZlOTc5MGRlNjMyNmY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTEwMiw2ICsxMDIsODMgQEAg
dm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKQogICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90Pigq
Y29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKIH0KIAordm9pZCB0
ZXN0TG9hZFdpdGhTdG9yZVByZUluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10g
PSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0g
bnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5h
ZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKElu
dDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8v
IHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAv
LyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3Rh
bnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsK
KworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8g
bG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIy
ID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9
IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2lu
KCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9u
ZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2ls
b24ocDMsIF5wMikKKyAgICAvLyBwMycgPSAmcDMKKyAgICAvLyBzdG9yZSg1LCBwMycpCisgICAg
Ly8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdv
dG8gbG9vcAorICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHAzUHJpbWUgPSBs
b29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBPcGFxdWUsIE9yaWdpbigpLCBwMyk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigp
LCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDUpLCBw
M1ByaW1lKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJv
YywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29w
Qm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9u
ZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2Mu
cmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJv
Yyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKworICAgIGF1dG8gdGVz
dCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAg
d2hpbGUgKHIgPCAxMCkgeworICAgICAgICAgICAgKisrcHRyID0gNTsKKyAgICAgICAgICAgIHIg
Kz0gKnB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hF
Q0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikp
LCB0ZXN0KCkpOworfQorCiB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCiB7CiAgICAgaWYgKE9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQpAQCAtNDA5OCw2ICs0MTc1LDcgQEAgdm9p
ZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwg
NjMpKTsKIAogICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2Fk
V2l0aFN0b3JlUHJlSW5kZXgzMigpKTsKICAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOwog
ICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOwogICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRl
eDY0KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435688</attachid>
            <date>2021-08-17 08:16:33 -0700</date>
            <delta_ts>2021-08-17 13:04:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210817101632.patch</filename>
            <type>text/plain</type>
            <size>18448</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li5jNTM1ZDc5OGRkYWU2ZTE2
YjQyZDE3NGFjNTYzODRjNGJhNzMyZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAyMS0wOC0xNyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgdGhl
IHByZS1pbmRleCBhZGRyZXNzIG1vZGUgZm9yIExvYWQgaW5zdHJ1Y3Rpb24gY29udmVydCB0aGUg
cGF0dGVybiAKKyAgICAgICAgdG8gdGhlIGNhbm9uaWNhbCBmb3JtIGxpa2UgdGhpczoKKworICAg
ICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAt
LT4gIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5ld01lbW9yeSkKKworICAgICAg
ICB3aGljaCBpcyB3cm9uZy4gQXNzdW1lICIuLi4iIGNvbnRhaW5zIGEgc3RvcmUgdG8gYSBtZW1v
cnkgbG9jYXRpb24gdGhhdCBhbGlhc2VzIGZvciBhZGRyZXNzOgorCisgICAgICAgICAgICBhZGRy
ZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
CisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFkZHJlc3MpICAgICAg
ICAgICAgU3RvcmUodmFsdWUxLCBhZGRyZXNzKQorICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5ld01lbW9yeSkKKworICAgICAg
ICBUaGUgbG9hZGVkIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgdmFsdWUxIHdoaWNoIGlzIG5vdCB0
cnVlIGFmdGVyIHRoZSBjb252ZXJzaW9uLiAKKyAgICAgICAgU28sIG1vdmluZyB0aGUgbG9hZCBh
Ym92ZSB0aGUgc3RvcmUgaXMgc2VtYW50aWNhbGx5IGluY29ycmVjdCBiZWNhdXNlIGl0J3Mgbm90
IGlkZW50aWNhbCB0byAKKyAgICAgICAgdGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9n
cmFtLgorCisgICAgICAgIEFsc28sIHRoaXMgcGF0Y2ggZml4ZXMgb3RoZXIgYnVncyBjb21tZW50
ZWQgb24gaW4gdGhlIHByZXZpb3VzIHBhdGNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzgKKworICAgICAgICAqIGIzL0IzQ2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y2Fub25pY2FsaXplUHJl
UG9zdEluY3JlbWVudHMpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAg
ICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVz
dExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKwogMjAy
MS0wOC0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5zdXJl
IHRoYXQgdW51c2VkIExMSW50IG9wY29kZXMgYXJlIG5vdCBpbmFkdmVydGVudGx5IHVzZWQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0
SW5jcmVtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQ
cmVQb3N0SW5jcmVtZW50cy5jcHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0
M2Y4OTI3YTJlMS4uNmVjNDY3YTM2ZDE3YTNjOTBhMTVkNjcxMTkzYjI3NTE0YTBmYmRkNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdElu
Y3JlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6
ZVByZVBvc3RJbmNyZW1lbnRzLmNwcApAQCAtNTIsNjkgKzUyLDM5IEBAIGJvb2wgY2Fub25pY2Fs
aXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5k
ZXggeyAwIH07CiAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBC
bG9ja0luc2VydGlvblNldCBibG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWlu
YXRvcnMmIGRvbWluYXRvcnMgPSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21p
bmF0b3JzJiBiYWNrd2FyZHNEb21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7
CiAKLSAgICBJbmRleFNldDxWYWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1
ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9y
eVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVt
b3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8
VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+PiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXM7CisgICAgSW5k
ZXhTZXQ8VmFsdWUqPiBoYW5kbGVkVmFsdWVzOworICAgIEhhc2hNYXA8VmFsdWUqLCB1bnNpZ25l
ZD4gbWVtb3J5VG9JbmRleDsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0
SW5kZXhDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUq
Pj4gYmFzZVRvTWVtb3JpZXM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPE1lbW9y
eVZhbHVlKj4+IGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRhdGVzOwogCi0gICAgSGFzaE1hcDxWYWx1
ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9TdG9yZXM7Ci0gICAgSGFzaE1hcDxNZW1v
cnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzOwotCi0gICAgYXV0byB0
cnlBZGRQcmVQb3N0SW5kZXhDYW5kaWRhdGUgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgeworICAgIGF1
dG8gdHJ5QWRkQ2FuZGlkYXRlcyA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAgIHN3aXRj
aCAodmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAg
Ly8gUHJlLUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAg
bWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBh
dHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgICAg
ICAgICAgLy8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQotICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzID0g
WyZdICgpIHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFz
PE1lbW9yeVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJ
bnQzMiAmJiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKG1lbW9yeS0+b2Zm
c2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwg
c3RhdGljX2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChWYWx1ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtl
eSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICBiYXNlVG9Mb2Fkcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVjdG9yPE1lbW9yeVZhbHVl
Kj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KIAorICAgICAgICAvLyBQb3N0LUluZGV4IExvYWQgUGF0dGVybjoK
KyAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAgLy8gICAgIC4u
LgorICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisKKyAgICAgICAg
Ly8gUG9zdC1JbmRleCBTdG9yZSBQYXR0ZXJuOgorICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3Rv
cmUodmFsdWUsIGJhc2UsIDApCisgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICBjYXNlIExvYWQ6CiAgICAgICAgIGNh
c2UgU3RvcmU6IHsKLSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgICAgICAg
ICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gICAg
IG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0
LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUs
IGJhc2UsIDApCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRk
cmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeVVwZGF0ZUJhc2VU
b1N0b3JlcyA9IFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9
IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5j
aGlsZCgwKS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJ
bnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmICht
ZW1vcnktPmNoaWxkKDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgYmFzZVRvU3RvcmVzLmFkZChtZW1v
cnktPmNoaWxkKDEpLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKG1lbW9yeSk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlVcGRhdGVCYXNl
VG9TdG9yZXMoKTsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8
TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICBWYWx1ZSogdHlwZSA9IHZhbHVlLT5vcGNvZGUo
KSA9PSBMb2FkID8gbWVtb3J5IDogbWVtb3J5LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmICh0
eXBlLT50eXBlKCkgIT0gSW50MzIgJiYgdHlwZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIG1lbW9yeVRvSW5kZXguYWRkKG1lbW9yeSwg
aW5kZXgpOworICAgICAgICAgICAgYmFzZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+bGFzdENoaWxk
KCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEyMiwyNyArOTIsMTkgQEAg
Ym9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAg
ICAgICAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAgICAgIFZhbHVl
KiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKIAotICAgICAgICAgICAgYXV0byB0cnlBZGRwb3N0
SW5kZXhDYW5kaWRhdGVzID0gWyZdICgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJpZ2h0LT5o
YXNJbnRQdHIoKSB8fCB2YWx1ZS0+dHlwZSgpICE9IEludDY0KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50
UHRyKCk7Ci0gICAgICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBz
dGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBp
ZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZv
cm0oc21hbGxPZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgLy8gc28gZmFyIHRoaXMgQWRkIHZhbHVlIGlzIGEgdmFsaWQgYWRkcmVzcyBjYW5kaWRh
dGUgZm9yIGJvdGggcHJlZml4IGFuZCBwb3N0Zml4IHBhdHRlcm4KLSAgICAgICAgICAgICAgICBW
YWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobGVmdCwgc3RhdGljX2Nhc3Q8aW50NjRf
dD4oc21hbGxPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMu
YWRkKGJhc2VPZmZzZXRrZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBl
bmQodmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChiYXNlVG9Mb2Fkcy5jb250YWlucyhsZWZ0
KSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNl
VG9Mb2Fkcy5nZXQobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhMb2Fk
Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJpZ2h0LT5o
YXNJbnRQdHIoKSB8fCB2YWx1ZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50UHRyKCk7Cisg
ICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZh
bHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9
IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKGJhc2VUb01lbW9yaWVz
LmNvbnRhaW5zKGxlZnQpKSB7CisgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVt
b3J5IDogYmFzZVRvTWVtb3JpZXMuZ2V0KGxlZnQpKSB7CisgICAgICAgICAgICAgICAgICAgIHBv
c3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICBibG9ja1RvUG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LT5vd25lciwgVmVjdG9yPE1l
bW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYmFzZVRvU3RvcmVzLmNvbnRhaW5zKGxlZnQp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VU
b1N0b3Jlcy5nZXQobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhTdG9y
ZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgIHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMoKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE1Myw3ICsx
MTUsNyBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJv
YykKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmFzaWNCbG9jayA6IHByb2MuYmxvY2tzSW5QcmVP
cmRlcigpKSB7CiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJhc2ljQmxvY2stPnNp
emUoKTsgKytpbmRleCkKLSAgICAgICAgICAgIHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZShi
YXNpY0Jsb2NrLT5hdChpbmRleCkpOworICAgICAgICAgICAgdHJ5QWRkQ2FuZGlkYXRlcyhiYXNp
Y0Jsb2NrLT5hdChpbmRleCkpOwogICAgIH0KIAogICAgIGF1dG8gY29udHJvbEVxdWl2YWxlbnQg
PSBbJl0gKFZhbHVlKiB2MSwgVmFsdWUqIHYyKSAtPiBib29sIHsKQEAgLTE2MSw2OCArMTIzLDM5
IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQog
ICAgICAgICAgICAgfHwgKGRvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVy
KSAmJiBiYWNrd2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikp
OwogICAgIH07CiAKLSAgICAvLyBUaGlzIHNlYXJjaCBpcyBleHBlbnNpdmUuIEhvd2V2ZXIsIGR1
ZSB0byB0aGUgZ3JlZWR5IHBhdHRlcm4KLSAgICAvLyBtYXRjaGluZywgbm8gYmV0dGVyIG1ldGhv
ZCBjYW4gYmUgcHJvcG9zZWQgYXQgcHJlc2VudC4KLSAgICBhdXRvIHZhbHVlSW5kZXhJbkJhc2lj
QmxvY2sgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgLT4gdW5zaWduZWQgewotICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOwot
ICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luZGV4KSB7
Ci0gICAgICAgICAgICBpZiAoYmxvY2stPmF0KGluZGV4KSA9PSB2YWx1ZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAg
IH07Ci0KLSAgICBmb3IgKGF1dG8gcGFpciA6IHByZUluZGV4TG9hZENhbmRpZGF0ZXMpIHsKLSAg
ICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAgICAgICBWYWx1ZSogYWRk
cmVzcyA9IHBhaXIudmFsdWU7Ci0gICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1l
bW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2
YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAv
LyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCi0gICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdN
ZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC4uLgotICAgICAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNl
dCkgICAgICAgbWVtb3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQotICAgICAgICB1bnNpZ25lZCBp
bnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2soYWRkcmVzcykgKyAxOwotICAg
ICAgICBNZW1vcnlWYWx1ZSogbmV3TWVtb3J5ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlW
YWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIExvYWQsIG1lbW9yeS0+dHlwZSgpLCBhZGRyZXNzLT5vcmln
aW4oKSwgbWVtb3J5LT5sYXN0Q2hpbGQoKSk7Ci0gICAgICAgIG5ld01lbW9yeS0+c2V0T2Zmc2V0
KG1lbW9yeS0+b2Zmc2V0KCkpOwotICAgICAgICBtZW1vcnktPnJlcGxhY2VXaXRoSWRlbnRpdHko
bmV3TWVtb3J5KTsKLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYWRkcmVzcy0+b3duZXIp
OwotCi0gICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgIGlnbm9yZWRW
YWx1ZXMuYWRkKGFkZHJlc3MpOwotICAgIH0KLQotICAgIGF1dG8gZGV0ZWN0UG9zdEluZGV4ID0g
WyZdIChjb25zdCBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiYgY2FuZGlkYXRlcykgewot
ICAgICAgICBmb3IgKGF1dG8gcGFpciA6IGNhbmRpZGF0ZXMpIHsKLSAgICAgICAgICAgIE1lbW9y
eVZhbHVlKiBtZW1vcnkgPSBwYWlyLmtleTsKLSAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0g
cGFpci52YWx1ZTsKLSAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9y
eSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxl
bnQobWVtb3J5LCBhZGRyZXNzKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrKG1l
bW9yeSk7Ci0gICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dDxDb25zdDY0VmFsdWU+KGluc2VydGlvbkluZGV4LCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNz
LT5jaGlsZCgxKS0+YXNJbnQoKSk7Ci0gICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGlu
c2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9yeS0+b3Jp
Z2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgYWRkcmVz
cy0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsKLSAgICAgICAgICAgIGluc2VydGlv
blNldC5leGVjdXRlKG1lbW9yeS0+b3duZXIpOwotCi0gICAgICAgICAgICBpZ25vcmVkVmFsdWVz
LmFkZChtZW1vcnkpOwotICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCisgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IExvYWQgUGF0dGVy
biB0byB0aGUgQ2Fub25pY2FsIEZvcm06CiAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CiAgICAgLy8gLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQog
ICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAgICAgICAgICBtZW1vcnkgPSBMb2Fk
KGJhc2UsIDApCiAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4u
LgogICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0g
SWRlbnRpdHkobmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4TG9hZENh
bmRpZGF0ZXMpOwogCisgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IFN0b3JlIFBhdHRlcm4gdG8g
dGhlIENhbm9uaWNhbCBGb3JtOgogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKICAgICAv
LyBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgICAgICAgbWVtb3J5ID0gU3RvcmUodmFs
dWUsIGJhc2UsIDApCiAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAg
IC4uLgogICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNz
ID0gSWRlbnRpdHkobmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4U3Rv
cmVDYW5kaWRhdGVzKTsKKyAgICBmb3IgKGF1dG8gcGFpciA6IGJsb2NrVG9Qb3N0SW5kZXhDYW5k
aWRhdGVzKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sgPSBwYWlyLmtleTsKKyAg
ICAgICAgVmVjdG9yPE1lbW9yeVZhbHVlKj4gY2FuZGlkYXRlcyA9IHBhaXIudmFsdWU7CisgICAg
ICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAg
IFZhbHVlKiBhZGRyZXNzID0gcG9zdEluZGV4Q2FuZGlkYXRlcy5nZXQobWVtb3J5KTsKKyAgICAg
ICAgICAgIGlmIChoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaGFuZGxlZFZhbHVl
cy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNz
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdW5zaWduZWQgaW5z
ZXJ0aW9uSW5kZXggPSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAgICAgVmFs
dWUqIG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbnNlcnRp
b25JbmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOwor
ICAgICAgICAgICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihpbnNlcnRpb25JbmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgw
KSwgbmV3T2Zmc2V0KTsKKyAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoSWRlbnRpdHko
bmV3QWRkcmVzcyk7CisKKyAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Cisg
ICAgICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBUaGlzIHdpbGwgcmVzZXQgdmFsdWVzJyBpbmRleGVzIGR1ZSB0byB0aGUgaW5zZXJ0aW9u
LgorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShiYXNpY0Jsb2NrKTsKKyAgICB9CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAppbmRleCA2ZDNkYzRkZmE3ZWZkZDJmYjRmNmZmMTA0NDI1NmMzOGZlZjQ4ODU2Li42Y2Rk
YTZmZjdhN2Y1MmE4MTU2NDliOGRjNDRmNWQyNWFmMzg3ZGJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMzQ3Miw3ICszNDcyLDcgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgICAgIGlmIChpbmNyZW1lbnRBcmcpIHsKICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhZGRyZXNzLT50eXBlKCkpLCB0bXAoYmFzZTEp
LCB0bXAoYWRkcmVzcykpOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAo
dmFsdWUpLCBpbmNyZW1lbnRBcmcpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmQoY3JlYXRl
U3RvcmUob3Bjb2RlLCB2YWx1ZSwgaW5jcmVtZW50QXJnKSk7CiAgICAgICAgICAgICAgICAgICAg
IG1fbG9ja2VkLmFkZChhZGRyZXNzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGUxNzFh
Y2Y1NWUzNjcwZjg5MWYxNWJhOGYyMGM2Y2RjMWMxODY5MmYuLjlkNzJmMjQxMDYwNzE2OGQ2MDQ3
YzlhNTc5NzgzMzIzY2ZmY2UxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTEx
NjQsNiArMTE2NCw3IEBAIHZvaWQgYWRkQ29weVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVx
dWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+Jik7CiBib29sIHNob3VsZFJ1bihjb25zdCBj
aGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3ROYW1lKTsKIAogdm9pZCB0ZXN0TG9hZFByZUlu
ZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKCk7CiB2b2lkIHRlc3RM
b2FkUHJlSW5kZXg2NCgpOwogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDMyKCk7CiB2b2lkIHRlc3RM
b2FkUG9zdEluZGV4NjQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4
IDFmOWFmN2JmMjhkMTE5MjljYmUwMmRiMGYyYmI1M2E2ZjdmMTE4ZjkuLjAyNTQ1MDcyMTM4ZmZk
MTBhYzQ4ZWZkNzUwZmU5NzkwZGU2MzI2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
M18zLmNwcApAQCAtMTAyLDYgKzEwMiw4MyBAQCB2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpCiAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHB0cikpLCB0ZXN0KCkpOwogfQogCit2b2lkIHRlc3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgzMigp
Cit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwg
OSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJp
YWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwg
XnIyKQorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1
ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDAp
OworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmln
aW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAx
KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCks
IEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAg
ICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUq
IHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBP
cmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBs
b29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIs
IGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsK
KyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2lu
KCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5
KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAg
IC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHAzJyA9ICZw
MworICAgIC8vIHN0b3JlKDUsIHAzJykKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAv
LyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9v
cEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAs
IHAzKTsKKyAgICBWYWx1ZSogcDNQcmltZSA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIE9wYXF1ZSwgT3JpZ2luKCksIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihwcm9jLCBTdG9yZSwgT3JpZ2luKCksIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNSksIHAzUHJpbWUpOworICAgIFZhbHVlKiByMyA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9k
eS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAz
KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAg
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAv
LyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZh
bGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAg
ICAgICBpbnQzMl90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKSB7CisgICAgICAgICAg
ICAqKytwdHIgPSA1OworICAgICAgICAgICAgciArPSAqcHRyOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUs
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKIHZvaWQgdGVzdExv
YWRQcmVJbmRleDY0KCkKIHsKICAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8
IDIpCkBAIC00MDk4LDYgKzQxNzUsNyBAQCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZp
bHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4o
dGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCA2MykpOwogCiAgICAgUlVOKHRlc3RMb2FkUHJl
SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKCkpOwogICAg
IFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CiAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4MzIo
KSk7CiAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435703</attachid>
            <date>2021-08-17 13:04:26 -0700</date>
            <delta_ts>2021-08-21 04:02:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210817150425.patch</filename>
            <type>text/plain</type>
            <size>22161</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li42OTg2YWUzMWVkNDgwZWRh
ZTgyYmE3YTc5ZjcyM2JkYjczMTE1MTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MyBAQAorMjAyMS0wOC0xNyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkaXNh
YmxlcyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFk
ZHJlc3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBv
biBpbiB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyODUzOAorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBwcmUtaW5k
ZXggYWRkcmVzcyBtb2RlIGZvciBMb2FkIGluc3RydWN0aW9uIGNvbnZlcnQgdGhlIHBhdHRlcm4g
CisgICAgICAgIHRvIHRoZSBjYW5vbmljYWwgZm9ybSBsaWtlIHRoaXM6CisKKyAgICAgICAgICAg
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9m
ZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdN
ZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zm
c2V0KSAgICAgICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1vcnkpCisKKyAgICAgICAgd2hpY2gg
aXMgd3JvbmcuIEFzc3VtZSAiLi4uIiBjb250YWlucyBhIHN0b3JlIHRvIGEgbWVtb3J5IGxvY2F0
aW9uIHRoYXQgYWxpYXNlcyBmb3IgYWRkcmVzczoKKworICAgICAgICAgICAgYWRkcmVzcyA9IEFk
ZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAg
ICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gIG5ld01lbW9yeSA9IExvYWQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC4uLgorICAgICAgICAgICAgU3RvcmUodmFsdWUxLCBhZGRyZXNzKSAgICAgICAgICAgIFN0
b3JlKHZhbHVlMSwgYWRkcmVzcykKKyAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zm
c2V0KSAgICAgICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1vcnkpCisKKyAgICAgICAgVGhlIGxv
YWRlZCB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIHZhbHVlMSB3aGljaCBpcyBub3QgdHJ1ZSBhZnRl
ciB0aGUgY29udmVyc2lvbi4gCisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhl
IHN0b3JlIGlzIHNlbWFudGljYWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGlj
YWwgdG8KKyAgICAgICAgdGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0
aGlzIGNhc2UsIG1heWJlIHdlIHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAg
ICBkZXRlY3QgdGhlIHZpb2xhdGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAg
ICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNMb3dl
clRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNf
My5jcHA6CisgICAgICAgICh0ZXN0TG9hZFdpdGhTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAo
YWRkU2hyVGVzdHMpOgorCiAyMDIxLTA4LTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBFbnN1cmUgdGhhdCB1bnVzZWQgTExJbnQgb3Bjb2RlcyBhcmUgbm90IGlu
YWR2ZXJ0ZW50bHkgdXNlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcAppbmRleCBjZWRjYmY3MGU3
MGY4NGM4MDBmYTg5YzdkZDgxYTQzZjg5MjdhMmUxLi43ODNhMmM4YTkzZjBiYmZkMzAxMWFkZDA3
ZWZmZWFlZTA0N2FhNDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
YW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCkBAIC01Miw2OSArNTIs
MzkgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2Mp
CiAKICAgICB1bnNpZ25lZCBpbmRleCB7IDAgfTsKICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9u
U2V0IHsgcHJvYyB9OwotICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGJsb2NrSW5zZXJ0aW9uU2V0IHsg
cHJvYyB9OwogCiAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IHByb2MuZG9taW5hdG9ycygp
OwogICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3YXJkc0RvbWluYXRvcnMgPSBwcm9jLmJh
Y2t3YXJkc0RvbWluYXRvcnMoKTsKIAotICAgIEluZGV4U2V0PFZhbHVlKj4gaWdub3JlZFZhbHVl
czsKLSAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb0xvYWRz
OwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4TG9hZENhbmRpZGF0
ZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4TG9hZENhbmRp
ZGF0ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRU
b0FkZHJlc3NlczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IGhhbmRsZWRWYWx1ZXM7CisgICAgSGFz
aE1hcDxWYWx1ZSosIHVuc2lnbmVkPiBtZW1vcnlUb0luZGV4OworICAgIEhhc2hNYXA8TWVtb3J5
VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxWYWx1ZSos
IFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9NZW1vcmllczsKKyAgICBIYXNoTWFwPEJhc2lj
QmxvY2sqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmxvY2tUb1Bvc3RJbmRleENhbmRpZGF0ZXM7
CiAKLSAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb1N0b3Jl
czsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhTdG9yZUNhbmRp
ZGF0ZXM7Ci0KLSAgICBhdXRvIHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZSA9IFsmXSAoVmFs
dWUqIHZhbHVlKSB7CisgICAgYXV0byB0cnlBZGRDYW5kaWRhdGVzID0gWyZdIChWYWx1ZSogdmFs
dWUpIHsKICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBM
b2FkOiB7Ci0gICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vICAgICAuLi4K
LSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAg
ICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBM
b2FkKGJhc2UsIDApCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAg
YWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeUFkZHByZUlu
ZGV4TG9hZENhbmRpZGF0ZXMgPSBbJl0gKCkgewotICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KG1lbW9yeS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zm
c2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJ
bmRleEZvcm0obWVtb3J5LT5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtl
eShtZW1vcnktPmNoaWxkKDApLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNldCgp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRh
aW5zKGJhc2VPZmZzZXRrZXkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRkcmVz
c2VzLmdldChiYXNlT2Zmc2V0a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZUluZGV4
TG9hZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGJhc2VUb0xvYWRzLmFkZChtZW1vcnktPmNoaWxkKDAp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRh
dGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogCisgICAgICAgIC8vIFBvc3Qt
SW5kZXggTG9hZCBQYXR0ZXJuOgorICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAw
KQorICAgICAgICAvLyAgICAgLi4uCisgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2Us
IG9mZnNldCkKKworICAgICAgICAvLyBQb3N0LUluZGV4IFN0b3JlIFBhdHRlcm46CisgICAgICAg
IC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKKyAgICAgICAgLy8gICAgIC4u
LgorICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgIGNh
c2UgTG9hZDoKICAgICAgICAgY2FzZSBTdG9yZTogewotICAgICAgICAgICAgLy8gUHJlLUluZGV4
IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIG9mZnNldCkK
LSAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKLSAgICAgICAgICAgIC8vICAgICAuLi4KLSAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAg
IGF1dG8gdHJ5VXBkYXRlQmFzZVRvU3RvcmVzID0gWyZdICgpIHsKLSAgICAgICAgICAgICAgICBN
ZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwotICAgICAgICAg
ICAgICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT5j
aGlsZCgwKS0+dHlwZSgpICE9IEludDY0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+Y2hpbGQoMCktPmhhc0ludCgpIHx8IG1lbW9yeS0+
b2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBi
YXNlVG9TdG9yZXMuYWRkKG1lbW9yeS0+Y2hpbGQoMSksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkp
Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcygpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUq
IG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgIFZhbHVlKiB0
eXBlID0gdmFsdWUtPm9wY29kZSgpID09IExvYWQgPyBtZW1vcnkgOiBtZW1vcnktPmNoaWxkKDAp
OworICAgICAgICAgICAgaWYgKHR5cGUtPnR5cGUoKSAhPSBJbnQzMiAmJiB0eXBlLT50eXBlKCkg
IT0gSW50NjQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobWVtb3J5
LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbWVtb3J5
VG9JbmRleC5hZGQobWVtb3J5LCBpbmRleCk7CisgICAgICAgICAgICBiYXNlVG9NZW1vcmllcy5h
ZGQobWVtb3J5LT5sYXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZChtZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtMTIyLDI3ICs5MiwxOSBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFBy
b2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDAp
OwogICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOwogCi0gICAgICAg
ICAgICBhdXRvIHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMgPSBbJl0gKCkgewotICAgICAgICAg
ICAgICAgIGlmICghcmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSByaWdodC0+YXNJbnRQdHIoKTsKLSAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0
VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQp
OwotICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNW
YWxpZEluY3JlbWVudEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2
YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVy
bgotICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShsZWZ0
LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJh
c2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VU
b0xvYWRzLmNvbnRhaW5zKGxlZnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5
VmFsdWUqIG1lbW9yeSA6IGJhc2VUb0xvYWRzLmdldChsZWZ0KSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBvc3RJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKKyAgICAg
ICAgICAgIGlmICghcmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBy
aWdodC0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zm
c2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAg
ICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRl
eEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBpZiAoYmFzZVRvTWVtb3JpZXMuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1v
cnktPm93bmVyLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChiYXNlVG9T
dG9yZXMuY29udGFpbnMobGVmdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlW
YWx1ZSogbWVtb3J5IDogYmFzZVRvU3RvcmVzLmdldChsZWZ0KSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgdHJ5QWRkcG9zdElu
ZGV4Q2FuZGlkYXRlcygpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIApAQCAtMTUzLDcgKzExNSw3IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3Jl
bWVudHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2Nr
IDogcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgZm9yIChpbmRleCA9IDA7IGlu
ZGV4IDwgYmFzaWNCbG9jay0+c2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgdHJ5QWRkUHJl
UG9zdEluZGV4Q2FuZGlkYXRlKGJhc2ljQmxvY2stPmF0KGluZGV4KSk7CisgICAgICAgICAgICB0
cnlBZGRDYW5kaWRhdGVzKGJhc2ljQmxvY2stPmF0KGluZGV4KSk7CiAgICAgfQogCiAgICAgYXV0
byBjb250cm9sRXF1aXZhbGVudCA9IFsmXSAoVmFsdWUqIHYxLCBWYWx1ZSogdjIpIC0+IGJvb2wg
ewpAQCAtMTYxLDY4ICsxMjMsMzkgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50
cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICB8fCAoZG9taW5hdG9ycy5kb21pbmF0ZXMo
djItPm93bmVyLCB2MS0+b3duZXIpICYmIGJhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKHYx
LT5vd25lciwgdjItPm93bmVyKSk7CiAgICAgfTsKIAotICAgIC8vIFRoaXMgc2VhcmNoIGlzIGV4
cGVuc2l2ZS4gSG93ZXZlciwgZHVlIHRvIHRoZSBncmVlZHkgcGF0dGVybgotICAgIC8vIG1hdGNo
aW5nLCBubyBiZXR0ZXIgbWV0aG9kIGNhbiBiZSBwcm9wb3NlZCBhdCBwcmVzZW50LgotICAgIGF1
dG8gdmFsdWVJbmRleEluQmFzaWNCbG9jayA9IFsmXSAoVmFsdWUqIHZhbHVlKSAtPiB1bnNpZ25l
ZCB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSB2YWx1ZS0+b3duZXI7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChibG9jay0+YXQoaW5kZXgpID09
IHZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gaW5kZXg7Ci0gICAgfTsKLQotICAgIGZvciAoYXV0byBwYWlyIDogcHJlSW5kZXhM
b2FkQ2FuZGlkYXRlcykgewotICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7
Ci0gICAgICAgIFZhbHVlKiBhZGRyZXNzID0gcGFpci52YWx1ZTsKLSAgICAgICAgaWYgKGlnbm9y
ZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJl
c3MpIHx8ICFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAtLT4gIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAv
LyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCi0gICAgICAgIC8vIG1lbW9y
eSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAgICAgICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1vcnkp
Ci0gICAgICAgIHVuc2lnbmVkIGluc2VydGlvbkluZGV4ID0gdmFsdWVJbmRleEluQmFzaWNCbG9j
ayhhZGRyZXNzKSArIDE7Ci0gICAgICAgIE1lbW9yeVZhbHVlKiBuZXdNZW1vcnkgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPihpbnNlcnRpb25JbmRleCwgTG9hZCwgbWVtb3J5LT50
eXBlKCksIGFkZHJlc3MtPm9yaWdpbigpLCBtZW1vcnktPmxhc3RDaGlsZCgpKTsKLSAgICAgICAg
bmV3TWVtb3J5LT5zZXRPZmZzZXQobWVtb3J5LT5vZmZzZXQoKSk7Ci0gICAgICAgIG1lbW9yeS0+
cmVwbGFjZVdpdGhJZGVudGl0eShuZXdNZW1vcnkpOwotICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShhZGRyZXNzLT5vd25lcik7Ci0KLSAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5
KTsKLSAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7Ci0gICAgfQotCi0gICAgYXV0
byBkZXRlY3RQb3N0SW5kZXggPSBbJl0gKGNvbnN0IEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1
ZSo+JiBjYW5kaWRhdGVzKSB7Ci0gICAgICAgIGZvciAoYXV0byBwYWlyIDogY2FuZGlkYXRlcykg
ewotICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAgICAgICAg
ICAgVmFsdWUqIGFkZHJlc3MgPSBwYWlyLnZhbHVlOwotICAgICAgICAgICAgaWYgKGlnbm9yZWRW
YWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3Mp
IHx8ICFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IHZhbHVl
SW5kZXhJbkJhc2ljQmxvY2sobWVtb3J5KTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQg
PSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIG1lbW9y
eS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKLSAgICAgICAgICAgIFZh
bHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5k
ZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7
Ci0gICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOwot
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7Ci0KLSAgICAg
ICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBpZ25vcmVkVmFs
dWVzLmFkZChhZGRyZXNzKTsKLSAgICAgICAgfQotICAgIH07Ci0KKyAgICAvLyBDb252ZXJ0IFBv
c3QtSW5kZXggTG9hZCBQYXR0ZXJuIHRvIHRoZSBDYW5vbmljYWwgRm9ybToKICAgICAvLyAuLi4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKICAg
ICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFk
ZChiYXNlLCBuZXdPZmZzZXQpCiAgICAgLy8gbWVtb3J5ID0gTG9hZChiYXNlLCAwKSAgICAgICAg
ICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKICAgICAvLyAuLi4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLS0+ICAgLi4uCiAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
ICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQotICAgIGRldGVjdFBvc3RJ
bmRleChwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlcyk7CiAKKyAgICAvLyBDb252ZXJ0IFBvc3QtSW5k
ZXggU3RvcmUgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06CiAgICAgLy8gLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CiAgICAgLy8g
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFz
ZSwgbmV3T2Zmc2V0KQogICAgIC8vIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAg
ICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKICAgICAvLyAuLi4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLS0+ICAgLi4uCiAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQotICAgIGRldGVjdFBv
c3RJbmRleChwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMpOworICAgIGZvciAoYXV0byBwYWlyIDog
YmxvY2tUb1Bvc3RJbmRleENhbmRpZGF0ZXMpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmFzaWNC
bG9jayA9IHBhaXIua2V5OworICAgICAgICBWZWN0b3I8TWVtb3J5VmFsdWUqPiBjYW5kaWRhdGVz
ID0gcGFpci52YWx1ZTsKKyAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogY2FuZGlk
YXRlcykgeworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwb3N0SW5kZXhDYW5kaWRhdGVz
LmdldChtZW1vcnkpOworICAgICAgICAgICAgaWYgKGhhbmRsZWRWYWx1ZXMuY29udGFpbnMobWVt
b3J5KSB8fCBoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9sRXF1aXZh
bGVudChtZW1vcnksIGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IG1lbW9yeVRvSW5kZXguZ2V0KG1lbW9y
eSk7CisgICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxD
b25zdDY0VmFsdWU+KGluc2VydGlvbkluZGV4LCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5j
aGlsZCgxKS0+YXNJbnQoKSk7CisgICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGluc2Vy
dGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2lu
KCksIGFkZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQpOworICAgICAgICAgICAgYWRkcmVzcy0+
cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsKKworICAgICAgICAgICAgaGFuZGxlZFZh
bHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKGFkZHJlc3Mp
OworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgd2lsbCByZXNldCB2YWx1ZXMnIGluZGV4ZXMg
aWYgdGhlcmUgYXJlIGFueSBpbnNlcnRpb25zLgorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZShiYXNpY0Jsb2NrKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCmluZGV4IDY2MmYzMjM4MDVjY2Y3MzY3OGRkZTZm
MTM5MzdkY2VlZDM3ZTQwOTYuLjA1NmIxYWM0ZTVhMGUyOWNhODkzOWNkYTkyMmE0ZDI2NGJmZThk
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKQEAgLTExOCw3ICsx
MTgsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCiAgICAgbG93
ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMocHJvY2VkdXJlKTsKICAgICBsZWdhbGl6ZU1lbW9y
eU9mZnNldHMocHJvY2VkdXJlKTsKICAgICBtb3ZlQ29uc3RhbnRzKHByb2NlZHVyZSk7Ci0gICAg
aWYgKHByb2NlZHVyZS5vcHRMZXZlbCgpID49IDIpCisgICAgaWYgKHByb2NlZHVyZS5vcHRMZXZl
bCgpID49IDIgJiYgT3B0aW9uczo6dXNlUHJlUG9zdEluY3JlbWVudENhbm9uaWNhbGl6YXRpb24o
KSkKICAgICAgICAgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMocHJvY2VkdXJlKTsKICAg
ICBlbGltaW5hdGVEZWFkQ29kZShwcm9jZWR1cmUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDZkM2RjNGRmYTdlZmRkMmZiNGY2ZmYxMDQ0MjU2YzM4
ZmVmNDg4NTYuLjZjZGRhNmZmN2E3ZjUyYTgxNTY0OWI4ZGM0NGY1ZDI1YWYzODdkYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0zNDcyLDcgKzM0NzIs
NyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudEFyZykgewogICAg
ICAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUo
KSksIHRtcChiYXNlMSksIHRtcChhZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIHRtcCh2YWx1ZSksIGluY3JlbWVudEFyZyk7CisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChjcmVhdGVTdG9yZShvcGNvZGUsIHZhbHVlLCBpbmNyZW1lbnRBcmcpKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9sb2NrZWQuYWRkKGFkZHJlc3MpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmgKaW5kZXggZTE3MWFjZjU1ZTM2NzBmODkxZjE1YmE4ZjIwYzZjZGMxYzE4NjkyZi4uOWQ3MmYy
NDEwNjA3MTY4ZDYwNDdjOWE1Nzk3ODMzMjNjZmZjZTE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuaApAQCAtMTE2NCw2ICsxMTY0LDcgQEAgdm9pZCBhZGRDb3B5VGVzdHMoY29uc3QgY2hh
ciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIGJvb2wgc2hv
dWxkUnVuKGNvbnN0IGNoYXIqIGZpbHRlciwgY29uc3QgY2hhciogdGVzdE5hbWUpOwogCiB2b2lk
IHRlc3RMb2FkUHJlSW5kZXgzMigpOwordm9pZCB0ZXN0TG9hZFdpdGhTdG9yZVByZUluZGV4MzIo
KTsKIHZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIo
KTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjNfMy5jcHAKaW5kZXggMWY5YWY3YmYyOGQxMTkyOWNiZTAyZGIwZjJiYjUzYTZmN2YxMThmOS4u
YzFlZDYwMWI1ODkxN2JkMTZjYTZkM2ZiNWIwZWY3MjlkMzg2OGQzNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC04OSw4ICs4OSw2IEBAIHZvaWQgdGVzdExvYWRQcmVJ
bmRleDMyKCkKICAgICBmaXhTU0EocHJvYyk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKLSAgICBpZiAoaXNBUk02NCgpKQotICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgIiM0XSEiKTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsK
ICAgICAgICAgaW50MzJfdCByID0gMDsKQEAgLTEwMiw2ICsxMDAsODMgQEAgdm9pZCB0ZXN0TG9h
ZFByZUluZGV4MzIoKQogICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lz
ZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKIH0KIAordm9pZCB0ZXN0TG9hZFdpdGhT
dG9yZVByZUluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMs
IDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9
IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJ
bnQzMik7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAg
IC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAx
LCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3Jp
Z2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQs
IE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAv
LyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8g
ZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAg
IFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVh
bCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50
ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29w
X0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikK
KyAgICAvLyBwMycgPSAmcDMKKyAgICAvLyBzdG9yZSg1LCBwMycpCisgICAgLy8gcjMgPSByMiAr
IGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAg
IFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2lu
KCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDQpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHAzUHJpbWUgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBPcGFxdWUsIE9yaWdpbigpLCBwMyk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCBsb29wQm9keS0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDUpLCBwM1ByaW1lKTsKKyAg
ICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdp
bigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9v
cFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAg
IC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFi
aWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAt
PiBpbnQzMl90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAx
MCkgeworICAgICAgICAgICAgKisrcHRyID0gNTsKKyAgICAgICAgICAgIHIgKz0gKnB0cjsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tl
PGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOwor
fQorCiB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQpAQCAtMTYyLDggKzIzNyw2IEBAIHZvaWQgdGVzdExvYWRQcmVJ
bmRleDY0KCkKICAgICBmaXhTU0EocHJvYyk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKLSAgICBpZiAoaXNBUk02NCgpKQotICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgIiM4XSEiKTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsK
ICAgICAgICAgaW50NjRfdCByID0gMDsKQEAgLTIzNSw4ICszMDgsNiBAQCB2b2lkIHRlc3RMb2Fk
UG9zdEluZGV4MzIoKQogICAgIGZpeFNTQShwcm9jKTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwotICAgIGlmIChpc0FSTTY0KCkpCi0gICAgICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAiXSwgIzQiKTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQz
Ml90IHsKICAgICAgICAgaW50MzJfdCByID0gMDsKQEAgLTMwOCw4ICszNzksNiBAQCB2b2lkIHRl
c3RMb2FkUG9zdEluZGV4NjQoKQogICAgIGZpeFNTQShwcm9jKTsKIAogICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwotICAgIGlmIChpc0FSTTY0KCkpCi0gICAgICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAt
PiBpbnQ2NF90IHsKICAgICAgICAgaW50NjRfdCByID0gMDsKQEAgLTM0Miw4ICs0MTEsNyBAQCB2
b2lkIHRlc3RTdG9yZVByZUluZGV4MzIoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwcmVJbmNyZW1lbnQpOwogCiAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7Ci0gICAgaWYgKGlzQVJNNjQoKSkKLSAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjNF0hIik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZv
a2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAg
IHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzJd
LCAqcHRyKTsKQEAgLTM5NCw4ICs0NjIsNyBAQCB2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDMyKCkK
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cHJlSW5jcmVtZW50KTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwotICAg
IGlmIChpc0FSTTY0KCkpCi0gICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwg
IzQiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0PGludDMy
X3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNbMV0sIDQpOwpAQCAtNDIxLDggKzQ4OCw3IEBA
IHZvaWQgdGVzdFN0b3JlUG9zdEluZGV4NjQoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwcmVJbmNyZW1lbnQpOwogCiAgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7Ci0gICAgaWYgKGlzQVJNNjQoKSkKLSAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjOCIpOworCiAgICAgaW50cHRyX3QgcmVzID0g
aW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsK
ICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVt
c1sxXSwgNCk7CkBAIC00MDk4LDYgKzQxNjQsNyBAQCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNo
YXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAg
ICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCA2MykpOwogCiAgICAgUlVOKHRlc3RM
b2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKCkp
OwogICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CiAgICAgUlVOKHRlc3RMb2FkUG9zdElu
ZGV4MzIoKSk7CiAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCAxYjljMTAxODc2MDFiMzdkMWJm
MTE2MjMwMTlkZmE2NzgzMTIxMjZiLi4xMDczODZiNjUzMGQ0YzBkMTIxZGRlN2Q5ZDZhNzc4NTZi
Yzg2MjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
QEAgLTU1Myw2ICs1NTMsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwog
ICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoQm9vbCwgdXNlVGVtcG9yYWwsIGZhbHNlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFRlbXBv
cmFsIG9iamVjdC4iKSBcCiAgICAgdihCb29sLCB1c2VBcnJheUZpbmRMYXN0TWV0aG9kLCBmYWxz
ZSwgTm9ybWFsLCAiRXhwb3NlIHRoZSBmaW5kTGFzdCgpIGFuZCBmaW5kTGFzdEluZGV4KCkgbWV0
aG9kcyBvbiBBcnJheSBhbmQgJVR5cGVkQXJyYXklLiIpIFwKKyAgICB2KEJvb2wsIHVzZVByZVBv
c3RJbmNyZW1lbnRDYW5vbmljYWxpemF0aW9uLCBmYWxzZSwgTm9ybWFsLCAiRW5hYmxlIHRoZSBj
YW5vbmljYWxpemF0aW9uIHBoYXNlIGZvciBhcHBseWluZyBwcmUvcG9zdC1pbmNyZW1lbnQgYWRk
cmVzcyBtb2RlLiIpIFwKIAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436068</attachid>
            <date>2021-08-21 04:02:06 -0700</date>
            <delta_ts>2021-08-21 10:29:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210821060205.patch</filename>
            <type>text/plain</type>
            <size>25653</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi5lOGQzMjUxODMyNDEwNzdm
YzMwNzgwNGE4MTEyZGU5YTQ4MmY1N2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAyMS0wOC0yMSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiMy9CM0Nhbm9uaWNh
bGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNhbm9uaWNhbGl6
ZVByZVBvc3RJbmNyZW1lbnRzKToKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RMb2FkV2l0aFN0b3JlUHJlSW5k
ZXgzMik6CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9y
ZVByZUluZGV4NjQpOgorICAgICAgICAodGVzdFN0b3JlUG9zdEluZGV4MzIpOgorICAgICAgICAo
dGVzdFN0b3JlUG9zdEluZGV4NjQpOgorICAgICAgICAoYWRkU2hyVGVzdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKwogMjAyMS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHlz
dXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSB1bm5lY2Vzc2FyeSBtb3Zl
cyBpbiBZYXJyJ3Mgc3ViMzIgLyBhZGQzMiByZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcAppbmRleCBjZWRjYmY3MGU3MGY4NGM4MDBmYTg5YzdkZDgxYTQzZjg5MjdhMmUxLi40MTdl
MzVlMTBlNDQ4OTgyY2FkNjhlNzY1Y2E4ODBmM2VmNmRiNmI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMuY3BwCkBAIC01Miw2OSArNTIsNjAgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVt
ZW50cyhQcm9jZWR1cmUmIHByb2MpCiAKICAgICB1bnNpZ25lZCBpbmRleCB7IDAgfTsKICAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0IHsgcHJvYyB9OwotICAgIEJsb2NrSW5zZXJ0aW9uU2V0
IGJsb2NrSW5zZXJ0aW9uU2V0IHsgcHJvYyB9OwogCiAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9y
cyA9IHByb2MuZG9taW5hdG9ycygpOwogICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3YXJk
c0RvbWluYXRvcnMgPSBwcm9jLmJhY2t3YXJkc0RvbWluYXRvcnMoKTsKIAotICAgIEluZGV4U2V0
PFZhbHVlKj4gaWdub3JlZFZhbHVlczsKLSAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9y
eVZhbHVlKj4+IGJhc2VUb0xvYWRzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+
IHByZUluZGV4TG9hZENhbmRpZGF0ZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVl
Kj4gcG9zdEluZGV4TG9hZENhbmRpZGF0ZXM7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBoYW5kbGVk
VmFsdWVzOworICAgIEhhc2hNYXA8VmFsdWUqLCB1bnNpZ25lZD4gbWVtb3J5VG9JbmRleDsKKyAg
ICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IGFkZFRvUGFyZW50czsKKyAgICBIYXNo
TWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1h
cDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4Q2FuZGlkYXRlczsKKyAgICBIYXNoTWFw
PFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb01lbW9yaWVzOwogICAgIEhhc2hN
YXA8VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+PiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXM7CisgICAg
SGFzaE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJsb2NrVG9QcmVJbmRl
eENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPE1lbW9yeVZhbHVl
Kj4+IGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRhdGVzOwogCi0gICAgSGFzaE1hcDxWYWx1ZSosIFZl
Y3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9TdG9yZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1
ZSosIFZhbHVlKj4gcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzOwotCi0gICAgYXV0byB0cnlBZGRQ
cmVQb3N0SW5kZXhDYW5kaWRhdGUgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgeworICAgIGF1dG8gdHJ5
QWRkQ2FuZGlkYXRlcyA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAgIHN3aXRjaCAodmFs
dWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgLy8gUHJl
LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgbWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46
Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgICAgICAgICAg
Ly8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQotICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzID0gWyZdICgp
IHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAm
JiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKG1lbW9yeS0+b2Zmc2V0KCkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1
ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnks
IGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBi
YXNlVG9Mb2Fkcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQorICAgICAgICBjYXNlIExvYWQ6CiAgICAgICAgIGNhc2UgU3RvcmU6IHsK
LSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0
b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRl
cm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCi0g
ICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcyA9IFsm
XSAoKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlw
ZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxk
KDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgYmFzZVRvU3RvcmVzLmFkZChtZW1vcnktPmNoaWxkKDEp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlVcGRhdGVCYXNlVG9TdG9yZXMoKTsK
KyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCk7CisgICAgICAgICAgICBWYWx1ZSogdHlwZSA9IHZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkID8g
bWVtb3J5IDogbWVtb3J5LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmICh0eXBlLT50eXBlKCkg
IT0gSW50MzIgJiYgdHlwZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBQcmUtSW5kZXggTG9hZCBQYXR0ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBhZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAg
ICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4IFN0b3JlIFBhdHRlcm46CisgICAg
ICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAg
ICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUo
dmFsdWUxLCBiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNl
dGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0YXRpY19jYXN0PGludDY0X3Q+KG1l
bW9yeS0+b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJhc2VPZmZzZXRUb0FkZHJl
c3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJl
c3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhD
YW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBvbmx5IGNvbGxlY3QgdGhlIHBhcmVudHMgYmVsb3cgdGhlIG1lbW9yeSB2YWx1ZS4KKyAgICAg
ICAgICAgICAgICAgICAgYWRkVG9QYXJlbnRzLmFkZChhZGRyZXNzLCBWZWN0b3I8VmFsdWUqPigp
KTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb1ByZUluZGV4Q2FuZGlkYXRlcy5hZGQobWVt
b3J5LT5vd25lciwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChtZW1vcnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBMb2FkIFBhdHRlcm46CisgICAgICAgICAgICAgICAg
Ly8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAgICAgLi4u
CisgICAgICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBTdG9yZSBQYXR0
ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZTEsIGJhc2Us
IDApCisgICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgICAgIC8vICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICBiYXNlVG9NZW1vcmll
cy5hZGQobWVtb3J5LT5sYXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0
b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVt
b3J5VG9JbmRleC5hZGQobWVtb3J5LCBpbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCkBAIC0xMjIsMzggKzExMyw0MyBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNy
ZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUt
PmNoaWxkKDApOwogICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOwog
Ci0gICAgICAgICAgICBhdXRvIHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMgPSBbJl0gKCkgewot
ICAgICAgICAgICAgICAgIGlmICghcmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkg
IT0gSW50NjQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBp
bnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQdHIoKTsKLSAgICAgICAgICAgICAgICBWYWx1
ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBl
PihvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwg
IUFyZzo6aXNWYWxpZEluY3JlbWVudEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFs
dWUgaXMgYSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3Rm
aXggcGF0dGVybgotICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1
ZUtleShsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOwotICAgICAgICAg
ICAgICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZh
bHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGJhc2VUb0xvYWRzLmNvbnRhaW5zKGxlZnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb0xvYWRzLmdldChsZWZ0KSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBvc3RJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUb1N0b3Jlcy5j
b250YWlucyhsZWZ0KSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBt
ZW1vcnkgOiBiYXNlVG9TdG9yZXMuZ2V0KGxlZnQpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlBZGRwb3N0SW5kZXhDYW5k
aWRhdGVzKCk7CisgICAgICAgICAgICBpZiAoIXJpZ2h0LT5oYXNJbnRQdHIoKSB8fCB2YWx1ZS0+
dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50UHRyKCk7CisgICAgICAgICAgICBWYWx1ZTo6T2Zm
c2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZz
ZXQpOworICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1Zh
bGlkSW5jcmVtZW50SW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgLy8gc28gZmFyIHRoaXMgQWRkIHZhbHVlIGlzIGEgdmFsaWQgYWRk
cmVzcyBjYW5kaWRhdGUgZm9yIGJvdGggcHJlZml4IGFuZCBwb3N0Zml4IHBhdHRlcm4KKyAgICAg
ICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShsZWZ0LCBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOworICAgICAgICAgICAgYmFzZU9mZnNldFRvQWRkcmVz
c2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKHZhbHVlKTsKKworICAgICAgICAgICAgaWYgKCFiYXNlVG9NZW1vcmllcy5jb250YWlu
cyhsZWZ0KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAoTWVtb3J5
VmFsdWUqIG1lbW9yeSA6IGJhc2VUb01lbW9yaWVzLmdldChsZWZ0KSkgeworICAgICAgICAgICAg
ICAgIHBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnktPm93bmVyLCBWZWN0b3I8
TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIGNo
aWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIGlmIChhZGRUb1BhcmVudHMu
Y29udGFpbnMoY2hpbGQpKQorICAgICAgICAgICAgICAgIGFkZFRvUGFyZW50cy5maW5kKGNoaWxk
KS0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgfQogICAgIH07CiAKKyAgICAvLyBkYXRh
TG9nKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyNcbiIpOworICAgIC8vIGRhdGFMb2cocHJvYyk7CisgICAgLy8gZGF0YUxvZygi
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjXG4iKTsKKwogICAgIGZvciAoQmFzaWNCbG9jayogYmFzaWNCbG9jayA6IHByb2MuYmxv
Y2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJhc2lj
QmxvY2stPnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgICAgIHRyeUFkZFByZVBvc3RJbmRleENh
bmRpZGF0ZShiYXNpY0Jsb2NrLT5hdChpbmRleCkpOworICAgICAgICAgICAgdHJ5QWRkQ2FuZGlk
YXRlcyhiYXNpY0Jsb2NrLT5hdChpbmRleCkpOwogICAgIH0KIAogICAgIGF1dG8gY29udHJvbEVx
dWl2YWxlbnQgPSBbJl0gKFZhbHVlKiB2MSwgVmFsdWUqIHYyKSAtPiBib29sIHsKQEAgLTE2MSw2
OCArMTU3LDkzIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJl
JiBwcm9jKQogICAgICAgICAgICAgfHwgKGRvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwg
djEtPm93bmVyKSAmJiBiYWNrd2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYy
LT5vd25lcikpOwogICAgIH07CiAKLSAgICAvLyBUaGlzIHNlYXJjaCBpcyBleHBlbnNpdmUuIEhv
d2V2ZXIsIGR1ZSB0byB0aGUgZ3JlZWR5IHBhdHRlcm4KLSAgICAvLyBtYXRjaGluZywgbm8gYmV0
dGVyIG1ldGhvZCBjYW4gYmUgcHJvcG9zZWQgYXQgcHJlc2VudC4KLSAgICBhdXRvIHZhbHVlSW5k
ZXhJbkJhc2ljQmxvY2sgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgLT4gdW5zaWduZWQgewotICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUt
Pm93bmVyOwotICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBpZiAoYmxvY2stPmF0KGluZGV4KSA9PSB2YWx1ZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlu
ZGV4OwotICAgIH07Ci0KLSAgICBmb3IgKGF1dG8gcGFpciA6IHByZUluZGV4TG9hZENhbmRpZGF0
ZXMpIHsKLSAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAgICAgICBW
YWx1ZSogYWRkcmVzcyA9IHBhaXIudmFsdWU7Ci0gICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNv
bnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29u
dHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFk
ZChiYXNlLCBvZmZzZXQpCi0gICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAg
LS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgotICAgICAgICAvLyBtZW1vcnkgPSBMb2FkKGJh
c2UsIG9mZnNldCkgICAgICAgbWVtb3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQotICAgICAgICB1
bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2soYWRkcmVzcykg
KyAxOwotICAgICAgICBNZW1vcnlWYWx1ZSogbmV3TWVtb3J5ID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dDxNZW1vcnlWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIExvYWQsIG1lbW9yeS0+dHlwZSgpLCBhZGRy
ZXNzLT5vcmlnaW4oKSwgbWVtb3J5LT5sYXN0Q2hpbGQoKSk7Ci0gICAgICAgIG5ld01lbW9yeS0+
c2V0T2Zmc2V0KG1lbW9yeS0+b2Zmc2V0KCkpOwotICAgICAgICBtZW1vcnktPnJlcGxhY2VXaXRo
SWRlbnRpdHkobmV3TWVtb3J5KTsKLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYWRkcmVz
cy0+b3duZXIpOwotCi0gICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAg
IGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOwotICAgIH0KLQotICAgIGF1dG8gZGV0ZWN0UG9z
dEluZGV4ID0gWyZdIChjb25zdCBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiYgY2FuZGlk
YXRlcykgewotICAgICAgICBmb3IgKGF1dG8gcGFpciA6IGNhbmRpZGF0ZXMpIHsKLSAgICAgICAg
ICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBwYWlyLmtleTsKLSAgICAgICAgICAgIFZhbHVlKiBh
ZGRyZXNzID0gcGFpci52YWx1ZTsKLSAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRh
aW5zKG1lbW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJv
bEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKKyAgICAvLyBDb252ZXJ0IFByZS1JbmRleCBM
b2FkIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorICAgIC8vIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4KKyAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgIC8vIG1lbW9yeSA9IExvYWQo
YmFzZSwgb2Zmc2V0KSAgICAgICAgICAgIC0tPiAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZz
ZXQpCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4KKyAgICAvLyBwYXJlbnQgPSBCM09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAg
ICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5ld0FkZHJlc3MsIC4uLikKKyAgICAvLworICAgIC8vIENv
bnZlcnQgUHJlLUluZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorICAg
IC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgYWRkcmVz
cyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAg
IC8vIG1lbW9yeSA9IFN0b3JlKHZhbHVlMSwgYmFzZSwgb2Zmc2V0KSAgIC0tPiAgICAgbWVtb3J5
ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpCisgICAgLy8gLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAvLyBwYXJlbnQgPSBCM09wY29k
ZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5ld0FkZHJl
c3MsIC4uLikKKyAgICBmb3IgKGF1dG8gcGFpciA6IGJsb2NrVG9QcmVJbmRleENhbmRpZGF0ZXMp
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmFzaWNCbG9jayA9IHBhaXIua2V5OworICAgICAgICBW
ZWN0b3I8TWVtb3J5VmFsdWUqPiBjYW5kaWRhdGVzID0gcGFpci52YWx1ZTsKKyAgICAgICAgLy8g
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6
IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gcHJlSW5kZXhDYW5k
aWRhdGVzLmdldChtZW1vcnkpOworICAgICAgICAgICAgaWYgKGhhbmRsZWRWYWx1ZXMuY29udGFp
bnMobWVtb3J5KSB8fCBoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9s
RXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpIHx8ICFhZGRUb1BhcmVudHMuY29udGFpbnMoYWRk
cmVzcykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHVuc2lnbmVk
IGluc2VydGlvbkluZGV4ID0gdmFsdWVJbmRleEluQmFzaWNCbG9jayhtZW1vcnkpOwotICAgICAg
ICAgICAgVmFsdWUqIG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVl
PihpbnNlcnRpb25JbmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFz
SW50KCkpOwotICAgICAgICAgICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihpbnNlcnRpb25JbmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNz
LT5jaGlsZCgwKSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRo
SWRlbnRpdHkobmV3QWRkcmVzcyk7Ci0gICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSht
ZW1vcnktPm93bmVyKTsKKyAgICAgICAgICAgIC8vIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0tLS0t
LS0gbWVtb3J5ICIsIGRlZXBEdW1wKG1lbW9yeSksICJcbiIpOworICAgICAgICAgICAgLy8gZGF0
YUxvZygiLS0tLS0tLS0tLS0tLS0tLS0tLSBhZGRyZXNzICIsIGRlZXBEdW1wKGFkZHJlc3MpLCAi
XG4iKTsKKyAgICAgICAgICAgIC8vIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgdW5zaWdu
ZWQgaW5zZXJ0aW9uSW5kZXggPSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAg
ICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihpbnNlcnRp
b25JbmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgYWRkcmVz
cy0+Y2hpbGQoMSkpOworICAgICAgICAgICAgLy8gdXBkYXRlIGFsbCBhZGRyZXNzIHJlZmVyZW5j
ZXMgd2l0aCB0aGUgbmV3QWRkcmVzcworICAgICAgICAgICAgZm9yIChWYWx1ZSogcGFyZW50IDog
YWRkVG9QYXJlbnRzLmdldChhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXJlbnQtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBWYWx1ZSogY2hpbGQgPSBwYXJlbnQtPmNoaWxkKGkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQgPT0gYWRkcmVzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZGF0YUxvZygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwYXJlbnQgYmVmb3JlIG5l
d0FkZHJlc3MgIiwgZGVlcER1bXAocGFyZW50KSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnQtPmNoaWxkKGkpID0gbmV3QWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGFyZW50IGFm
dGVyIG5ld0FkZHJlc3MgIiwgZGVlcER1bXAocGFyZW50KSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFk
ZChhZGRyZXNzKTsKKyAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAg
ICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsKICAgICAgICAgfQotICAgIH07Cisg
ICAgICAgIC8vIFRoaXMgd2lsbCByZXNldCB2YWx1ZXMnIGluZGV4ZXMgaWYgdGhlcmUgYXJlIGFu
eSBpbnNlcnRpb25zLgorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShiYXNpY0Jsb2NrKTsK
KyAgICAgICAgLy8gaWYgKGNoYW5nZWQpIHsKKyAgICAgICAgLy8gICAgIGRhdGFMb2coIj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PVxuIik7CisgICAgICAgIC8vICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgpOyArK2kpCisgICAgICAgIC8vICAgICAgICAgZGF0YUxv
ZyhkZWVwRHVtcChiYXNpY0Jsb2NrLT5hdChpKSksICJcbiIpOworICAgICAgICAvLyAgICAgZGF0
YUxvZygiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgICAgICAgLy8gfQorICAgIH0KIAor
ICAgIC8vIENvbnZlcnQgUG9zdC1JbmRleCBMb2FkIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBG
b3JtOgogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPZmZz
ZXQgPSBDb25zdGFudAogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKICAgICAvLyBtZW1vcnkgPSBMb2Fk
KGJhc2UsIDApICAgICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQogICAgIC8vIC4u
LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KICAgICAvLyBhZGRyZXNzID0g
QWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3Mp
Ci0gICAgZGV0ZWN0UG9zdEluZGV4KHBvc3RJbmRleExvYWRDYW5kaWRhdGVzKTsKLQorICAgIC8v
CisgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNh
bCBGb3JtOgogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdP
ZmZzZXQgPSBDb25zdGFudAogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKICAgICAvLyBtZW1vcnkgPSBT
dG9yZSh2YWx1ZSwgYmFzZSwgMCkgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDAp
CiAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgogICAgIC8v
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHko
bmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4U3RvcmVDYW5kaWRhdGVz
KTsKKyAgICBmb3IgKGF1dG8gcGFpciA6IGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRhdGVzKSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sgPSBwYWlyLmtleTsKKyAgICAgICAgVmVjdG9y
PE1lbW9yeVZhbHVlKj4gY2FuZGlkYXRlcyA9IHBhaXIudmFsdWU7CisgICAgICAgIGZvciAoTWVt
b3J5VmFsdWUqIG1lbW9yeSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRy
ZXNzID0gcG9zdEluZGV4Q2FuZGlkYXRlcy5nZXQobWVtb3J5KTsKKyAgICAgICAgICAgIGlmICho
YW5kbGVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaGFuZGxlZFZhbHVlcy5jb250YWlucyhh
ZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXgg
PSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAgICAgVmFsdWUqIG5ld09mZnNl
dCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbnNlcnRpb25JbmRleCwgbWVt
b3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOworICAgICAgICAgICAg
VmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihpbnNlcnRpb25J
bmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgbmV3T2Zmc2V0
KTsKKyAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3QWRkcmVzcyk7
CisKKyAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgICAgICBo
YW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGlzIHdp
bGwgcmVzZXQgdmFsdWVzJyBpbmRleGVzIGlmIHRoZXJlIGFyZSBhbnkgaW5zZXJ0aW9ucy4KKyAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmFzaWNCbG9jayk7CisgICAgfQorCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAppbmRl
eCBiOTNjZTgxOWIxZTNmYTE0MDlkMGI3YzczYjAxYzhiZmI5MTE2M2U1Li5iMWMyZWVmOGExNmY1
YTY4Njg5MmFkMmM3ZDg0MjQ3ZjYxNmU3MmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCkBAIC0xMTAsNyArMTEwLDYgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlKQogICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAyKSB7CiAg
ICAgICAgIG9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMocHJvY2VkdXJlKTsKICAg
ICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKLQogICAgICAgICAvLyBGSVhNRTogQWRk
IG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CiAgICAgfQpAQCAtMTE4LDggKzExNywxMCBAQCB2
b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCiAgICAgbG93ZXJNYWNyb3NB
ZnRlck9wdGltaXphdGlvbnMocHJvY2VkdXJlKTsKICAgICBsZWdhbGl6ZU1lbW9yeU9mZnNldHMo
cHJvY2VkdXJlKTsKICAgICBtb3ZlQ29uc3RhbnRzKHByb2NlZHVyZSk7Ci0gICAgaWYgKE9wdGlv
bnM6OnVzZUIzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoKSAmJiBwcm9jZWR1cmUub3B0
TGV2ZWwoKSA+PSAyKQorICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAyKSB7CiAgICAg
ICAgIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKHByb2NlZHVyZSk7CisgICAgICAgIGxl
Z2FsaXplTWVtb3J5T2Zmc2V0cyhwcm9jZWR1cmUpOworICAgIH0KICAgICBlbGltaW5hdGVEZWFk
Q29kZShwcm9jZWR1cmUpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBydW4gcHVyZUNTRSBo
ZXJlIHRvIGNsZWFuIHVwIHNvbWUgcGxhdGZvcm0gc3BlY2lmaWMgY2hhbmdlcyBmcm9tIHRoZSBw
cmV2aW91cyBwaGFzZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggZTE3MWFjZjU1
ZTM2NzBmODkxZjE1YmE4ZjIwYzZjZGMxYzE4NjkyZi4uOWQ3MmYyNDEwNjA3MTY4ZDYwNDdjOWE1
Nzk3ODMzMjNjZmZjZTE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE2NCw2
ICsxMTY0LDcgQEAgdm9pZCBhZGRDb3B5VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIq
IGZpbHRlciwgY29uc3QgY2hhciogdGVzdE5hbWUpOwogCiB2b2lkIHRlc3RMb2FkUHJlSW5kZXgz
MigpOwordm9pZCB0ZXN0TG9hZFdpdGhTdG9yZVByZUluZGV4MzIoKTsKIHZvaWQgdGVzdExvYWRQ
cmVJbmRleDY0KCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKTsKIHZvaWQgdGVzdExvYWRQ
b3N0SW5kZXg2NCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
M18zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggMDgx
N2Y2MTk3YmM1ODY5NmY5NDk3MmU4ZDYwNDlmZjIxZDIwMjcwOC4uM2Y4NTc5ODI4NTJmYTViZGQx
N2I3NjUwOWJiZDAwYTIwOWU2MDI5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiM18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMu
Y3BwCkBAIC0xMDIsNiArMTAyLDgzIEBAIHZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKICAgICBD
SEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRy
KSksIHRlc3QoKSk7CiB9CiAKK3ZvaWQgdGVzdExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKCkKK3sK
KyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCB9OworICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxv
b3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxl
KiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIp
CisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiBy
MSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOwor
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJl
cXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8v
IHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIg
PSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdp
bigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BU
ZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9v
cFRlc3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAg
IGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwg
Y29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsK
KworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8g
cDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gcDMnID0gJnAzCisg
ICAgLy8gc3RvcmUoNSwgcDMnKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVw
c2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMp
OworICAgIFZhbHVlKiBwM1ByaW1lID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
T3BhcXVlLCBPcmlnaW4oKSwgcDMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCA1KSwgcDNQcmltZSk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJv
ZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgcDMpKTsK
KyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9y
aWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJl
dHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCByMik7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRh
dGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAg
IGludDMyX3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApIHsKKyAgICAgICAgICAgICor
K3B0ciA9IDU7CisgICAgICAgICAgICByICs9ICpwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgYml0
d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwogdm9pZCB0ZXN0TG9hZFBy
ZUluZGV4NjQoKQogewogICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikK
QEAgLTM0NCw2ICs0MjEsNyBAQCB2b2lkIHRlc3RTdG9yZVByZUluZGV4MzIoKQogICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIpOworCiAgICAgaW50cHRyX3QgcmVzID0g
aW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsK
ICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVt
c1syXSwgKnB0cik7CkBAIC0zNjgsNiArNDQ2LDkgQEAgdm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0
KCkKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcHJlSW5jcmVtZW50KTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwor
ICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAi
IzhdISIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0
d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50
NjRfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0cik7CkBAIC0zOTYsNiArNDc3
LDcgQEAgdm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgzMigpCiAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1
Y3Rpb24oKmNvZGUsICJdLCAjNCIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0
cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBi
aXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CkBA
IC00MjMsNiArNTA1LDcgQEAgdm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpCiAgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjOCIpOworCiAgICAgaW50cHRyX3QgcmVzID0g
aW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsK
ICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVt
c1sxXSwgNCk7CkBAIC00MDk3LDE3ICs0MTgwLDE1IEBAIHZvaWQgYWRkU2hyVGVzdHMoY29uc3Qg
Y2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQog
ICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpT
aHJBcmdJbW0zMigweGZmZmZmZmZmLCA2MykpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUIzQ2Fu
b25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoKSkgewotICAgICAgICBSVU4odGVzdExvYWRQcmVJ
bmRleDMyKCkpOwotICAgICAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOwotICAgICAgICBS
VU4odGVzdExvYWRQb3N0SW5kZXgzMigpKTsKLSAgICAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4
NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQ
cmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOworICAgIFJVTih0
ZXN0TG9hZFBvc3RJbmRleDY0KCkpOwogCi0gICAgICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDMy
KCkpOwotICAgICAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXg2NCgpKTsKLSAgICAgICAgUlVOKHRl
c3RTdG9yZVBvc3RJbmRleDMyKCkpOwotICAgICAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4NjQo
KSk7Ci0gICAgfQorICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0
U3RvcmVQcmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKKyAg
ICBSVU4odGVzdFN0b3JlUG9zdEluZGV4NjQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXgg
MGUxZmM1ODdhNWI3YzMxNzkzOGY1ZjZkNWMxOTlkZWZlMGU3MDU3NC4uMWI5YzEwMTg3NjAxYjM3
ZDFiZjExNjIzMDE5ZGZhNjc4MzEyMTI2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCkBAIC00MzcsNyArNDM3LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3Nl
bWJseUZhc3RNZW1vcnkoKTsKICAgICB2KFVuc2lnbmVkLCBtYXhCM1RhaWxEdXBCbG9ja1NpemUs
IDMsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heEIzVGFpbER1cEJsb2Nr
U3VjY2Vzc29ycywgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VCM0hvaXN0
TG9vcEludmFyaWFudFZhbHVlcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoQm9v
bCwgdXNlQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIFwKICAgICB2KEJvb2wsIHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3Rl
ZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBc
CiAgICAgdihPcHRpb25TdHJpbmcsIGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmlj
dGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIp
IFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436077</attachid>
            <date>2021-08-21 10:29:58 -0700</date>
            <delta_ts>2021-08-23 09:09:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210821122957.patch</filename>
            <type>text/plain</type>
            <size>27129</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi5lMzkwYTFmMDc2MGQ1MzQz
N2NiYjAyMDExM2EyMzU5N2RhYzkyOTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAyMS0wOC0yMSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uIAorICAgICAgICBTbywgbW92aW5nIHRoZSBsb2FkIGFib3ZlIHRoZSBzdG9yZSBpcyBzZW1h
bnRpY2FsbHkgaW5jb3JyZWN0IGJlY2F1c2UgaXQncyBub3QgaWRlbnRpY2FsIHRvCisgICAgICAg
IHRoZSBiZWhhdmlvciBvZiB0aGUgb3JpZ2luYWwgcHJvZ3JhbS4gSW4gdGhpcyBjYXNlLCBtYXli
ZSB3ZSBzaG91bGQgYXBwbHkgYWxpYXMgYW5hbHlzaXMgdG8KKyAgICAgICAgZGV0ZWN0IHRoZSB2
aW9sYXRpb25zIG9mIHJlZmVyZW5jZSB1cGRhdGluZy4KKworICAgICAgICBUbyBzb2x2ZSB0aGlz
IHByb2JsZW0sIHdlIG1vdmVzIHRoZSBhZGRyZXNzIHZhbHVlIHRvIGp1c3QgYmVmb3JlIHRoZSBt
ZW1vcnkgdmFsdWUgaW5zdGVhZCBvZiAKKyAgICAgICAgbW92aW5nIG1lbW9yeSB2YWx1ZSB1cHdh
cmQuCisKKyAgICAgICAgQ29udmVydCBQcmUtSW5kZXggTG9hZCBQYXR0ZXJuIHRvIHRoZSBDYW5v
bmljYWwgRm9ybToKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAu
Li4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAg
ICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdB
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFz
ZSwgb2Zmc2V0KSAgICAgICAgICAgIC0tPiAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQp
CisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC4uLgorICAgICAgICAgICAgcGFyZW50ID0gQjNPcGNvZGUoYWRkcmVzcywgLi4uKSAgICAg
ICAgICAgICAgICBwYXJlbnQgPSBCM09wY29kZShuZXdBZGRyZXNzLCAuLi4pCisKKyAgICAgICAg
Q29udmVydCBQcmUtSW5kZXggU3RvcmUgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06Cisg
ICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAg
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZTEsIGJhc2UsIG9m
ZnNldCkgICAtLT4gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlMSwgYmFzZSwgb2Zmc2V0KQorICAg
ICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Li4KKyAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAg
ICAgICAgcGFyZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIFRvIHJl
cGxhY2UgdGhlIGFkZHJlc3MgdmFsdWUncyB1c2UgcmVmZXJlbmNlcyB3aXRoIHRoZSBuZXdBZGRy
ZXNzLCB3ZSBuZWVkIHRvIGNvbGxlY3QgdGhlCisgICAgICAgIGFkZHJlc3MgdmFsdWUncyBwYXJl
bnRzIHRoYXQgYWZ0ZXIgdGhlIG1lbW9yeSB2YWx1ZS4gVGhlbiwgcmVwbGFjZSBhbGwgdXNlIHJl
ZmVyZW5jZXMgd2l0aAorICAgICAgICB0aGUgbmV3QWRkcmVzcy4KKworICAgICAgICAqIGIzL0Iz
Q2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y2Fu
b25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMpOgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6CisgICAgICAgICogYjMvdGVzdGIz
Lmg6CisgICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVzdExvYWRXaXRoU3Rv
cmVQcmVJbmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAo
dGVzdFN0b3JlUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0U3RvcmVQb3N0SW5kZXgzMik6Cisg
ICAgICAgICh0ZXN0U3RvcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChhZGRTaHJUZXN0cyk6Cisg
ICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorCiAyMDIxLTA4LTIwICBZdXN1a2UgU3V6
dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIHVubmVjZXNz
YXJ5IG1vdmVzIGluIFlhcnIncyBzdWIzMiAvIGFkZDMyIHJlbGF0ZWQgY29kZQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdElu
Y3JlbWVudHMuY3BwCmluZGV4IGNlZGNiZjcwZTcwZjg0YzgwMGZhODljN2RkODFhNDNmODkyN2Ey
ZTEuLjBjMWM1ZmFhODA3YmE0MTU4NDNkOTM5MGUwNWNhZjE5MTc0N2NmOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0
SW5jcmVtZW50cy5jcHAKQEAgLTUyLDY5ICs1Miw2MCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBv
c3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKIAogICAgIHVuc2lnbmVkIGluZGV4IHsgMCB9
OwogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQgeyBwcm9jIH07Ci0gICAgQmxvY2tJbnNl
cnRpb25TZXQgYmxvY2tJbnNlcnRpb25TZXQgeyBwcm9jIH07CiAKICAgICBEb21pbmF0b3JzJiBk
b21pbmF0b3JzID0gcHJvYy5kb21pbmF0b3JzKCk7CiAgICAgQmFja3dhcmRzRG9taW5hdG9ycyYg
YmFja3dhcmRzRG9taW5hdG9ycyA9IHByb2MuYmFja3dhcmRzRG9taW5hdG9ycygpOwogCi0gICAg
SW5kZXhTZXQ8VmFsdWUqPiBpZ25vcmVkVmFsdWVzOwotICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0
b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTG9hZHM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSos
IFZhbHVlKj4gcHJlSW5kZXhMb2FkQ2FuZGlkYXRlczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVl
KiwgVmFsdWUqPiBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlczsKKyAgICBJbmRleFNldDxWYWx1ZSo+
IGhhbmRsZWRWYWx1ZXM7CisgICAgSGFzaE1hcDxWYWx1ZSosIHVuc2lnbmVkPiBtZW1vcnlUb0lu
ZGV4OworICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8VmFsdWUqPj4gYWRkVG9QYXJlbnRzOwor
ICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4Q2FuZGlkYXRlczsKKyAg
ICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhDYW5kaWRhdGVzOworICAg
IEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7CiAg
ICAgSGFzaE1hcDxWYWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRUb0FkZHJlc3Nl
czsKKyAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmxvY2tU
b1ByZUluZGV4Q2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8TWVt
b3J5VmFsdWUqPj4gYmxvY2tUb1Bvc3RJbmRleENhbmRpZGF0ZXM7CiAKLSAgICBIYXNoTWFwPFZh
bHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb1N0b3JlczsKLSAgICBIYXNoTWFwPE1l
bW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXM7Ci0KLSAgICBhdXRv
IHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZSA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CisgICAg
YXV0byB0cnlBZGRDYW5kaWRhdGVzID0gWyZdIChWYWx1ZSogdmFsdWUpIHsKICAgICAgICAgc3dp
dGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAgICAg
ICAvLyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vICAgICAuLi4KLSAgICAgICAgICAgIC8vICAg
ICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vIFBvc3QtSW5kZXgg
UGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCi0gICAg
ICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNl
LCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeUFkZHByZUluZGV4TG9hZENhbmRpZGF0ZXMg
PSBbJl0gKCkgewotICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+dHlwZSgpICE9
IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZvcm0obWVtb3J5LT5v
ZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShtZW1vcnktPmNoaWxkKDAp
LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0
a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZUluZGV4TG9hZENhbmRpZGF0ZXMuYWRk
KG1lbW9yeSwgYWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGJhc2VUb0xvYWRzLmFkZChtZW1vcnktPmNoaWxkKDApLCBWZWN0b3I8TWVtb3J5VmFs
dWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7Ci0gICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCisgICAgICAgIGNhc2UgTG9hZDoKICAgICAgICAgY2FzZSBT
dG9yZTogewotICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAv
LyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgbWVt
b3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vIFBvc3QtSW5k
ZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFz
ZSwgMCkKLSAgICAgICAgICAgIC8vICAgICAuLi4KLSAgICAgICAgICAgIC8vICAgICBhZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIGF1dG8gdHJ5VXBkYXRlQmFzZVRvU3Rv
cmVzID0gWyZdICgpIHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxk
KDApLT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9IEludDY0
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9y
eS0+Y2hpbGQoMCktPmhhc0ludCgpIHx8IG1lbW9yeS0+b2Zmc2V0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBiYXNlVG9TdG9yZXMuYWRkKG1lbW9yeS0+
Y2hpbGQoMSksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
bWVtb3J5KTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHRyeVVwZGF0ZUJhc2VUb1N0
b3JlcygpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKTsKKyAgICAgICAgICAgIFZhbHVlKiB0eXBlID0gdmFsdWUtPm9wY29kZSgpID09
IExvYWQgPyBtZW1vcnkgOiBtZW1vcnktPmNoaWxkKDApOworICAgICAgICAgICAgaWYgKHR5cGUt
PnR5cGUoKSAhPSBJbnQzMiAmJiB0eXBlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFByZS1JbmRleCBMb2FkIFBhdHRlcm46CisgICAgICAgICAgICAgICAgLy8gICAg
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vICAgICAuLi4K
KyAgICAgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBQcmUtSW5kZXggU3RvcmUgUGF0dGVy
bjoKKyAgICAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisg
ICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgICAgIC8vICAgICBtZW1vcnkg
PSBTdG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICBWYWx1ZUtleSBi
YXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwgc3RhdGljX2Nhc3Q8aW50
NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIGlmICghYmFzZU9mZnNl
dFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkpKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNl
dFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5KSkgeworICAgICAgICAgICAgICAgICAgICBw
cmVJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIG9ubHkgY29sbGVjdCB0aGUgcGFyZW50cyBiZWxvdyB0aGUgbWVtb3J5IHZhbHVl
LgorICAgICAgICAgICAgICAgICAgICBhZGRUb1BhcmVudHMuYWRkKGFkZHJlc3MsIFZlY3RvcjxW
YWx1ZSo+KCkpOworICAgICAgICAgICAgICAgICAgICBibG9ja1RvUHJlSW5kZXhDYW5kaWRhdGVz
LmFkZChtZW1vcnktPm93bmVyLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBQb3N0LUluZGV4IExvYWQgUGF0dGVybjoKKyAgICAgICAg
ICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQorICAgICAgICAgICAgICAgIC8v
ICAgICAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBQb3N0LUluZGV4IFN0
b3JlIFBhdHRlcm46CisgICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVl
MSwgYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAgICAg
Ly8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIGJhc2VU
b01lbW9yaWVzLmFkZChtZW1vcnktPmxhc3RDaGlsZCgpLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigp
KS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtZW1vcnlUb0luZGV4LmFkZChtZW1vcnksIGluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKQEAgLTEyMiwzOCArMTEzLDM5IEBAIGJvb2wgY2Fub25pY2FsaXplUHJl
UG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgVmFsdWUqIGxlZnQg
PSB2YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hp
bGQoMSk7CiAKLSAgICAgICAgICAgIGF1dG8gdHJ5QWRkcG9zdEluZGV4Q2FuZGlkYXRlcyA9IFsm
XSAoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkgfHwgdmFsdWUt
PnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIGludHB0cl90IG9mZnNldCA9IHJpZ2h0LT5hc0ludFB0cigpOwotICAgICAgICAgICAg
ICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9m
ZnNldFR5cGU+KG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9m
ZnNldCB8fCAhQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIC8vIHNvIGZhciB0aGlz
IEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJlc3MgY2FuZGlkYXRlIGZvciBib3RoIHByZWZpeCBh
bmQgcG9zdGZpeCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtl
eSA9IFZhbHVlS2V5KGxlZnQsIHN0YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgYmFzZU9mZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBW
ZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoYmFzZVRvTG9hZHMuY29udGFpbnMobGVmdCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTG9hZHMuZ2V0KGxlZnQpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4TG9hZENhbmRpZGF0ZXMuYWRkKG1lbW9y
eSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYmFzZVRv
U3RvcmVzLmNvbnRhaW5zKGxlZnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5
VmFsdWUqIG1lbW9yeSA6IGJhc2VUb1N0b3Jlcy5nZXQobGVmdCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHRyeUFkZHBvc3RJ
bmRleENhbmRpZGF0ZXMoKTsKKyAgICAgICAgICAgIGlmICghcmlnaHQtPmhhc0ludFB0cigpIHx8
IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgIFZh
bHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5
cGU+KG9mZnNldCk7CisgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFB
cmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2
YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVy
bgorICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7CisgICAgICAgICAgICBiYXNlT2Zmc2V0
VG9BZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRrZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQodmFsdWUpOworCisgICAgICAgICAgICBpZiAoIWJhc2VUb01lbW9yaWVz
LmNvbnRhaW5zKGxlZnQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm9y
IChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTWVtb3JpZXMuZ2V0KGxlZnQpKSB7CisgICAg
ICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgYmxvY2tUb1Bvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeS0+b3duZXIs
IFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChW
YWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgaWYgKGFkZFRv
UGFyZW50cy5jb250YWlucyhjaGlsZCkpCisgICAgICAgICAgICAgICAgYWRkVG9QYXJlbnRzLmZp
bmQoY2hpbGQpLT52YWx1ZS5hcHBlbmQodmFsdWUpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IGZvciAoQmFzaWNCbG9jayogYmFzaWNCbG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7
CiAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytp
bmRleCkKLSAgICAgICAgICAgIHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZShiYXNpY0Jsb2Nr
LT5hdChpbmRleCkpOworICAgICAgICAgICAgdHJ5QWRkQ2FuZGlkYXRlcyhiYXNpY0Jsb2NrLT5h
dChpbmRleCkpOwogICAgIH0KIAogICAgIGF1dG8gY29udHJvbEVxdWl2YWxlbnQgPSBbJl0gKFZh
bHVlKiB2MSwgVmFsdWUqIHYyKSAtPiBib29sIHsKQEAgLTE2MSw2OCArMTUzLDgwIEBAIGJvb2wg
Y2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAg
ICAgfHwgKGRvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNr
d2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOwogICAgIH07
CiAKLSAgICAvLyBUaGlzIHNlYXJjaCBpcyBleHBlbnNpdmUuIEhvd2V2ZXIsIGR1ZSB0byB0aGUg
Z3JlZWR5IHBhdHRlcm4KLSAgICAvLyBtYXRjaGluZywgbm8gYmV0dGVyIG1ldGhvZCBjYW4gYmUg
cHJvcG9zZWQgYXQgcHJlc2VudC4KLSAgICBhdXRvIHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sgPSBb
Jl0gKFZhbHVlKiB2YWx1ZSkgLT4gdW5zaWduZWQgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IDA7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOwotICAgICAgICBm
b3IgKGluZGV4ID0gMDsgaW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBpZiAoYmxvY2stPmF0KGluZGV4KSA9PSB2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH07Ci0KLSAg
ICBmb3IgKGF1dG8gcGFpciA6IHByZUluZGV4TG9hZENhbmRpZGF0ZXMpIHsKLSAgICAgICAgTWVt
b3J5VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IHBh
aXIudmFsdWU7Ci0gICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwg
aWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVt
b3J5LCBhZGRyZXNzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBhZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCi0g
ICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBM
b2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC4uLgotICAgICAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAg
bWVtb3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQotICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25J
bmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2soYWRkcmVzcykgKyAxOwotICAgICAgICBNZW1v
cnlWYWx1ZSogbmV3TWVtb3J5ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oaW5z
ZXJ0aW9uSW5kZXgsIExvYWQsIG1lbW9yeS0+dHlwZSgpLCBhZGRyZXNzLT5vcmlnaW4oKSwgbWVt
b3J5LT5sYXN0Q2hpbGQoKSk7Ci0gICAgICAgIG5ld01lbW9yeS0+c2V0T2Zmc2V0KG1lbW9yeS0+
b2Zmc2V0KCkpOwotICAgICAgICBtZW1vcnktPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3TWVtb3J5
KTsKLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYWRkcmVzcy0+b3duZXIpOwotCi0gICAg
ICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRk
KGFkZHJlc3MpOwotICAgIH0KLQotICAgIGF1dG8gZGV0ZWN0UG9zdEluZGV4ID0gWyZdIChjb25z
dCBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiYgY2FuZGlkYXRlcykgewotICAgICAgICBm
b3IgKGF1dG8gcGFpciA6IGNhbmRpZGF0ZXMpIHsKLSAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBwYWlyLmtleTsKLSAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gcGFpci52YWx1
ZTsKLSAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdu
b3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5
LCBhZGRyZXNzKSkKKyAgICAvLyBDb252ZXJ0IFByZS1JbmRleCBMb2FkIFBhdHRlcm4gdG8gdGhl
IENhbm9uaWNhbCBGb3JtOgorICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgLy8gLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAvLyAuLi4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBB
ZGQoYmFzZSwgb2Zmc2V0KQorICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgIC0tPiAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgLy8gLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAvLyBwYXJl
bnQgPSBCM09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bj
b2RlKG5ld0FkZHJlc3MsIC4uLikKKyAgICAvLworICAgIC8vIENvbnZlcnQgUHJlLUluZGV4IFN0
b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorICAgIC8vIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4KKyAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgIC8vIG1lbW9yeSA9IFN0b3Jl
KHZhbHVlMSwgYmFzZSwgb2Zmc2V0KSAgIC0tPiAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUxLCBi
YXNlLCBvZmZzZXQpCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuLi4KKyAgICAvLyBwYXJlbnQgPSBCM09wY29kZShhZGRyZXNzLCAuLi4pICAg
ICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5ld0FkZHJlc3MsIC4uLikKKyAgICBmb3Ig
KGF1dG8gcGFpciA6IGJsb2NrVG9QcmVJbmRleENhbmRpZGF0ZXMpIHsKKyAgICAgICAgQmFzaWNC
bG9jayogYmFzaWNCbG9jayA9IHBhaXIua2V5OworICAgICAgICBWZWN0b3I8TWVtb3J5VmFsdWUq
PiBjYW5kaWRhdGVzID0gcGFpci52YWx1ZTsKKyAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVt
b3J5IDogY2FuZGlkYXRlcykgeworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwcmVJbmRl
eENhbmRpZGF0ZXMuZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICBpZiAoaGFuZGxlZFZhbHVlcy5j
b250YWlucyhtZW1vcnkpIHx8IGhhbmRsZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNv
bnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykgfHwgIWFkZFRvUGFyZW50cy5jb250YWlu
cyhhZGRyZXNzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdW5z
aWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrKG1lbW9yeSk7Ci0g
ICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0
VmFsdWU+KGluc2VydGlvbkluZGV4LCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgx
KS0+YXNJbnQoKSk7Ci0gICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFk
ZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFj
ZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsKLSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKG1lbW9yeS0+b3duZXIpOworICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXgg
PSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAgICAgVmFsdWUqIG5ld0FkZHJl
c3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihpbnNlcnRpb25JbmRleCwgQWRkLCBtZW1v
cnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgYWRkcmVzcy0+Y2hpbGQoMSkpOworICAg
ICAgICAgICAgLy8gdXBkYXRlIGFsbCBhZGRyZXNzIHJlZmVyZW5jZXMgd2l0aCB0aGUgbmV3QWRk
cmVzcworICAgICAgICAgICAgZm9yIChWYWx1ZSogcGFyZW50IDogYWRkVG9QYXJlbnRzLmdldChh
ZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJl
bnQtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2hp
bGQgPSBwYXJlbnQtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgPT0g
YWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+Y2hpbGQoaSkgPSBuZXdB
ZGRyZXNzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKLSAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRk
KGFkZHJlc3MpOworICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAg
ICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOwogICAgICAgICB9Ci0gICAgfTsKKyAg
ICAgICAgLy8gVGhpcyB3aWxsIHJlc2V0IHZhbHVlcycgaW5kZXhlcyBpZiB0aGVyZSBhcmUgYW55
IGluc2VydGlvbnMuCisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJhc2ljQmxvY2spOwor
ICAgIH0KIAorICAgIC8vIENvbnZlcnQgUG9zdC1JbmRleCBMb2FkIFBhdHRlcm4gdG8gdGhlIENh
bm9uaWNhbCBGb3JtOgogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdPZmZzZXQgPSBDb25zdGFudAogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKICAgICAvLyBtZW1v
cnkgPSBMb2FkKGJhc2UsIDApICAgICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQog
ICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KICAgICAvLyBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5l
d0FkZHJlc3MpCi0gICAgZGV0ZWN0UG9zdEluZGV4KHBvc3RJbmRleExvYWRDYW5kaWRhdGVzKTsK
LQorICAgIC8vCisgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhl
IENhbm9uaWNhbCBGb3JtOgogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAogICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKICAgICAvLyBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUs
IGJhc2UsIDApCiAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4u
LgogICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0g
SWRlbnRpdHkobmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4U3RvcmVD
YW5kaWRhdGVzKTsKKyAgICBmb3IgKGF1dG8gcGFpciA6IGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRh
dGVzKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sgPSBwYWlyLmtleTsKKyAgICAg
ICAgVmVjdG9yPE1lbW9yeVZhbHVlKj4gY2FuZGlkYXRlcyA9IHBhaXIudmFsdWU7CisgICAgICAg
IGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFZh
bHVlKiBhZGRyZXNzID0gcG9zdEluZGV4Q2FuZGlkYXRlcy5nZXQobWVtb3J5KTsKKyAgICAgICAg
ICAgIGlmIChoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaGFuZGxlZFZhbHVlcy5j
b250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0
aW9uSW5kZXggPSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAgICAgVmFsdWUq
IG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbnNlcnRpb25J
bmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOworICAg
ICAgICAgICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihp
bnNlcnRpb25JbmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwg
bmV3T2Zmc2V0KTsKKyAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3
QWRkcmVzcyk7CisKKyAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAg
ICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBUaGlzIHdpbGwgcmVzZXQgdmFsdWVzJyBpbmRleGVzIGlmIHRoZXJlIGFyZSBhbnkgaW5zZXJ0
aW9ucy4KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmFzaWNCbG9jayk7CisgICAgfQor
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmNwcAppbmRleCBiOTNjZTgxOWIxZTNmYTE0MDlkMGI3YzczYjAxYzhiZmI5MTE2M2U1Li42NjJm
MzIzODA1Y2NmNzM2NzhkZGU2ZjEzOTM3ZGNlZWQzN2U0MDk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJhdGUuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBnZW5lcmF0ZVRv
QWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgIGxvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRp
b25zKHByb2NlZHVyZSk7CiAgICAgbGVnYWxpemVNZW1vcnlPZmZzZXRzKHByb2NlZHVyZSk7CiAg
ICAgbW92ZUNvbnN0YW50cyhwcm9jZWR1cmUpOwotICAgIGlmIChPcHRpb25zOjp1c2VCM0Nhbm9u
aWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKCkgJiYgcHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikK
KyAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikKICAgICAgICAgY2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMocHJvY2VkdXJlKTsKICAgICBlbGltaW5hdGVEZWFkQ29kZShwcm9j
ZWR1cmUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggZTE3MWFjZjU1ZTM2NzBm
ODkxZjE1YmE4ZjIwYzZjZGMxYzE4NjkyZi4uOWQ3MmYyNDEwNjA3MTY4ZDYwNDdjOWE1Nzk3ODMz
MjNjZmZjZTE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE2NCw2ICsxMTY0
LDcgQEAgdm9pZCBhZGRDb3B5VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIqIGZpbHRl
ciwgY29uc3QgY2hhciogdGVzdE5hbWUpOwogCiB2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpOwor
dm9pZCB0ZXN0TG9hZFdpdGhTdG9yZVByZUluZGV4MzIoKTsKIHZvaWQgdGVzdExvYWRQcmVJbmRl
eDY0KCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKTsKIHZvaWQgdGVzdExvYWRQb3N0SW5k
ZXg2NCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggMDgxN2Y2MTk3
YmM1ODY5NmY5NDk3MmU4ZDYwNDlmZjIxZDIwMjcwOC4uM2Y4NTc5ODI4NTJmYTViZGQxN2I3NjUw
OWJiZDAwYTIwOWU2MDI5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiM18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBA
IC0xMDIsNiArMTAyLDgzIEBAIHZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKICAgICBDSEVDS19F
UShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRl
c3QoKSk7CiB9CiAKK3ZvaWQgdGVzdExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKCkKK3sKKyAgICBp
ZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9Owor
ICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBW
YXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0g
cHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAg
Ly8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJv
b3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7CisgICAgcm9v
dC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCBy
MSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRl
ZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3Bf
VGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0g
UGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29w
VGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBy
KTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BU
ZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwg
RnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMgPSBw
MiArIDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gcDMnID0gJnAzCisgICAgLy8g
c3RvcmUoNSwgcDMnKQorICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24o
cjMsIF5yMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAg
IFZhbHVlKiBwM1ByaW1lID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgT3BhcXVl
LCBPcmlnaW4oKSwgcDMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHBy
b2MsIFN0b3JlLCBPcmlnaW4oKSwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCA1KSwgcDNQcmltZSk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgcDMpKTsKKyAgICBs
b29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1w
LCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiBy
MgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCByMik7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJv
Yyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAgIGludDMy
X3QgciA9IDA7CisgICAgICAgIHdoaWxlIChyIDwgMTApIHsKKyAgICAgICAgICAgICorK3B0ciA9
IDU7CisgICAgICAgICAgICByICs9ICpwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHI7
CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9j
YXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwogdm9pZCB0ZXN0TG9hZFByZUluZGV4
NjQoKQogewogICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM0
NCw2ICs0MjEsNyBAQCB2b2lkIHRlc3RTdG9yZVByZUluZGV4MzIoKQogICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tl
PGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBw
dHIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1syXSwg
KnB0cik7CkBAIC0zNjgsNiArNDQ2LDkgQEAgdm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCkKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJl
SW5jcmVtZW50KTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlm
IChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIp
OworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9j
YXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+
KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0cik7CkBAIC0zOTYsNiArNDc3LDcgQEAg
dm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgzMigpCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24o
KmNvZGUsICJdLCAjNCIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90Pigq
Y29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNl
X2Nhc3Q8aW50MzJfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CkBAIC00MjMs
NiArNTA1LDcgQEAgdm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpCiAgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2Vz
SW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjOCIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tl
PGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBw
dHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1sxXSwg
NCk7CkBAIC00MDk3LDE3ICs0MTgwLDE1IEBAIHZvaWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciog
ZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJV
Tih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdJ
bW0zMigweGZmZmZmZmZmLCA2MykpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUIzQ2Fub25pY2Fs
aXplUHJlUG9zdEluY3JlbWVudHMoKSkgewotICAgICAgICBSVU4odGVzdExvYWRQcmVJbmRleDMy
KCkpOwotICAgICAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOwotICAgICAgICBSVU4odGVz
dExvYWRQb3N0SW5kZXgzMigpKTsKLSAgICAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7
CisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRl
eDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9h
ZFBvc3RJbmRleDY0KCkpOwogCi0gICAgICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDMyKCkpOwot
ICAgICAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXg2NCgpKTsKLSAgICAgICAgUlVOKHRlc3RTdG9y
ZVBvc3RJbmRleDMyKCkpOwotICAgICAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4NjQoKSk7Ci0g
ICAgfQorICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0U3RvcmVQ
cmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4o
dGVzdFN0b3JlUG9zdEluZGV4NjQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggMGUxZmM1
ODdhNWI3YzMxNzkzOGY1ZjZkNWMxOTlkZWZlMGU3MDU3NC4uMWI5YzEwMTg3NjAxYjM3ZDFiZjEx
NjIzMDE5ZGZhNjc4MzEyMTI2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCkBAIC00MzcsNyArNDM3LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZh
c3RNZW1vcnkoKTsKICAgICB2KFVuc2lnbmVkLCBtYXhCM1RhaWxEdXBCbG9ja1NpemUsIDMsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heEIzVGFpbER1cEJsb2NrU3VjY2Vz
c29ycywgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VCM0hvaXN0TG9vcElu
dmFyaWFudFZhbHVlcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoQm9vbCwgdXNl
QjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIFwKICAgICB2KEJvb2wsIHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImlu
c3RhbGxzIHRoZSAkdm0gZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAg
dihPcHRpb25TdHJpbmcsIGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAi
ZmlsZSB3aXRoIGRlYnVnZ2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436201</attachid>
            <date>2021-08-23 09:09:36 -0700</date>
            <delta_ts>2021-08-23 11:01:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210823110935.patch</filename>
            <type>text/plain</type>
            <size>27764</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi45MDU4MGRmMmY3ZWYwOWZk
ZTdlNzk1OTZiODlhYzg0ZWI1MmMxYTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMS0wOC0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uIAorICAgICAgICBTbywgbW92aW5nIHRoZSBsb2FkIGFib3ZlIHRoZSBzdG9yZSBpcyBzZW1h
bnRpY2FsbHkgaW5jb3JyZWN0IGJlY2F1c2UgaXQncyBub3QgaWRlbnRpY2FsIHRvCisgICAgICAg
IHRoZSBiZWhhdmlvciBvZiB0aGUgb3JpZ2luYWwgcHJvZ3JhbS4gSW4gdGhpcyBjYXNlLCBtYXli
ZSB3ZSBzaG91bGQgYXBwbHkgYWxpYXMgYW5hbHlzaXMgdG8KKyAgICAgICAgZGV0ZWN0IHRoZSB2
aW9sYXRpb25zIG9mIHJlZmVyZW5jZSB1cGRhdGluZy4KKworICAgICAgICBUbyBzb2x2ZSB0aGlz
IHByb2JsZW0sIHdlIG1vdmVzIHRoZSBhZGRyZXNzIHZhbHVlIHRvIGp1c3QgYmVmb3JlIHRoZSBt
ZW1vcnkgdmFsdWUgaW5zdGVhZCBvZiAKKyAgICAgICAgbW92aW5nIG1lbW9yeSB2YWx1ZSB1cHdh
cmQuCisKKyAgICAgICAgQ29udmVydCBQcmUtSW5kZXggTG9hZCBQYXR0ZXJuIHRvIHRoZSBDYW5v
bmljYWwgRm9ybToKKworICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAg
ICAgICAgICAgICAgICAgICBhZGRyZXNzID0gTm9wCisgICAgICAgICAgICAuLi4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAg
ICAgICAgICAgIC0tPiAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAg
ICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAg
ICAgICAgICAgcGFyZW50ID0gQjNPcGNvZGUoYWRkcmVzcywgLi4uKSAgICAgICAgICAgICAgICBw
YXJlbnQgPSBCM09wY29kZShuZXdBZGRyZXNzLCAuLi4pCisKKyAgICAgICAgQ29udmVydCBQcmUt
SW5kZXggU3RvcmUgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06CisKKyAgICAgICAgICAg
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9
IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAg
ICBtZW1vcnkgPSBTdG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkgICAtLT4gICAgIG1lbW9yeSA9
IFN0b3JlKHZhbHVlMSwgYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIHBhcmVudCA9
IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFyZW50ID0gQjNPcGNvZGUo
bmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIFRvIG1vdmUgdGhlIGFkZHJlc3MgdmFsdWUgZG93
bndhcmQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgbm8gdXNlIHJlZmVyZW5jZSBvZiBhZGRy
ZXNzIGJldHdlZW4KKyAgICAgICAgdGhlIGFkZHJlc3MgYW5kIG1lbW9yeSB2YWx1ZXMuCisKKyAg
ICAgICAgKiBiMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OmNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKToKKyAgICAgICAgKiBiMy9C
M0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAg
ICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRl
c3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDMy
KToKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4NjQpOgorICAgICAgICAodGVzdFN0b3JlUG9z
dEluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUG9zdEluZGV4NjQpOgorICAgICAgICAoYWRk
U2hyVGVzdHMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKwogMjAyMS0wOC0y
MCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJl
bW92ZSB1bm5lY2Vzc2FyeSBtb3ZlcyBpbiBZYXJyJ3Mgc3ViMzIgLyBhZGQzMiByZWxhdGVkIGNv
ZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVBy
ZVBvc3RJbmNyZW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNh
bGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcAppbmRleCBjZWRjYmY3MGU3MGY4NGM4MDBmYTg5Yzdk
ZDgxYTQzZjg5MjdhMmUxLi5jNWEzZDM0MDYzMmU2N2FmOWI1YTJjYThkNTA4MDMwYmY4OTVhMjU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQ
b3N0SW5jcmVtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25p
Y2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCkBAIC01Miw2OSArNTIsNjEgQEAgYm9vbCBjYW5v
bmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAKICAgICB1bnNpZ25l
ZCBpbmRleCB7IDAgfTsKICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0IHsgcHJvYyB9Owot
ICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGJsb2NrSW5zZXJ0aW9uU2V0IHsgcHJvYyB9OwogCiAgICAg
RG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IHByb2MuZG9taW5hdG9ycygpOwogICAgIEJhY2t3YXJk
c0RvbWluYXRvcnMmIGJhY2t3YXJkc0RvbWluYXRvcnMgPSBwcm9jLmJhY2t3YXJkc0RvbWluYXRv
cnMoKTsKIAotICAgIEluZGV4U2V0PFZhbHVlKj4gaWdub3JlZFZhbHVlczsKLSAgICBIYXNoTWFw
PFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb0xvYWRzOwotICAgIEhhc2hNYXA8
TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4TG9hZENhbmRpZGF0ZXM7Ci0gICAgSGFzaE1h
cDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4TG9hZENhbmRpZGF0ZXM7CisgICAgSW5k
ZXhTZXQ8VmFsdWUqPiBoYW5kbGVkVmFsdWVzOworICAgIEhhc2hNYXA8VmFsdWUqLCB1bnNpZ25l
ZD4gbWVtb3J5VG9JbmRleDsKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IGFk
ZFRvUGFyZW50czsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleENh
bmRpZGF0ZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4Q2Fu
ZGlkYXRlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VU
b01lbW9yaWVzOwogICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+PiBiYXNlT2Zm
c2V0VG9BZGRyZXNzZXM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPE1lbW9yeVZh
bHVlKj4+IGJsb2NrVG9QcmVJbmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2Nr
KiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJsb2NrVG9Qb3N0SW5kZXhDYW5kaWRhdGVzOwogCi0g
ICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9TdG9yZXM7Ci0g
ICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVz
OwotCi0gICAgYXV0byB0cnlBZGRQcmVQb3N0SW5kZXhDYW5kaWRhdGUgPSBbJl0gKFZhbHVlKiB2
YWx1ZSkgeworICAgIGF1dG8gdHJ5QWRkQ2FuZGlkYXRlcyA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7
CiAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDog
ewotICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAg
YWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAg
ICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAv
LyBQb3N0LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChi
YXNlLCAwKQotICAgICAgICAgICAgLy8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExv
YWRDYW5kaWRhdGVzID0gWyZdICgpIHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVt
b3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1v
cnktPnR5cGUoKSAhPSBJbnQzMiAmJiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhG
b3JtKG1lbW9yeS0+b2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVt
b3J5LT5jaGlsZCgwKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhi
YXNlT2Zmc2V0a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5n
ZXQoYmFzZU9mZnNldGtleSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRD
YW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBiYXNlVG9Mb2Fkcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVj
dG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAg
ICAgICAgICAgfTsKLQotICAgICAgICAgICAgdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcygp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQorICAgICAgICBjYXNlIExvYWQ6CiAg
ICAgICAgIGNhc2UgU3RvcmU6IHsKLSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgot
ICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAg
ICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCi0gICAgICAgICAg
ICAvLyBQb3N0LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3Rv
cmUodmFsdWUsIGJhc2UsIDApCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAv
LyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeVVw
ZGF0ZUJhc2VUb1N0b3JlcyA9IFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUq
IG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAo
bWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCktPnR5
cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgYmFzZVRvU3RvcmVz
LmFkZChtZW1vcnktPmNoaWxkKDEpLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKG1lbW9yeSk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlV
cGRhdGVCYXNlVG9TdG9yZXMoKTsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICBWYWx1ZSogdHlwZSA9IHZhbHVl
LT5vcGNvZGUoKSA9PSBMb2FkID8gbWVtb3J5IDogbWVtb3J5LT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgIGlmICh0eXBlLT50eXBlKCkgIT0gSW50MzIgJiYgdHlwZS0+dHlwZSgpICE9IEludDY0KQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBQcmUtSW5kZXggTG9hZCBQYXR0ZXJuOgorICAgICAgICAg
ICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAg
ICAvLyAgICAgLi4uCisgICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4
IFN0b3JlIFBhdHRlcm46CisgICAgICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgICAgICAv
LyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAg
ICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0
YXRpY19jYXN0PGludDY0X3Q+KG1lbW9yeS0+b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogYWRkcmVz
cyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHZpb2xhdGVkIGFkZHJlc3MgdmFsdWUgaWYgaXQgaGFz
IGFueSB1c2UgcmVmZXJlbmNlcyBiZXR3ZWVuIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVz
CisgICAgICAgICAgICAgICAgICAgIGlmIChhZGRUb1BhcmVudHMuY29udGFpbnMoYWRkcmVzcykg
JiYgYWRkVG9QYXJlbnRzLmZpbmQoYWRkcmVzcyktPnZhbHVlLnNpemUoKSA+IDApCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhD
YW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBibG9j
a1RvUHJlSW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnktPm93bmVyLCBWZWN0b3I8TWVtb3J5VmFs
dWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBQb3N0LUluZGV4IExv
YWQgUGF0dGVybjoKKyAgICAgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAw
KQorICAgICAgICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgYWRk
cmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyBQb3N0LUluZGV4IFN0b3JlIFBhdHRlcm46CisgICAgICAgICAgICAgICAgLy8gICAg
IG1lbW9yeSA9IFN0b3JlKHZhbHVlMSwgYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAgICAg
Li4uCisgICAgICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQor
ICAgICAgICAgICAgICAgIGJhc2VUb01lbW9yaWVzLmFkZChtZW1vcnktPmxhc3RDaGlsZCgpLCBW
ZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1vcnlUb0luZGV4LmFkZChtZW1vcnksIGluZGV4
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEyMiwzOCArMTE0LDQwIEBA
IGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAg
ICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICBWYWx1
ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CiAKLSAgICAgICAgICAgIGF1dG8gdHJ5QWRkcG9z
dEluZGV4Q2FuZGlkYXRlcyA9IFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyaWdodC0+
aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJpZ2h0LT5hc0lu
dFB0cigpOwotICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0g
c3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhG
b3JtKHNtYWxsT2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIC8vIHNvIGZhciB0aGlzIEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJlc3MgY2FuZGlk
YXRlIGZvciBib3RoIHByZWZpeCBhbmQgcG9zdGZpeCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAg
VmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0YXRpY19jYXN0PGludDY0
X3Q+KHNtYWxsT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYmFzZU9mZnNldFRvQWRkcmVzc2Vz
LmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZVRvTG9hZHMuY29udGFpbnMobGVm
dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFz
ZVRvTG9hZHMuZ2V0KGxlZnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4TG9h
ZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoYmFzZVRvU3RvcmVzLmNvbnRhaW5zKGxlZnQpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb1N0b3Jlcy5nZXQobGVm
dCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMuYWRk
KG1lbW9yeSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgIHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMoKTsKKyAgICAgICAgICAgIGlmICgh
cmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQ
dHIoKTsKKyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICBpZiAoc21hbGxP
ZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZvcm0oc21hbGxP
ZmZzZXQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBzbyBmYXIg
dGhpcyBBZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVm
aXggYW5kIHBvc3RmaXggcGF0dGVybgorICAgICAgICAgICAgYWRkVG9QYXJlbnRzLmFkZCh2YWx1
ZSwgVmVjdG9yPFZhbHVlKj4oKSk7CisgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5
ID0gVmFsdWVLZXkobGVmdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc21hbGxPZmZzZXQpKTsKKyAg
ICAgICAgICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVjdG9y
PFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7CisKKyAgICAgICAgICAg
IGlmICghYmFzZVRvTWVtb3JpZXMuY29udGFpbnMobGVmdCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmll
cy5nZXQobGVmdCkpIHsKKyAgICAgICAgICAgICAgICBwb3N0SW5kZXhDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBibG9ja1RvUG9zdEluZGV4Q2FuZGlkYXRl
cy5hZGQobWVtb3J5LT5vd25lciwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KKworICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7Cisg
ICAgICAgICAgICBpZiAoYWRkVG9QYXJlbnRzLmNvbnRhaW5zKGNoaWxkKSkKKyAgICAgICAgICAg
ICAgICBhZGRUb1BhcmVudHMuZmluZChjaGlsZCktPnZhbHVlLmFwcGVuZCh2YWx1ZSk7CisgICAg
ICAgIH0KICAgICB9OwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrIDogcHJvYy5i
bG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYmFz
aWNCbG9jay0+c2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgdHJ5QWRkUHJlUG9zdEluZGV4
Q2FuZGlkYXRlKGJhc2ljQmxvY2stPmF0KGluZGV4KSk7CisgICAgICAgICAgICB0cnlBZGRDYW5k
aWRhdGVzKGJhc2ljQmxvY2stPmF0KGluZGV4KSk7CiAgICAgfQogCiAgICAgYXV0byBjb250cm9s
RXF1aXZhbGVudCA9IFsmXSAoVmFsdWUqIHYxLCBWYWx1ZSogdjIpIC0+IGJvb2wgewpAQCAtMTYx
LDY4ICsxNTUsODMgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1
cmUmIHByb2MpCiAgICAgICAgICAgICB8fCAoZG9taW5hdG9ycy5kb21pbmF0ZXModjItPm93bmVy
LCB2MS0+b3duZXIpICYmIGJhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKHYxLT5vd25lciwg
djItPm93bmVyKSk7CiAgICAgfTsKIAotICAgIC8vIFRoaXMgc2VhcmNoIGlzIGV4cGVuc2l2ZS4g
SG93ZXZlciwgZHVlIHRvIHRoZSBncmVlZHkgcGF0dGVybgotICAgIC8vIG1hdGNoaW5nLCBubyBi
ZXR0ZXIgbWV0aG9kIGNhbiBiZSBwcm9wb3NlZCBhdCBwcmVzZW50LgotICAgIGF1dG8gdmFsdWVJ
bmRleEluQmFzaWNCbG9jayA9IFsmXSAoVmFsdWUqIHZhbHVlKSAtPiB1bnNpZ25lZCB7Ci0gICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB2YWx1
ZS0+b3duZXI7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChibG9jay0+YXQoaW5kZXgpID09IHZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
aW5kZXg7Ci0gICAgfTsKKyAgICAvLyBDb252ZXJ0IFByZS1JbmRleCBMb2FkIFBhdHRlcm4gdG8g
dGhlIENhbm9uaWNhbCBGb3JtOgorICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNl
dCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBOb3AKKyAgICAvLyAgICAgLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAvLyAgICAgLi4u
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0g
QWRkKGJhc2UsIG9mZnNldCkKKyAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQp
ICAgICAgICAgICAgLS0+ICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAgICAvLyAg
ICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAg
ICAvLyAgICAgcGFyZW50ID0gQjNPcGNvZGUoYWRkcmVzcywgLi4uKSAgICAgICAgICAgICAgICBw
YXJlbnQgPSBCM09wY29kZShuZXdBZGRyZXNzLCAuLi4pCisgICAgLy8KKyAgICAvLyBDb252ZXJ0
IFByZS1JbmRleCBTdG9yZSBQYXR0ZXJuIHRvIHRoZSBDYW5vbmljYWwgRm9ybToKKyAgICAvLyAg
ICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgICAgICAgICAgICBhZGRyZXNz
ID0gTm9wCisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLi4uCisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgLy8gICAg
IG1lbW9yeSA9IFN0b3JlKHZhbHVlMSwgYmFzZSwgb2Zmc2V0KSAgIC0tPiAgICAgbWVtb3J5ID0g
U3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpCisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgLy8gICAgIHBhcmVudCA9IEIz
T3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFyZW50ID0gQjNPcGNvZGUobmV3
QWRkcmVzcywgLi4uKQorICAgIGZvciAoYXV0byBwYWlyIDogYmxvY2tUb1ByZUluZGV4Q2FuZGlk
YXRlcykgeworICAgICAgICBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrID0gcGFpci5rZXk7CisgICAg
ICAgIFZlY3RvcjxNZW1vcnlWYWx1ZSo+IGNhbmRpZGF0ZXMgPSBwYWlyLnZhbHVlOworICAgICAg
ICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBjYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBW
YWx1ZSogYWRkcmVzcyA9IHByZUluZGV4Q2FuZGlkYXRlcy5nZXQobWVtb3J5KTsKKyAgICAgICAg
ICAgIGlmIChoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaGFuZGxlZFZhbHVlcy5j
b250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYWRkVG9QYXJlbnRz
LmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFhZGRUb1BhcmVudHMuZmluZChhZGRyZXNzKS0+dmFsdWUu
c2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgZm9yIChhdXRvIHBhaXIg
OiBwcmVJbmRleExvYWRDYW5kaWRhdGVzKSB7Ci0gICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkg
PSBwYWlyLmtleTsKLSAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwYWlyLnZhbHVlOwotICAgICAg
ICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29u
dGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAvLyAuLi4gICAg
ICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQp
Ci0gICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KLSAgICAg
ICAgLy8gbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5
KG5ld01lbW9yeSkKLSAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4
SW5CYXNpY0Jsb2NrKGFkZHJlc3MpICsgMTsKLSAgICAgICAgTWVtb3J5VmFsdWUqIG5ld01lbW9y
eSA9IGluc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KGluc2VydGlvbkluZGV4LCBMb2Fk
LCBtZW1vcnktPnR5cGUoKSwgYWRkcmVzcy0+b3JpZ2luKCksIG1lbW9yeS0+bGFzdENoaWxkKCkp
OwotICAgICAgICBuZXdNZW1vcnktPnNldE9mZnNldChtZW1vcnktPm9mZnNldCgpKTsKLSAgICAg
ICAgbWVtb3J5LT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld01lbW9yeSk7Ci0gICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGFkZHJlc3MtPm93bmVyKTsKLQotICAgICAgICBpZ25vcmVkVmFsdWVz
LmFkZChtZW1vcnkpOwotICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGluc2VydGlvbkluZGV4ID0gbWVtb3J5VG9JbmRleC5nZXQobWVtb3J5
KTsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxW
YWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hp
bGQoMCksIGFkZHJlc3MtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbGwgYWRk
cmVzcyByZWZlcmVuY2VzIHdpdGggdGhlIG5ld0FkZHJlc3MKKyAgICAgICAgICAgIGZvciAoVmFs
dWUqIHBhcmVudCA6IGFkZFRvUGFyZW50cy5nZXQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyZW50LT5udW1DaGlsZHJlbigpOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNoaWxkID0gcGFyZW50LT5jaGlsZChpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkID09IGFkZHJlc3MpCisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnQtPmNoaWxkKGkpID0gbmV3QWRkcmVzczsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aE5vcElnbm9y
aW5nVHlwZSgpOworCisgICAgICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChtZW1vcnkpOworICAg
ICAgICAgICAgaGFuZGxlZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gVGhpcyB3aWxsIHJlc2V0IHZhbHVlcycgaW5kZXhlcyBpZiB0aGVyZSBhcmUgYW55IGluc2Vy
dGlvbnMuCisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJhc2ljQmxvY2spOwogICAgIH0K
IAotICAgIGF1dG8gZGV0ZWN0UG9zdEluZGV4ID0gWyZdIChjb25zdCBIYXNoTWFwPE1lbW9yeVZh
bHVlKiwgVmFsdWUqPiYgY2FuZGlkYXRlcykgewotICAgICAgICBmb3IgKGF1dG8gcGFpciA6IGNh
bmRpZGF0ZXMpIHsKLSAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBwYWlyLmtleTsK
LSAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gcGFpci52YWx1ZTsKLSAgICAgICAgICAgIGlm
IChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlu
cyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKKyAgICAv
LyBDb252ZXJ0IFBvc3QtSW5kZXggTG9hZCBQYXR0ZXJuIHRvIHRoZSBDYW5vbmljYWwgRm9ybToK
KyAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNl
dCA9IENvbnN0YW50CisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKKyAgICAvLyAgICAgbWVtb3J5
ID0gTG9hZChiYXNlLCAwKSAgICAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAg
ICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgorICAgIC8v
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50
aXR5KG5ld0FkZHJlc3MpCisgICAgLy8KKyAgICAvLyBDb252ZXJ0IFBvc3QtSW5kZXggU3RvcmUg
UGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgLy8gICAgIC4uLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAorICAgIC8vICAgICAu
Li4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNl
LCBuZXdPZmZzZXQpCisgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAg
ICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKKyAgICAvLyAgICAgLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgorICAgIC8vICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisg
ICAgZm9yIChhdXRvIHBhaXIgOiBibG9ja1RvUG9zdEluZGV4Q2FuZGlkYXRlcykgeworICAgICAg
ICBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrID0gcGFpci5rZXk7CisgICAgICAgIFZlY3RvcjxNZW1v
cnlWYWx1ZSo+IGNhbmRpZGF0ZXMgPSBwYWlyLnZhbHVlOworICAgICAgICBmb3IgKE1lbW9yeVZh
bHVlKiBtZW1vcnkgOiBjYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9
IHBvc3RJbmRleENhbmRpZGF0ZXMuZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICBpZiAoaGFuZGxl
ZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGhhbmRsZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVz
cykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkIGluc2VydGlvbkluZGV4ID0gdmFs
dWVJbmRleEluQmFzaWNCbG9jayhtZW1vcnkpOworICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0
aW9uSW5kZXggPSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOwogICAgICAgICAgICAgVmFsdWUq
IG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbnNlcnRpb25J
bmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOwogICAg
ICAgICAgICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihp
bnNlcnRpb25JbmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwg
bmV3T2Zmc2V0KTsKICAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3
QWRkcmVzcyk7Ci0gICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShtZW1vcnktPm93bmVy
KTsKIAotICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKLSAgICAgICAgICAg
IGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOworICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5h
ZGQobWVtb3J5KTsKKyAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOwogICAg
ICAgICB9Ci0gICAgfTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHJlc2V0IHZhbHVlcycgaW5kZXhl
cyBpZiB0aGVyZSBhcmUgYW55IGluc2VydGlvbnMuCisgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJhc2ljQmxvY2spOworICAgIH0KIAotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAotICAgIC8vIC4uLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkK
LSAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIDApICAgICAgICAgICAgICAgbWVtb3J5ID0gTG9h
ZChiYXNlLCAwKQotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAu
Li4KLSAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9
IElkZW50aXR5KG5ld0FkZHJlc3MpCi0gICAgZGV0ZWN0UG9zdEluZGV4KHBvc3RJbmRleExvYWRD
YW5kaWRhdGVzKTsKLQotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdPZmZzZXQgPSBDb25zdGFudAotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKLSAgICAvLyBtZW1v
cnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJh
c2UsIDApCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgot
ICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0gSWRl
bnRpdHkobmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4U3RvcmVDYW5k
aWRhdGVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCmluZGV4IGI5M2NlODE5YjFlM2ZhMTQwOWQwYjdjNzNiMDFjOGJmYjkxMTYz
ZTUuLjY2MmYzMjM4MDVjY2Y3MzY3OGRkZTZmMTM5MzdkY2VlZDM3ZTQwOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCiAgICAgbG93ZXJNYWNyb3NBZnRlck9w
dGltaXphdGlvbnMocHJvY2VkdXJlKTsKICAgICBsZWdhbGl6ZU1lbW9yeU9mZnNldHMocHJvY2Vk
dXJlKTsKICAgICBtb3ZlQ29uc3RhbnRzKHByb2NlZHVyZSk7Ci0gICAgaWYgKE9wdGlvbnM6OnVz
ZUIzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoKSAmJiBwcm9jZWR1cmUub3B0TGV2ZWwo
KSA+PSAyKQorICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAyKQogICAgICAgICBjYW5v
bmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhwcm9jZWR1cmUpOwogICAgIGVsaW1pbmF0ZURlYWRD
b2RlKHByb2NlZHVyZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCBlMTcxYWNm
NTVlMzY3MGY4OTFmMTViYThmMjBjNmNkYzFjMTg2OTJmLi45ZDcyZjI0MTA2MDcxNjhkNjA0N2M5
YTU3OTc4MzMyM2NmZmNlMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTY0
LDYgKzExNjQsNyBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVl
PFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogYm9vbCBzaG91bGRSdW4oY29uc3QgY2hh
ciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7CiAKIHZvaWQgdGVzdExvYWRQcmVJbmRl
eDMyKCk7Cit2b2lkIHRlc3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgzMigpOwogdm9pZCB0ZXN0TG9h
ZFByZUluZGV4NjQoKTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXgzMigpOwogdm9pZCB0ZXN0TG9h
ZFBvc3RJbmRleDY0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCAw
ODE3ZjYxOTdiYzU4Njk2Zjk0OTcyZThkNjA0OWZmMjFkMjAyNzA4Li4zZjg1Nzk4Mjg1MmZhNWJk
ZDE3Yjc2NTA5YmJkMDBhMjA5ZTYwMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNf
My5jcHAKQEAgLTEwMiw2ICsxMDIsODMgQEAgdm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKQogICAg
IENIRUNLX0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90Pihw
dHIpKSwgdGVzdCgpKTsKIH0KIAordm9pZCB0ZXN0TG9hZFdpdGhTdG9yZVByZUluZGV4MzIoKQor
eworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDks
IDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
bG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBw
cm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsK
KworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFyaWFi
bGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5y
MikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUq
IHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsK
KyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7
CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBG
cmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAg
Ly8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiBy
MiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3Jp
Z2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9v
cFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBs
b29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7Cisg
ICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigp
LCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkp
OworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAv
LyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBwMycgPSAmcDMK
KyAgICAvLyBzdG9yZSg1LCBwMycpCisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8g
VXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiBwMyA9IGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+
YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29wQm9k
eS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBw
Myk7CisgICAgVmFsdWUqIHAzUHJpbWUgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBPcGFxdWUsIE9yaWdpbigpLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIDUpLCBwM1ByaW1lKTsKKyAgICBWYWx1ZSogcjMgPSBsb29w
Qm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHkt
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykp
OworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8g
cmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxp
ZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAg
ICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkgeworICAgICAgICAgICAg
KisrcHRyID0gNTsKKyAgICAgICAgICAgIHIgKz0gKnB0cjsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCiB2b2lkIHRlc3RMb2Fk
UHJlSW5kZXg2NCgpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQpAQCAtMzQ0LDYgKzQyMSw3IEBAIHZvaWQgdGVzdFN0b3JlUHJlSW5kZXgzMigpCiAgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjNF0hIik7CisKICAgICBpbnRwdHJfdCByZXMg
PSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQp
OwogICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKICAgICBDSEVDS19FUShu
dW1zWzJdLCAqcHRyKTsKQEAgLTM2OCw2ICs0NDYsOSBAQCB2b2lkIHRlc3RTdG9yZVByZUluZGV4
NjQoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCBwcmVJbmNyZW1lbnQpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICIjOF0hIik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxp
bnQ2NF90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKQEAgLTM5Niw2ICs0
NzcsNyBAQCB2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDMyKCkKICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgIl0sICM0Iik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0ciA9
IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzFdLCA0KTsK
QEAgLTQyMyw2ICs1MDUsNyBAQCB2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDY0KCkKICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBj
aGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7CisKICAgICBpbnRwdHJfdCByZXMg
PSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQp
OwogICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKICAgICBDSEVDS19FUShu
dW1zWzFdLCA0KTsKQEAgLTQwOTcsMTcgKzQxODAsMTUgQEAgdm9pZCBhZGRTaHJUZXN0cyhjb25z
dCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3Mp
CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAgIFJVTih0ZXN0
WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlQjND
YW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cygpKSB7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFBy
ZUluZGV4MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7Ci0gICAgICAg
IFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOwotICAgICAgICBSVU4odGVzdExvYWRQb3N0SW5k
ZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9h
ZFByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7CisgICAgUlVO
KHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CiAKLSAgICAgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4
MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDY0KCkpOwotICAgICAgICBSVU4o
dGVzdFN0b3JlUG9zdEluZGV4MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXg2
NCgpKTsKLSAgICB9CisgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4MzIoKSk7CisgICAgUlVOKHRl
c3RTdG9yZVByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDMyKCkpOwor
ICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRl
eCAwZTFmYzU4N2E1YjdjMzE3OTM4ZjVmNmQ1YzE5OWRlZmUwZTcwNTc0Li4xYjljMTAxODc2MDFi
MzdkMWJmMTE2MjMwMTlkZmE2NzgzMTIxMjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTQzNyw3ICs0MzcsNiBAQCBib29sIGNhblVzZVdlYkFz
c2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoVW5zaWduZWQsIG1heEIzVGFpbER1cEJsb2NrU2l6
ZSwgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4QjNUYWlsRHVwQmxv
Y2tTdWNjZXNzb3JzLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZUIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihC
b29sLCB1c2VCM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgXAogICAgIHYoQm9vbCwgdXNlRG9sbGFyVk0sIGZhbHNlLCBSZXN0cmlj
dGVkLCAiaW5zdGFsbHMgdGhlICR2bSBkZWJ1Z2dpbmcgdG9vbCBpbiBnbG9iYWwgb2JqZWN0cyIp
IFwKICAgICB2KE9wdGlvblN0cmluZywgZnVuY3Rpb25PdmVycmlkZXMsIG51bGxwdHIsIFJlc3Ry
aWN0ZWQsICJmaWxlIHdpdGggZGVidWdnaW5nIG92ZXJyaWRlcyBmb3IgZnVuY3Rpb24gYm9kaWVz
IikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436211</attachid>
            <date>2021-08-23 11:01:16 -0700</date>
            <delta_ts>2021-08-23 13:10:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210823130115.patch</filename>
            <type>text/plain</type>
            <size>27741</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iYTk5MGViZTIzZjZhMWMw
NTBkM2VjYzkxODljMTA1N2ZiZmFhZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMS0wOC0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhlIHN0b3JlIGlzIHNlbWFu
dGljYWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAg
dGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0aGlzIGNhc2UsIG1heWJl
IHdlIHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAgICBkZXRlY3QgdGhlIHZp
b2xhdGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMg
cHJvYmxlbSwgd2UgbW92ZXMgdGhlIGFkZHJlc3MgdmFsdWUgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeSB2YWx1ZSBpbnN0ZWFkIG9mCisgICAgICAgIG1vdmluZyBtZW1vcnkgdmFsdWUgdXB3YXJk
LgorCisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25p
Y2FsIEZvcm06CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFy
ZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIENvbnZlcnQgUHJlLUlu
ZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorCisgICAgICAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBO
b3AKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
bWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBwYXJlbnQgPSBC
M09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5l
d0FkZHJlc3MsIC4uLikKKworICAgICAgICBUbyBtb3ZlIHRoZSBhZGRyZXNzIHZhbHVlIGRvd253
YXJkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHVzZSByZWZlcmVuY2Ugb2YgYWRkcmVz
cyBiZXR3ZWVuCisgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzLgorCisgICAg
ICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNH
ZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
TG9hZFdpdGhTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6
CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNo
clRlc3RzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMDgtMjIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0M2Y4OTI3YTJlMS4uYzVhM2Qz
NDA2MzJlNjdhZjliNWEyY2E4ZDUwODAzMGJmODk1YTI1OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTIsNjkgKzUyLDYxIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5kZXggeyAwIH07CiAgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBCbG9ja0luc2VydGlvblNldCBi
bG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMg
PSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKLSAgICBJbmRleFNldDxW
YWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
cmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+
IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOworICAgIEluZGV4U2V0PFZhbHVlKj4gaGFuZGxlZFZh
bHVlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IG1lbW9yeVRvSW5kZXg7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBhZGRUb1BhcmVudHM7CisgICAgSGFzaE1h
cDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8
TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxW
YWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9NZW1vcmllczsKICAgICBIYXNoTWFw
PFZhbHVlS2V5LCBWZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRkcmVzc2VzOworICAgIEhh
c2hNYXA8QmFzaWNCbG9jayosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBibG9ja1RvUHJlSW5kZXhD
YW5kaWRhdGVzOworICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+
PiBibG9ja1RvUG9zdEluZGV4Q2FuZGlkYXRlczsKIAotICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0
b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvU3RvcmVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUq
LCBWYWx1ZSo+IHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlczsKLQotICAgIGF1dG8gdHJ5QWRkUHJl
UG9zdEluZGV4Q2FuZGlkYXRlID0gWyZdIChWYWx1ZSogdmFsdWUpIHsKKyAgICBhdXRvIHRyeUFk
ZENhbmRpZGF0ZXMgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgewogICAgICAgICBzd2l0Y2ggKHZhbHVl
LT5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIC8vIFByZS1J
bmRleCBQYXR0ZXJuOgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zm
c2V0KQotICAgICAgICAgICAgLy8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9
IExvYWQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgot
ICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKLSAgICAgICAgICAgIC8v
ICAgICAuLi4KLSAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkK
LSAgICAgICAgICAgIGF1dG8gdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcyA9IFsmXSAoKSB7
Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0gSW50MzIgJiYg
bWVtb3J5LT50eXBlKCkgIT0gSW50NjQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIUFyZzo6aXNWYWxpZEluY3JlbWVudEluZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgVmFs
dWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0YXRpY19j
YXN0PGludDY0X3Q+KG1lbW9yeS0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUq
IGFkZHJlc3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCBh
ZGRyZXNzKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFz
ZVRvTG9hZHMuYWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0
ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIHRyeUFkZHByZUluZGV4TG9hZENhbmRpZGF0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KKyAgICAgICAgY2FzZSBMb2FkOgogICAgICAgICBjYXNlIFN0b3JlOiB7Ci0g
ICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBhZGRy
ZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9y
ZSh2YWx1ZSwgYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJu
OgotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQotICAg
ICAgICAgICAgLy8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KQotICAgICAgICAgICAgYXV0byB0cnlVcGRhdGVCYXNlVG9TdG9yZXMgPSBbJl0g
KCkgewotICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVt
b3J5VmFsdWU+KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUo
KSAhPSBJbnQzMiAmJiBtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0gSW50NjQpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgw
KS0+aGFzSW50KCkgfHwgbWVtb3J5LT5vZmZzZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIGJhc2VUb1N0b3Jlcy5hZGQobWVtb3J5LT5jaGlsZCgxKSwg
VmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwot
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgdHJ5VXBkYXRlQmFzZVRvU3RvcmVzKCk7Cisg
ICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigp
OworICAgICAgICAgICAgVmFsdWUqIHR5cGUgPSB2YWx1ZS0+b3Bjb2RlKCkgPT0gTG9hZCA/IG1l
bW9yeSA6IG1lbW9yeS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBpZiAodHlwZS0+dHlwZSgpICE9
IEludDMyICYmIHR5cGUtPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
UHJlLUluZGV4IExvYWQgUGF0dGVybjoKKyAgICAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9
IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAg
ICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIFByZS1JbmRleCBTdG9yZSBQYXR0ZXJuOgorICAgICAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAg
ICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZh
bHVlMSwgYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRr
ZXkgPSBWYWx1ZUtleShtZW1vcnktPmNoaWxkKDApLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtZW1v
cnktPm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFiYXNlT2Zmc2V0VG9BZGRyZXNz
ZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNz
ZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRo
ZSB2aW9sYXRlZCBhZGRyZXNzIHZhbHVlIGlmIGl0IGhhcyBhbnkgdXNlIHJlZmVyZW5jZXMgYmV0
d2VlbiB0aGUgYWRkcmVzcyBhbmQgbWVtb3J5IHZhbHVlcworICAgICAgICAgICAgICAgICAgICBp
ZiAoYWRkVG9QYXJlbnRzLmNvbnRhaW5zKGFkZHJlc3MpICYmIGFkZFRvUGFyZW50cy5maW5kKGFk
ZHJlc3MpLT52YWx1ZS5zaXplKCkgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIHByZUluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBh
ZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb1ByZUluZGV4Q2FuZGlkYXRlcy5h
ZGQobWVtb3J5LT5vd25lciwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBMb2FkIFBhdHRlcm46CisgICAgICAgICAg
ICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAg
ICAgLi4uCisgICAgICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBTdG9y
ZSBQYXR0ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZTEs
IGJhc2UsIDApCisgICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICBiYXNlVG9N
ZW1vcmllcy5hZGQobWVtb3J5LT5sYXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbWVtb3J5VG9JbmRleC5hZGQobWVtb3J5LCBpbmRleCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCkBAIC0xMjIsMzggKzExNCw0MCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBv
c3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0g
dmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxk
KDEpOwogCi0gICAgICAgICAgICBhdXRvIHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMgPSBbJl0g
KCkgewotICAgICAgICAgICAgICAgIGlmICghcmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50
eXBlKCkgIT0gSW50NjQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQdHIoKTsKLSAgICAgICAgICAgICAg
ICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZz
ZXRUeXBlPihvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZz
ZXQgfHwgIUFyZzo6aXNWYWxpZEluY3JlbWVudEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBB
ZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5k
IHBvc3RmaXggcGF0dGVybgotICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkg
PSBWYWx1ZUtleShsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVj
dG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJhc2VUb0xvYWRzLmNvbnRhaW5zKGxlZnQpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb0xvYWRzLmdldChsZWZ0KSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBvc3RJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnks
IHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUb1N0
b3Jlcy5jb250YWlucyhsZWZ0KSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZh
bHVlKiBtZW1vcnkgOiBiYXNlVG9TdG9yZXMuZ2V0KGxlZnQpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlBZGRwb3N0SW5k
ZXhDYW5kaWRhdGVzKCk7CisgICAgICAgICAgICBpZiAoIXJpZ2h0LT5oYXNJbnRQdHIoKSB8fCB2
YWx1ZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50UHRyKCk7CisgICAgICAgICAgICBWYWx1
ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBl
PihvZmZzZXQpOworICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJn
Ojppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgLy8gc28gZmFyIHRoaXMgQWRkIHZhbHVlIGlzIGEgdmFs
aWQgYWRkcmVzcyBjYW5kaWRhdGUgZm9yIGJvdGggcHJlZml4IGFuZCBwb3N0Zml4IHBhdHRlcm4K
KyAgICAgICAgICAgIGFkZFRvUGFyZW50cy5hZGQodmFsdWUsIFZlY3RvcjxWYWx1ZSo+KCkpOwor
ICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0YXRp
Y19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7CisgICAgICAgICAgICBiYXNlT2Zmc2V0VG9B
ZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRrZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQodmFsdWUpOworCisgICAgICAgICAgICBpZiAoIWJhc2VUb01lbW9yaWVzLmNv
bnRhaW5zKGxlZnQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm9yIChN
ZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTWVtb3JpZXMuZ2V0KGxlZnQpKSB7CisgICAgICAg
ICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgYmxvY2tUb1Bvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeS0+b3duZXIsIFZl
Y3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1
ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgaWYgKGFkZFRvUGFy
ZW50cy5jb250YWlucyhjaGlsZCkpCisgICAgICAgICAgICAgICAgYWRkVG9QYXJlbnRzLmZpbmQo
Y2hpbGQpLT52YWx1ZS5hcHBlbmQodmFsdWUpOworICAgICAgICB9CiAgICAgfTsKIAogICAgIGZv
ciAoQmFzaWNCbG9jayogYmFzaWNCbG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAg
ICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpbmRl
eCkKLSAgICAgICAgICAgIHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZShiYXNpY0Jsb2NrLT5h
dChpbmRleCkpOworICAgICAgICAgICAgdHJ5QWRkQ2FuZGlkYXRlcyhiYXNpY0Jsb2NrLT5hdChp
bmRleCkpOwogICAgIH0KIAogICAgIGF1dG8gY29udHJvbEVxdWl2YWxlbnQgPSBbJl0gKFZhbHVl
KiB2MSwgVmFsdWUqIHYyKSAtPiBib29sIHsKQEAgLTE2MSw2OCArMTU1LDgzIEBAIGJvb2wgY2Fu
b25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAg
fHwgKGRvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNrd2Fy
ZHNEb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOwogICAgIH07CiAK
LSAgICAvLyBUaGlzIHNlYXJjaCBpcyBleHBlbnNpdmUuIEhvd2V2ZXIsIGR1ZSB0byB0aGUgZ3Jl
ZWR5IHBhdHRlcm4KLSAgICAvLyBtYXRjaGluZywgbm8gYmV0dGVyIG1ldGhvZCBjYW4gYmUgcHJv
cG9zZWQgYXQgcHJlc2VudC4KLSAgICBhdXRvIHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sgPSBbJl0g
KFZhbHVlKiB2YWx1ZSkgLT4gdW5zaWduZWQgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7
Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOwotICAgICAgICBmb3Ig
KGluZGV4ID0gMDsgaW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAg
ICBpZiAoYmxvY2stPmF0KGluZGV4KSA9PSB2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH07CisgICAgLy8g
Q29udmVydCBQcmUtSW5kZXggTG9hZCBQYXR0ZXJuIHRvIHRoZSBDYW5vbmljYWwgRm9ybToKKyAg
ICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgICAgICAgICAgICBh
ZGRyZXNzID0gTm9wCisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLi4uCisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAg
Ly8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICAgIC0tPiAgICAgbWVt
b3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgLy8gICAgIHBhcmVudCA9IEIzT3Bj
b2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFyZW50ID0gQjNPcGNvZGUobmV3QWRk
cmVzcywgLi4uKQorICAgIC8vCisgICAgLy8gQ29udmVydCBQcmUtSW5kZXggU3RvcmUgUGF0dGVy
biB0byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgIC8vICAgICAuLi4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAgIC8vICAg
ICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZTEs
IGJhc2UsIG9mZnNldCkgICAtLT4gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlMSwgYmFzZSwgb2Zm
c2V0KQorICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC4uLgorICAgIC8vICAgICBwYXJlbnQgPSBCM09wY29kZShhZGRyZXNzLCAuLi4pICAg
ICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5ld0FkZHJlc3MsIC4uLikKKyAgICBmb3Ig
KGF1dG8gcGFpciA6IGJsb2NrVG9QcmVJbmRleENhbmRpZGF0ZXMpIHsKKyAgICAgICAgQmFzaWNC
bG9jayogYmFzaWNCbG9jayA9IHBhaXIua2V5OworICAgICAgICBWZWN0b3I8TWVtb3J5VmFsdWUq
PiBjYW5kaWRhdGVzID0gcGFpci52YWx1ZTsKKyAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVt
b3J5IDogY2FuZGlkYXRlcykgeworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwcmVJbmRl
eENhbmRpZGF0ZXMuZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICBpZiAoaGFuZGxlZFZhbHVlcy5j
b250YWlucyhtZW1vcnkpIHx8IGhhbmRsZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNv
bnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoIWFkZFRvUGFyZW50cy5jb250YWlucyhhZGRyZXNzKSB8fCAh
YWRkVG9QYXJlbnRzLmZpbmQoYWRkcmVzcyktPnZhbHVlLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgIGZvciAoYXV0byBwYWlyIDogcHJlSW5kZXhMb2FkQ2FuZGlkYXRl
cykgewotICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7Ci0gICAgICAgIFZh
bHVlKiBhZGRyZXNzID0gcGFpci52YWx1ZTsKLSAgICAgICAgaWYgKGlnbm9yZWRWYWx1ZXMuY29u
dGFpbnMobWVtb3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250
cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAt
LT4gIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAvLyAuLi4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLi4uCi0gICAgICAgIC8vIG1lbW9yeSA9IExvYWQoYmFz
ZSwgb2Zmc2V0KSAgICAgICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1vcnkpCi0gICAgICAgIHVu
c2lnbmVkIGluc2VydGlvbkluZGV4ID0gdmFsdWVJbmRleEluQmFzaWNCbG9jayhhZGRyZXNzKSAr
IDE7Ci0gICAgICAgIE1lbW9yeVZhbHVlKiBuZXdNZW1vcnkgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
PE1lbW9yeVZhbHVlPihpbnNlcnRpb25JbmRleCwgTG9hZCwgbWVtb3J5LT50eXBlKCksIGFkZHJl
c3MtPm9yaWdpbigpLCBtZW1vcnktPmxhc3RDaGlsZCgpKTsKLSAgICAgICAgbmV3TWVtb3J5LT5z
ZXRPZmZzZXQobWVtb3J5LT5vZmZzZXQoKSk7Ci0gICAgICAgIG1lbW9yeS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShuZXdNZW1vcnkpOwotICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShhZGRyZXNz
LT5vd25lcik7Ci0KLSAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKLSAgICAgICAg
aWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRp
b25JbmRleCA9IG1lbW9yeVRvSW5kZXguZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICBWYWx1ZSog
bmV3QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4LCBB
ZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBhZGRyZXNzLT5jaGlsZCgx
KSk7CisgICAgICAgICAgICAvLyB1cGRhdGUgYWxsIGFkZHJlc3MgcmVmZXJlbmNlcyB3aXRoIHRo
ZSBuZXdBZGRyZXNzCisgICAgICAgICAgICBmb3IgKFZhbHVlKiBwYXJlbnQgOiBhZGRUb1BhcmVu
dHMuZ2V0KGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhcmVudC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBjaGlsZCA9IHBhcmVudC0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
aGlsZCA9PSBhZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5jaGlsZChp
KSA9IG5ld0FkZHJlc3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhOb3BJZ25vcmluZ1R5cGUoKTsKKworICAgICAgICAg
ICAgaGFuZGxlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMu
YWRkKGFkZHJlc3MpOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgd2lsbCByZXNldCB2YWx1
ZXMnIGluZGV4ZXMgaWYgdGhlcmUgYXJlIGFueSBpbnNlcnRpb25zLgorICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShiYXNpY0Jsb2NrKTsKICAgICB9CiAKLSAgICBhdXRvIGRldGVjdFBvc3RJ
bmRleCA9IFsmXSAoY29uc3QgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4mIGNhbmRpZGF0
ZXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBjYW5kaWRhdGVzKSB7Ci0gICAgICAgICAg
ICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7Ci0gICAgICAgICAgICBWYWx1ZSogYWRk
cmVzcyA9IHBhaXIudmFsdWU7Ci0gICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlu
cyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xF
cXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IExv
YWQgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgLy8gICAgIC4uLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAorICAgIC8vICAg
ICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBuZXdPZmZzZXQpCisgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAg
ICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCisgICAgLy8gICAgIC4uLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtLT4gICAuLi4KKyAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNl
LCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQorICAgIC8v
CisgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNh
bCBGb3JtOgorICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV3T2Zmc2V0ID0gQ29uc3RhbnQKKyAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQorICAgIC8vICAg
ICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgICAgICAgbWVtb3J5ID0gU3RvcmUodmFs
dWUsIGJhc2UsIDApCisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
LT4gICAuLi4KKyAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAg
IGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQorICAgIGZvciAoYXV0byBwYWlyIDogYmxv
Y2tUb1Bvc3RJbmRleENhbmRpZGF0ZXMpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmFzaWNCbG9j
ayA9IHBhaXIua2V5OworICAgICAgICBWZWN0b3I8TWVtb3J5VmFsdWUqPiBjYW5kaWRhdGVzID0g
cGFpci52YWx1ZTsKKyAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogY2FuZGlkYXRl
cykgeworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwb3N0SW5kZXhDYW5kaWRhdGVzLmdl
dChtZW1vcnkpOworICAgICAgICAgICAgaWYgKGhhbmRsZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5
KSB8fCBoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9sRXF1aXZhbGVu
dChtZW1vcnksIGFkZHJlc3MpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sobWVt
b3J5KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluc2VydGlvbkluZGV4ID0gbWVtb3J5VG9JbmRl
eC5nZXQobWVtb3J5KTsKICAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCks
IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRy
ZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVt
b3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7CiAgICAgICAgICAg
ICBhZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOwotICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7CiAKLSAgICAgICAgICAgIGlnbm9y
ZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRy
ZXNzKTsKKyAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgICAg
ICBoYW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsKICAgICAgICAgfQotICAgIH07CisgICAgICAg
IC8vIFRoaXMgd2lsbCByZXNldCB2YWx1ZXMnIGluZGV4ZXMgaWYgdGhlcmUgYXJlIGFueSBpbnNl
cnRpb25zLgorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShiYXNpY0Jsb2NrKTsKKyAgICB9
CiAKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0
ID0gQ29uc3RhbnQKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCi0gICAgLy8gbWVtb3J5ID0gTG9hZChi
YXNlLCAwKSAgICAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKLSAgICAvLyAuLi4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAgLi4uCi0gICAgLy8gYWRkcmVzcyA9IEFk
ZChiYXNlLCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQot
ICAgIGRldGVjdFBvc3RJbmRleChwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlcyk7Ci0KLSAgICAvLyAu
Li4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQK
LSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9
IEFkZChiYXNlLCBuZXdPZmZzZXQpCi0gICAgLy8gbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2Us
IDApICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQotICAgIC8vIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KLSAgICAvLyBhZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCi0gICAg
ZGV0ZWN0UG9zdEluZGV4KHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlcyk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAppbmRleCBiOTNj
ZTgxOWIxZTNmYTE0MDlkMGI3YzczYjAxYzhiZmI5MTE2M2U1Li42NjJmMzIzODA1Y2NmNzM2Nzhk
ZGU2ZjEzOTM3ZGNlZWQzN2U0MDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJh
dGUuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYg
cHJvY2VkdXJlKQogICAgIGxvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zKHByb2NlZHVyZSk7
CiAgICAgbGVnYWxpemVNZW1vcnlPZmZzZXRzKHByb2NlZHVyZSk7CiAgICAgbW92ZUNvbnN0YW50
cyhwcm9jZWR1cmUpOwotICAgIGlmIChPcHRpb25zOjp1c2VCM0Nhbm9uaWNhbGl6ZVByZVBvc3RJ
bmNyZW1lbnRzKCkgJiYgcHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikKKyAgICBpZiAocHJvY2Vk
dXJlLm9wdExldmVsKCkgPj0gMikKICAgICAgICAgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMocHJvY2VkdXJlKTsKICAgICBlbGltaW5hdGVEZWFkQ29kZShwcm9jZWR1cmUpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggZTE3MWFjZjU1ZTM2NzBmODkxZjE1YmE4ZjIwYzZj
ZGMxYzE4NjkyZi4uOWQ3MmYyNDEwNjA3MTY4ZDYwNDdjOWE1Nzk3ODMzMjNjZmZjZTE5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE2NCw2ICsxMTY0LDcgQEAgdm9pZCBhZGRD
b3B5VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KCk+Pj4mKTsKIGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIqIGZpbHRlciwgY29uc3QgY2hhciog
dGVzdE5hbWUpOwogCiB2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpOwordm9pZCB0ZXN0TG9hZFdp
dGhTdG9yZVByZUluZGV4MzIoKTsKIHZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7CiB2b2lkIHRl
c3RMb2FkUG9zdEluZGV4MzIoKTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggMDgxN2Y2MTk3YmM1ODY5NmY5NDk3MmU4
ZDYwNDlmZjIxZDIwMjcwOC4uM2Y4NTc5ODI4NTJmYTViZGQxN2I3NjUwOWJiZDAwYTIwOWU2MDI5
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0xMDIsNiArMTAyLDgz
IEBAIHZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCkKICAgICBDSEVDS19FUShpbnZva2U8aW50MzJf
dD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7CiB9CiAKK3Zv
aWQgdGVzdExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVt
c1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDMyX3QqIHB0
ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJh
c2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHBy
b2MuYWRkVmFyaWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJs
ZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAg
ICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAgLy8gcDEgPSBhZGRyCisg
ICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENv
bnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUq
IHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
Pihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0
KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAg
IC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBp
ZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSog
cDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9y
aWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2Nr
KGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBV
cHNpbG9uKHAzLCBecDIpCisgICAgLy8gcDMnID0gJnAzCisgICAgLy8gc3RvcmUoNSwgcDMnKQor
ICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAv
LyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIFZhbHVlKiBwM1ByaW1l
ID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgT3BhcXVlLCBPcmlnaW4oKSwgcDMp
OworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmln
aW4oKSwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA1
KSwgcDNQcmltZSk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgcDMpKTsKKyAgICBsb29wQm9keS0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAg
bG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJl
cXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBw
cm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NB
KHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisKKyAgICBhdXRv
IHRlc3QgPSBbJl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAgIGludDMyX3QgciA9IDA7CisgICAg
ICAgIHdoaWxlIChyIDwgMTApIHsKKyAgICAgICAgICAgICorK3B0ciA9IDU7CisgICAgICAgICAg
ICByICs9ICpwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAg
IENIRUNLX0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90Pihw
dHIpKSwgdGVzdCgpKTsKK30KKwogdm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKQogewogICAgIGlm
IChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM0NCw2ICs0MjEsNyBAQCB2
b2lkIHRlc3RTdG9yZVByZUluZGV4MzIoKQogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOwogICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpj
b2RlLCAiIzRdISIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29k
ZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nh
c3Q8aW50MzJfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0cik7CkBAIC0zNjgs
NiArNDQ2LDkgQEAgdm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCkKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKIAog
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCiAgICAgaW50cHRy
X3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90Pihw
dHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJlcyk7CiAgICAgQ0hF
Q0tfRVEobnVtc1syXSwgKnB0cik7CkBAIC0zOTYsNiArNDc3LDcgQEAgdm9pZCB0ZXN0U3RvcmVQ
b3N0SW5kZXgzMigpCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYg
KGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjNCIp
OworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9j
YXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+
KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CkBAIC00MjMsNiArNTA1LDcgQEAgdm9p
ZCB0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJdLCAjOCIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29k
ZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nh
c3Q8aW50NjRfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CkBAIC00MDk3LDE3
ICs0MTgwLDE1IEBAIHZvaWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0WlNockFyZ0lt
bTMyKDB4ZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZm
LCA2MykpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUIzQ2Fub25pY2FsaXplUHJlUG9zdEluY3Jl
bWVudHMoKSkgewotICAgICAgICBSVU4odGVzdExvYWRQcmVJbmRleDMyKCkpOwotICAgICAgICBS
VU4odGVzdExvYWRQcmVJbmRleDY0KCkpOwotICAgICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgz
MigpKTsKLSAgICAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RM
b2FkUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOworICAgIFJV
Tih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkp
OwogCi0gICAgICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDMyKCkpOwotICAgICAgICBSVU4odGVz
dFN0b3JlUHJlSW5kZXg2NCgpKTsKLSAgICAgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDMyKCkp
OwotICAgICAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4NjQoKSk7Ci0gICAgfQorICAgIFJVTih0
ZXN0U3RvcmVQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDY0KCkpOwor
ICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdElu
ZGV4NjQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggMTcyMWUxNjViMWZmZWJiNGM2NjIy
NGI0OGU1MTNkNWM4NmYxZTNiMC4uMTljNTgyN2MzM2QwMjgzNmRmMDY1MTU0ZGQwMmFjYjA5ZTk1
Y2VjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBA
IC00MzcsNyArNDM3LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAg
ICB2KFVuc2lnbmVkLCBtYXhCM1RhaWxEdXBCbG9ja1NpemUsIDMsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoVW5zaWduZWQsIG1heEIzVGFpbER1cEJsb2NrU3VjY2Vzc29ycywgMywgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoQm9vbCwgdXNlQjNDYW5vbmljYWxpemVQ
cmVQb3N0SW5jcmVtZW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2
KEJvb2wsIHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImluc3RhbGxzIHRoZSAkdm0g
ZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihPcHRpb25TdHJpbmcs
IGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAiZmlsZSB3aXRoIGRlYnVn
Z2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436226</attachid>
            <date>2021-08-23 13:10:59 -0700</date>
            <delta_ts>2021-08-24 10:54:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210823151058.patch</filename>
            <type>text/plain</type>
            <size>28273</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iYTk5MGViZTIzZjZhMWMw
NTBkM2VjYzkxODljMTA1N2ZiZmFhZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMS0wOC0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhlIHN0b3JlIGlzIHNlbWFu
dGljYWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAg
dGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0aGlzIGNhc2UsIG1heWJl
IHdlIHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAgICBkZXRlY3QgdGhlIHZp
b2xhdGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMg
cHJvYmxlbSwgd2UgbW92ZXMgdGhlIGFkZHJlc3MgdmFsdWUgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeSB2YWx1ZSBpbnN0ZWFkIG9mCisgICAgICAgIG1vdmluZyBtZW1vcnkgdmFsdWUgdXB3YXJk
LgorCisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25p
Y2FsIEZvcm06CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFy
ZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIENvbnZlcnQgUHJlLUlu
ZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorCisgICAgICAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBO
b3AKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
bWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBwYXJlbnQgPSBC
M09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5l
d0FkZHJlc3MsIC4uLikKKworICAgICAgICBUbyBtb3ZlIHRoZSBhZGRyZXNzIHZhbHVlIGRvd253
YXJkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHVzZSByZWZlcmVuY2Ugb2YgYWRkcmVz
cyBiZXR3ZWVuCisgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzLgorCisgICAg
ICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNH
ZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
TG9hZFdpdGhTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6
CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNo
clRlc3RzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMDgtMjIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0M2Y4OTI3YTJlMS4uYTY0ZDFj
MTMzZGE4YWE5ZDczNTM0NTUzNmMwYjkzMmZhYTQzOTk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTIsNjkgKzUyLDUxIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5kZXggeyAwIH07CiAgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBCbG9ja0luc2VydGlvblNldCBi
bG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMg
PSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKLSAgICBJbmRleFNldDxW
YWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
cmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+
IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOworICAgIEluZGV4U2V0PFZhbHVlKj4gaGFuZGxlZFZh
bHVlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IG1lbW9yeVRvSW5kZXg7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBhZGRUb1BhcmVudHM7CisgICAgSGFzaE1h
cDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9NZW1vcmllczsKICAgICBIYXNo
TWFwPFZhbHVlS2V5LCBWZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRkcmVzc2VzOworICAg
IEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWZWN0b3I8VmFsdWUqPj4gcHJlSW5kZXhDYW5kaWRhdGVz
OworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWZWN0b3I8VmFsdWUqPj4gcG9zdEluZGV4Q2Fu
ZGlkYXRlczsKKyAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4g
YmxvY2tUb1ByZUluZGV4Q2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBWZWN0
b3I8TWVtb3J5VmFsdWUqPj4gYmxvY2tUb1Bvc3RJbmRleENhbmRpZGF0ZXM7CiAKLSAgICBIYXNo
TWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb1N0b3JlczsKLSAgICBIYXNo
TWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXM7Ci0KLSAg
ICBhdXRvIHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZSA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7
CisgICAgYXV0byB0cnlBZGRDYW5kaWRhdGVzID0gWyZdIChWYWx1ZSogdmFsdWUpIHsKICAgICAg
ICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBMb2FkOiB7Ci0gICAg
ICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBhZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vICAgICAuLi4KLSAgICAgICAgICAg
IC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vIFBvc3Qt
SW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDAp
Ci0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFk
ZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeUFkZHByZUluZGV4TG9hZENhbmRp
ZGF0ZXMgPSBbJl0gKCkgewotICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+dHlw
ZSgpICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZvcm0obWVt
b3J5LT5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShtZW1vcnktPmNo
aWxkKDApLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNldCgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZz
ZXRrZXkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRkcmVzc2VzLmdldChiYXNl
T2Zmc2V0a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZUluZGV4TG9hZENhbmRpZGF0
ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIGJhc2VUb0xvYWRzLmFkZChtZW1vcnktPmNoaWxkKDApLCBWZWN0b3I8TWVt
b3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7Ci0gICAgICAgICAg
ICB9OwotCi0gICAgICAgICAgICB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCisgICAgICAgIGNhc2UgTG9hZDoKICAgICAgICAg
Y2FzZSBTdG9yZTogewotICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46Ci0gICAgICAg
ICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyAg
ICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vIFBv
c3QtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1
ZSwgYmFzZSwgMCkKLSAgICAgICAgICAgIC8vICAgICAuLi4KLSAgICAgICAgICAgIC8vICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIGF1dG8gdHJ5VXBkYXRlQmFz
ZVRvU3RvcmVzID0gWyZdICgpIHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5
ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnkt
PmNoaWxkKDApLT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9
IEludDY0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYg
KG1lbW9yeS0+Y2hpbGQoMCktPmhhc0ludCgpIHx8IG1lbW9yeS0+b2Zmc2V0KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBiYXNlVG9TdG9yZXMuYWRkKG1l
bW9yeS0+Y2hpbGQoMSksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQobWVtb3J5KTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHRyeVVwZGF0ZUJh
c2VUb1N0b3JlcygpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5h
czxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgIFZhbHVlKiB0eXBlID0gdmFsdWUtPm9wY29k
ZSgpID09IExvYWQgPyBtZW1vcnkgOiBtZW1vcnktPmNoaWxkKDApOworICAgICAgICAgICAgaWYg
KHR5cGUtPnR5cGUoKSAhPSBJbnQzMiAmJiB0eXBlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAg
ICAgICAgICAgICAgIC8vIFByZS1JbmRleCBMb2FkIFBhdHRlcm46CisgICAgICAgICAgICAgICAg
Ly8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vICAg
ICAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQp
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBQcmUtSW5kZXggU3RvcmUg
UGF0dGVybjoKKyAgICAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCisgICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgICAgIC8vICAgICBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICBWYWx1
ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwgc3RhdGljX2Nh
c3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIGlmICghYmFz
ZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogYmFz
ZU9mZnNldFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5KSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBjaGVjayB0aGUgdmlvbGF0ZWQgYWRkcmVzcyB2YWx1ZSBpZiBpdCBoYXMgYW55IHVz
ZSByZWZlcmVuY2VzIGJldHdlZW4gdGhlIGFkZHJlc3MgYW5kIG1lbW9yeSB2YWx1ZXMKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGFkZFRvUGFyZW50cy5jb250YWlucyhhZGRyZXNzKSAmJiBhZGRU
b1BhcmVudHMuZmluZChhZGRyZXNzKS0+dmFsdWUuc2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBwcmVJbmRleENhbmRpZGF0
ZXMuYWRkKG1lbW9yeSwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChh
ZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb1ByZUluZGV4Q2FuZGlkYXRlcy5h
ZGQobWVtb3J5LT5vd25lciwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGJhc2VUb01lbW9yaWVzLmFkZChtZW1vcnktPmxhc3RDaGlsZCgpLCBW
ZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7Cisg
ICAgICAgICAgICBtZW1vcnlUb0luZGV4LmFkZChtZW1vcnksIGluZGV4KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEyMiwzOCArMTA0LDQ5IEBAIGJvb2wgY2Fub25pY2Fs
aXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgVmFsdWUq
IGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1
ZS0+Y2hpbGQoMSk7CiAKLSAgICAgICAgICAgIGF1dG8gdHJ5QWRkcG9zdEluZGV4Q2FuZGlkYXRl
cyA9IFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkgfHwg
dmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJpZ2h0LT5hc0ludFB0cigpOwotICAgICAg
ICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFs
dWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0
ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKHNtYWxsT2Zmc2V0
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIC8vIHNvIGZh
ciB0aGlzIEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJlc3MgY2FuZGlkYXRlIGZvciBib3RoIHBy
ZWZpeCBhbmQgcG9zdGZpeCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9m
ZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgYmFzZU9mZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0
a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYmFzZVRvTG9hZHMuY29udGFpbnMobGVmdCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTG9hZHMuZ2V0KGxl
ZnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4TG9hZENhbmRpZGF0ZXMuYWRk
KG1lbW9yeSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
YmFzZVRvU3RvcmVzLmNvbnRhaW5zKGxlZnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
TWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb1N0b3Jlcy5nZXQobGVmdCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIXJp
Z2h0LT5oYXNJbnRQdHIoKSB8fCB2YWx1ZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50UHRy
KCk7CisgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19j
YXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOworICAgICAgICAgICAgaWYgKHNtYWxsT2Zm
c2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKHNtYWxsT2Zm
c2V0KSkKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgdHJ5QWRkcG9zdElu
ZGV4Q2FuZGlkYXRlcygpOworICAgICAgICAgICAgLy8gc28gZmFyIHRoaXMgQWRkIHZhbHVlIGlz
IGEgdmFsaWQgYWRkcmVzcyBjYW5kaWRhdGUgZm9yIGJvdGggcHJlZml4IGFuZCBwb3N0Zml4IHBh
dHRlcm4KKyAgICAgICAgICAgIGFkZFRvUGFyZW50cy5hZGQodmFsdWUsIFZlY3RvcjxWYWx1ZSo+
KCkpOworICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQs
IHN0YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7CisgICAgICAgICAgICBiYXNlT2Zm
c2V0VG9BZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRrZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQodmFsdWUpOworCisgICAgICAgICAgICAvLyBQb3N0LUluZGV4IExv
YWQgUGF0dGVybjoKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCisg
ICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBT
dG9yZSBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlMSwg
YmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBhZGRy
ZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIGlmICghYmFzZVRvTWVtb3JpZXMu
Y29udGFpbnMobGVmdCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmb3Ig
KE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpIHsKKyAgICAg
ICAgICAgICAgICBwb3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIFZlY3RvcjxWYWx1ZSo+
KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgIGJsb2Nr
VG9Qb3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnktPm93bmVyLCBWZWN0b3I8TWVtb3J5VmFs
dWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFs
dWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIGlmIChhZGRUb1BhcmVudHMuY29udGFpbnMo
Y2hpbGQpKQorICAgICAgICAgICAgICAgIGFkZFRvUGFyZW50cy5maW5kKGNoaWxkKS0+dmFsdWUu
YXBwZW5kKHZhbHVlKTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJhc2ljQmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICBmb3IgKGlu
ZGV4ID0gMDsgaW5kZXggPCBiYXNpY0Jsb2NrLT5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAg
ICB0cnlBZGRQcmVQb3N0SW5kZXhDYW5kaWRhdGUoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKKyAg
ICAgICAgICAgIHRyeUFkZENhbmRpZGF0ZXMoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKICAgICB9
CiAKICAgICBhdXRvIGNvbnRyb2xFcXVpdmFsZW50ID0gWyZdIChWYWx1ZSogdjEsIFZhbHVlKiB2
MikgLT4gYm9vbCB7CkBAIC0xNjEsNjggKzE1NCw4NSBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBv
c3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIHx8IChkb21pbmF0b3Jz
LmRvbWluYXRlcyh2Mi0+b3duZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5k
b21pbmF0ZXModjEtPm93bmVyLCB2Mi0+b3duZXIpKTsKICAgICB9OwogCi0gICAgLy8gVGhpcyBz
ZWFyY2ggaXMgZXhwZW5zaXZlLiBIb3dldmVyLCBkdWUgdG8gdGhlIGdyZWVkeSBwYXR0ZXJuCi0g
ICAgLy8gbWF0Y2hpbmcsIG5vIGJldHRlciBtZXRob2QgY2FuIGJlIHByb3Bvc2VkIGF0IHByZXNl
bnQuCi0gICAgYXV0byB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrID0gWyZdIChWYWx1ZSogdmFsdWUp
IC0+IHVuc2lnbmVkIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IHZhbHVlLT5vd25lcjsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGlu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKGJsb2NrLT5h
dChpbmRleCkgPT0gdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9OworICAgIC8vIENvbnZlcnQgUHJlLUlu
ZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgLy8gICAgIGFkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAor
ICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC4uLgorICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgIC8vICAgICBtZW1vcnkg
PSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFz
ZSwgb2Zmc2V0KQorICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4uLgorICAgIC8vICAgICBwYXJlbnQgPSBCM09wY29kZShhZGRyZXNzLCAu
Li4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5ld0FkZHJlc3MsIC4uLikKKyAg
ICAvLworICAgIC8vIENvbnZlcnQgUHJlLUluZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9u
aWNhbCBGb3JtOgorICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAg
ICAgICAgICAgICAgIGFkZHJlc3MgPSBOb3AKKyAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAvLyAgICAgLi4uICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2Us
IG9mZnNldCkKKyAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQp
ICAgLS0+ICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAvLyAg
ICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAg
ICAvLyAgICAgcGFyZW50ID0gQjNPcGNvZGUoYWRkcmVzcywgLi4uKSAgICAgICAgICAgICAgICBw
YXJlbnQgPSBCM09wY29kZShuZXdBZGRyZXNzLCAuLi4pCisgICAgZm9yIChhdXRvIHBhaXIgOiBi
bG9ja1RvUHJlSW5kZXhDYW5kaWRhdGVzKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJhc2ljQmxv
Y2sgPSBwYWlyLmtleTsKKyAgICAgICAgVmVjdG9yPE1lbW9yeVZhbHVlKj4gY2FuZGlkYXRlcyA9
IHBhaXIudmFsdWU7CisgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGNhbmRpZGF0
ZXMpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3MgOiBwcmVJbmRleENhbmRpZGF0
ZXMuZ2V0KG1lbW9yeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZFZhbHVlcy5jb250
YWlucyhtZW1vcnkpIHx8IGhhbmRsZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRy
b2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGlmICghYWRkVG9QYXJlbnRzLmNvbnRhaW5zKGFkZHJlc3Mp
IHx8ICFhZGRUb1BhcmVudHMuZmluZChhZGRyZXNzKS0+dmFsdWUuc2l6ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc2VydGlv
bkluZGV4ID0gbWVtb3J5VG9JbmRleC5nZXQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICBWYWx1
ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4
LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBhZGRyZXNzLT5jaGls
ZCgxKSk7CisgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGFsbCBhZGRyZXNzIHJlZmVyZW5jZXMg
d2l0aCB0aGUgbmV3QWRkcmVzcworICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIHBhcmVudCA6
IGFkZFRvUGFyZW50cy5nZXQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBhcmVudC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSBwYXJlbnQtPmNoaWxkKGkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkID09IGFkZHJlc3MpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50LT5jaGlsZChpKSA9IG5ld0FkZHJlc3M7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+cmVw
bGFjZVdpdGhOb3BJZ25vcmluZ1R5cGUoKTsKIAotICAgIGZvciAoYXV0byBwYWlyIDogcHJlSW5k
ZXhMb2FkQ2FuZGlkYXRlcykgewotICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5r
ZXk7Ci0gICAgICAgIFZhbHVlKiBhZGRyZXNzID0gcGFpci52YWx1ZTsKLSAgICAgICAgaWYgKGln
bm9yZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFk
ZHJlc3MpIHx8ICFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAtLT4gIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQotICAgICAg
ICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCi0gICAgICAgIC8vIG1l
bW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAgICAgICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1v
cnkpCi0gICAgICAgIHVuc2lnbmVkIGluc2VydGlvbkluZGV4ID0gdmFsdWVJbmRleEluQmFzaWNC
bG9jayhhZGRyZXNzKSArIDE7Ci0gICAgICAgIE1lbW9yeVZhbHVlKiBuZXdNZW1vcnkgPSBpbnNl
cnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPihpbnNlcnRpb25JbmRleCwgTG9hZCwgbWVtb3J5
LT50eXBlKCksIGFkZHJlc3MtPm9yaWdpbigpLCBtZW1vcnktPmxhc3RDaGlsZCgpKTsKLSAgICAg
ICAgbmV3TWVtb3J5LT5zZXRPZmZzZXQobWVtb3J5LT5vZmZzZXQoKSk7Ci0gICAgICAgIG1lbW9y
eS0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdNZW1vcnkpOwotICAgICAgICBpbnNlcnRpb25TZXQu
ZXhlY3V0ZShhZGRyZXNzLT5vd25lcik7Ci0KLSAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVt
b3J5KTsKLSAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICAg
ICAgaGFuZGxlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICBoYW5kbGVkVmFs
dWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBU
aGlzIHdpbGwgcmVzZXQgdmFsdWVzJyBpbmRleGVzIGlmIHRoZXJlIGFyZSBhbnkgaW5zZXJ0aW9u
cy4KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmFzaWNCbG9jayk7CiAgICAgfQogCi0g
ICAgYXV0byBkZXRlY3RQb3N0SW5kZXggPSBbJl0gKGNvbnN0IEhhc2hNYXA8TWVtb3J5VmFsdWUq
LCBWYWx1ZSo+JiBjYW5kaWRhdGVzKSB7Ci0gICAgICAgIGZvciAoYXV0byBwYWlyIDogY2FuZGlk
YXRlcykgewotICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAg
ICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwYWlyLnZhbHVlOwotICAgICAgICAgICAgaWYgKGln
bm9yZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFk
ZHJlc3MpIHx8ICFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9
IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sobWVtb3J5KTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdP
ZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgs
IG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKLSAgICAgICAg
ICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0
aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09m
ZnNldCk7Ci0gICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJl
c3MpOwotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7Ci0K
LSAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBpZ25v
cmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAvLyBDb252ZXJ0IFBvc3QtSW5kZXggTG9hZCBQ
YXR0ZXJuIHRvIHRoZSBDYW5vbmljYWwgRm9ybToKKyAgICAvLyAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgLy8gICAgIC4u
LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2Us
IG5ld09mZnNldCkKKyAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKSAgICAgICAgICAg
ICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0tPiAgIC4uLgorICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9m
ZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisgICAgLy8KKyAg
ICAvLyBDb252ZXJ0IFBvc3QtSW5kZXggU3RvcmUgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZv
cm06CisgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdP
ZmZzZXQgPSBDb25zdGFudAorICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCisgICAgLy8gICAgIG1l
bW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwg
YmFzZSwgMCkKKyAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAg
IC4uLgorICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRk
cmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisgICAgZm9yIChhdXRvIHBhaXIgOiBibG9ja1Rv
UG9zdEluZGV4Q2FuZGlkYXRlcykgeworICAgICAgICBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrID0g
cGFpci5rZXk7CisgICAgICAgIFZlY3RvcjxNZW1vcnlWYWx1ZSo+IGNhbmRpZGF0ZXMgPSBwYWly
LnZhbHVlOworICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBjYW5kaWRhdGVzKSB7
CisgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogcG9zdEluZGV4Q2FuZGlkYXRlcy5n
ZXQobWVtb3J5KSkgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGVkVmFsdWVzLmNvbnRhaW5z
KG1lbW9yeSkgfHwgaGFuZGxlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVx
dWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IG1lbW9yeVRvSW5k
ZXguZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld09mZnNldCA9IGluc2Vy
dGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbnNlcnRpb25JbmRleCwgbWVtb3J5LT5vcmln
aW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOworICAgICAgICAgICAgICAgIFZhbHVl
KiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgs
IEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7Cisg
ICAgICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsK
KworICAgICAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgICAg
ICAgICAgaGFuZGxlZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICB9OworICAgICAgICAvLyBUaGlzIHdpbGwgcmVzZXQgdmFsdWVzJyBpbmRleGVzIGlm
IHRoZXJlIGFyZSBhbnkgaW5zZXJ0aW9ucy4KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmFzaWNCbG9jayk7CisgICAgfQogCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50Ci0gICAgLy8gLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQotICAg
IC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJh
c2UsIDApCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgot
ICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0gSWRl
bnRpdHkobmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4TG9hZENhbmRp
ZGF0ZXMpOwotCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d09mZnNldCA9IENvbnN0YW50Ci0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQotICAgIC8vIG1lbW9yeSA9
IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwg
MCkKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAgLi4uCi0gICAg
Ly8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0
eShuZXdBZGRyZXNzKQotICAgIGRldGVjdFBvc3RJbmRleChwb3N0SW5kZXhTdG9yZUNhbmRpZGF0
ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5jcHAKaW5kZXggYjkzY2U4MTliMWUzZmExNDA5ZDBiN2M3M2IwMWM4YmZiOTExNjNlNS4u
NjYyZjMyMzgwNWNjZjczNjc4ZGRlNmYxMzkzN2RjZWVkMzdlNDA5NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgZ2VuZXJh
dGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSkKICAgICBsb3dlck1hY3Jvc0FmdGVyT3B0aW1p
emF0aW9ucyhwcm9jZWR1cmUpOwogICAgIGxlZ2FsaXplTWVtb3J5T2Zmc2V0cyhwcm9jZWR1cmUp
OwogICAgIG1vdmVDb25zdGFudHMocHJvY2VkdXJlKTsKLSAgICBpZiAoT3B0aW9uczo6dXNlQjND
YW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cygpICYmIHByb2NlZHVyZS5vcHRMZXZlbCgpID49
IDIpCisgICAgaWYgKHByb2NlZHVyZS5vcHRMZXZlbCgpID49IDIpCiAgICAgICAgIGNhbm9uaWNh
bGl6ZVByZVBvc3RJbmNyZW1lbnRzKHByb2NlZHVyZSk7CiAgICAgZWxpbWluYXRlRGVhZENvZGUo
cHJvY2VkdXJlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGUxNzFhY2Y1NWUz
NjcwZjg5MWYxNWJhOGYyMGM2Y2RjMWMxODY5MmYuLjlkNzJmMjQxMDYwNzE2OGQ2MDQ3YzlhNTc5
NzgzMzIzY2ZmY2UxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNjQsNiAr
MTE2NCw3IEBAIHZvaWQgYWRkQ29weVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVm
UHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+Jik7CiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBm
aWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3ROYW1lKTsKIAogdm9pZCB0ZXN0TG9hZFByZUluZGV4MzIo
KTsKK3ZvaWQgdGVzdExvYWRXaXRoU3RvcmVQcmVJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUHJl
SW5kZXg2NCgpOwogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUG9z
dEluZGV4NjQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNf
My5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDA4MTdm
NjE5N2JjNTg2OTZmOTQ5NzJlOGQ2MDQ5ZmYyMWQyMDI3MDguLjNmODU3OTgyODUyZmE1YmRkMTdi
NzY1MDliYmQwMGEyMDllNjAyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjNfMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNw
cApAQCAtMTAyLDYgKzEwMiw4MyBAQCB2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpCiAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikp
LCB0ZXN0KCkpOwogfQogCit2b2lkIHRlc3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgzMigpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAg
fTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29w
VGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisg
ICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJpYWJsZSog
cCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKQor
ICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEg
PSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDApOworICAg
IHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwg
ciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBM
b29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyBy
MiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0g
bG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4o
KSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
Pihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVz
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BU
ZXN0LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBs
b29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNv
bmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisK
KyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAz
ID0gcDIgKyAxCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAgIC8vIHAzJyA9ICZwMworICAg
IC8vIHN0b3JlKDUsIHAzJykKKyAgICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNp
bG9uKHIzLCBecjIpCisgICAgLy8gZ290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHkt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBl
bmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsK
KyAgICBWYWx1ZSogcDNQcmltZSA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE9w
YXF1ZSwgT3JpZ2luKCksIHAzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
Pihwcm9jLCBTdG9yZSwgT3JpZ2luKCksIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgNSksIHAzUHJpbWUpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKSk7Cisg
ICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmln
aW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
SnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1
cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRl
KHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBp
bnQzMl90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKSB7CisgICAgICAgICAgICAqKytw
dHIgPSA1OworICAgICAgICAgICAgciArPSAqcHRyOworICAgICAgICB9CisgICAgICAgIHJldHVy
biByOworICAgIH07CisKKyAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7Cit9CisKIHZvaWQgdGVzdExvYWRQcmVJ
bmRleDY0KCkKIHsKICAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBA
IC0zNDQsNiArNDIxLDcgQEAgdm9pZCB0ZXN0U3RvcmVQcmVJbmRleDMyKCkKICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVj
a1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM0XSEiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGlu
dm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAg
ICAgcHRyID0gYml0d2lzZV9jYXN0PGludDMyX3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNb
Ml0sICpwdHIpOwpAQCAtMzY4LDYgKzQ0Niw5IEBAIHZvaWQgdGVzdFN0b3JlUHJlSW5kZXg2NCgp
CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHByZUluY3JlbWVudCk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAg
ICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM4
XSEiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0PGludDY0
X3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNbMl0sICpwdHIpOwpAQCAtMzk2LDYgKzQ3Nyw3
IEBAIHZvaWQgdGVzdFN0b3JlUG9zdEluZGV4MzIoKQogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCAiXSwgIzQiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJf
dD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0
d2lzZV9jYXN0PGludDMyX3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNbMV0sIDQpOwpAQCAt
NDIzLDYgKzUwNSw3IEBAIHZvaWQgdGVzdFN0b3JlUG9zdEluZGV4NjQoKQogICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGlu
dm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAg
ICAgcHRyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNb
MV0sIDQpOwpAQCAtNDA5NywxNyArNDE4MCwxNSBAQCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNo
YXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAg
ICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hy
QXJnSW1tMzIoMHhmZmZmZmZmZiwgNjMpKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VCM0Nhbm9u
aWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKCkpIHsKLSAgICAgICAgUlVOKHRlc3RMb2FkUHJlSW5k
ZXgzMigpKTsKLSAgICAgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKLSAgICAgICAgUlVO
KHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0
KCkpOworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJl
SW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVz
dExvYWRQb3N0SW5kZXg2NCgpKTsKIAotICAgICAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXgzMigp
KTsKLSAgICAgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4NjQoKSk7Ci0gICAgICAgIFJVTih0ZXN0
U3RvcmVQb3N0SW5kZXgzMigpKTsKLSAgICAgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDY0KCkp
OwotICAgIH0KKyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0
b3JlUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4MzIoKSk7CisgICAg
UlVOKHRlc3RTdG9yZVBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IDE3
MjFlMTY1YjFmZmViYjRjNjYyMjRiNDhlNTEzZDVjODZmMWUzYjAuLjE5YzU4MjdjMzNkMDI4MzZk
ZjA2NTE1NGRkMDJhY2IwOWU5NWNlYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaApAQCAtNDM3LDcgKzQzNyw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1i
bHlGYXN0TWVtb3J5KCk7CiAgICAgdihVbnNpZ25lZCwgbWF4QjNUYWlsRHVwQmxvY2tTaXplLCAz
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhCM1RhaWxEdXBCbG9ja1N1
Y2Nlc3NvcnMsIDMsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlQjNIb2lzdExv
b3BJbnZhcmlhbnRWYWx1ZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KEJvb2ws
IHVzZUIzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCiAgICAgdihCb29sLCB1c2VEb2xsYXJWTSwgZmFsc2UsIFJlc3RyaWN0ZWQs
ICJpbnN0YWxscyB0aGUgJHZtIGRlYnVnZ2luZyB0b29sIGluIGdsb2JhbCBvYmplY3RzIikgXAog
ICAgIHYoT3B0aW9uU3RyaW5nLCBmdW5jdGlvbk92ZXJyaWRlcywgbnVsbHB0ciwgUmVzdHJpY3Rl
ZCwgImZpbGUgd2l0aCBkZWJ1Z2dpbmcgb3ZlcnJpZGVzIGZvciBmdW5jdGlvbiBib2RpZXMiKSBc
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436308</attachid>
            <date>2021-08-24 10:54:47 -0700</date>
            <delta_ts>2021-08-24 16:37:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210824125446.patch</filename>
            <type>text/plain</type>
            <size>29126</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iYTk5MGViZTIzZjZhMWMw
NTBkM2VjYzkxODljMTA1N2ZiZmFhZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMS0wOC0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhlIHN0b3JlIGlzIHNlbWFu
dGljYWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAg
dGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0aGlzIGNhc2UsIG1heWJl
IHdlIHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAgICBkZXRlY3QgdGhlIHZp
b2xhdGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMg
cHJvYmxlbSwgd2UgbW92ZXMgdGhlIGFkZHJlc3MgdmFsdWUgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeSB2YWx1ZSBpbnN0ZWFkIG9mCisgICAgICAgIG1vdmluZyBtZW1vcnkgdmFsdWUgdXB3YXJk
LgorCisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25p
Y2FsIEZvcm06CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFy
ZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIENvbnZlcnQgUHJlLUlu
ZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorCisgICAgICAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBO
b3AKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
bWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBwYXJlbnQgPSBC
M09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5l
d0FkZHJlc3MsIC4uLikKKworICAgICAgICBUbyBtb3ZlIHRoZSBhZGRyZXNzIHZhbHVlIGRvd253
YXJkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHVzZSByZWZlcmVuY2Ugb2YgYWRkcmVz
cyBiZXR3ZWVuCisgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzLgorCisgICAg
ICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNH
ZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
TG9hZFdpdGhTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6
CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNo
clRlc3RzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMDgtMjIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0M2Y4OTI3YTJlMS4uM2MzN2Vm
ZTc0Mzc2Y2FmODYyMmE2YjczZTUzYTYyYTMwOGQzODEwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTIsNjkgKzUyLDUwIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5kZXggeyAwIH07CiAgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBCbG9ja0luc2VydGlvblNldCBi
bG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMg
PSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKLSAgICBJbmRleFNldDxW
YWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
cmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+
IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOworICAgIEluZGV4U2V0PFZhbHVlKj4gaGFuZGxlZFZh
bHVlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IG1lbW9yeVRvSW5kZXg7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBhZGRUb1BhcmVudHM7CisgICAgSGFzaE1h
cDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9NZW1vcmllczsKICAgICBIYXNo
TWFwPFZhbHVlS2V5LCBWZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRkcmVzc2VzOworICAg
IEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWZWN0b3I8VmFsdWUqPj4gcHJlSW5kZXhDYW5kaWRhdGVz
OworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWZWN0b3I8VmFsdWUqPj4gcG9zdEluZGV4Q2Fu
ZGlkYXRlczsKKyAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBIYXNoU2V0PE1lbW9yeVZhbHVlKj4+
IGJsb2NrVG9QcmVQb3N0SW5kZXhDYW5kaWRhdGVzOwogCi0gICAgSGFzaE1hcDxWYWx1ZSosIFZl
Y3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9TdG9yZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1
ZSosIFZhbHVlKj4gcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzOwotCi0gICAgYXV0byB0cnlBZGRQ
cmVQb3N0SW5kZXhDYW5kaWRhdGUgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgeworICAgIGF1dG8gdHJ5
QWRkQ2FuZGlkYXRlcyA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAgIHN3aXRjaCAodmFs
dWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgLy8gUHJl
LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgbWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46
Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgICAgICAgICAg
Ly8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQotICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzID0gWyZdICgp
IHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAm
JiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKG1lbW9yeS0+b2Zmc2V0KCkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1
ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnks
IGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBi
YXNlVG9Mb2Fkcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQorICAgICAgICBjYXNlIExvYWQ6CiAgICAgICAgIGNhc2UgU3RvcmU6IHsK
LSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0
b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRl
cm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCi0g
ICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcyA9IFsm
XSAoKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlw
ZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxk
KDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgYmFzZVRvU3RvcmVzLmFkZChtZW1vcnktPmNoaWxkKDEp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlVcGRhdGVCYXNlVG9TdG9yZXMoKTsK
KyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCk7CisgICAgICAgICAgICBWYWx1ZSogdHlwZSA9IHZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkID8g
bWVtb3J5IDogbWVtb3J5LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmICh0eXBlLT50eXBlKCkg
IT0gSW50MzIgJiYgdHlwZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBQcmUtSW5kZXggTG9hZCBQYXR0ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBhZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAg
ICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4IFN0b3JlIFBhdHRlcm46CisgICAg
ICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAg
ICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUo
dmFsdWUxLCBiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNl
dGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+bGFzdENoaWxkKCksIG1lbW9yeS0+b2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VP
ZmZzZXRrZXkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBm
b3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0
a2V5KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGUgdmlvbGF0ZWQgYWRkcmVz
cyB2YWx1ZSBpZiBpdCBoYXMgYW55IHVzZSByZWZlcmVuY2VzIGJldHdlZW4gdGhlIGFkZHJlc3Mg
YW5kIG1lbW9yeSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFkZFRvUGFyZW50cy5j
b250YWlucyhhZGRyZXNzKSAmJiBhZGRUb1BhcmVudHMuZmluZChhZGRyZXNzKS0+dmFsdWUuc2l6
ZSgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICBwcmVJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgVmVjdG9yPFZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgYmxv
Y2tUb1ByZVBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeS0+b3duZXIsIEhhc2hTZXQ8TWVt
b3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKG1lbW9yeSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYmFzZVRvTWVtb3JpZXMu
YWRkKG1lbW9yeS0+bGFzdENoaWxkKCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAgIG1lbW9yeVRvSW5kZXguYWRkKG1l
bW9yeSwgaW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTIyLDM4
ICsxMDMsNDkgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUm
IHByb2MpCiAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKICAgICAg
ICAgICAgIFZhbHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKIAotICAgICAgICAgICAgYXV0
byB0cnlBZGRwb3N0SW5kZXhDYW5kaWRhdGVzID0gWyZdICgpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIXJpZ2h0LT5oYXNJbnRQdHIoKSB8fCB2YWx1ZS0+dHlwZSgpICE9IEludDY0KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
cmlnaHQtPmFzSW50UHRyKCk7Ci0gICAgICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21h
bGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKLSAgICAg
ICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRJbmNy
ZW1lbnRJbmRleEZvcm0oc21hbGxPZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgLy8gc28gZmFyIHRoaXMgQWRkIHZhbHVlIGlzIGEgdmFsaWQgYWRk
cmVzcyBjYW5kaWRhdGUgZm9yIGJvdGggcHJlZml4IGFuZCBwb3N0Zml4IHBhdHRlcm4KLSAgICAg
ICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobGVmdCwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oc21hbGxPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBiYXNlT2Zmc2V0
VG9BZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRrZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChiYXNlVG9Mb2Fkcy5j
b250YWlucyhsZWZ0KSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBt
ZW1vcnkgOiBiYXNlVG9Mb2Fkcy5nZXQobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBw
b3N0SW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmIChiYXNlVG9TdG9yZXMuY29udGFpbnMobGVmdCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvU3Rv
cmVzLmdldChsZWZ0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RJbmRleFN0b3JlQ2Fu
ZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGlmICghcmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBl
KCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpbnRwdHJf
dCBvZmZzZXQgPSByaWdodC0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRU
eXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7
CisgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRJ
bmNyZW1lbnRJbmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICB0cnlBZGRwb3N0SW5kZXhDYW5kaWRhdGVzKCk7CisgICAgICAgICAgICAv
LyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3Ig
Ym90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgorICAgICAgICAgICAgYWRkVG9QYXJlbnRz
LmFkZCh2YWx1ZSwgVmVjdG9yPFZhbHVlKj4oKSk7CisgICAgICAgICAgICBWYWx1ZUtleSBiYXNl
T2Zmc2V0a2V5ID0gVmFsdWVLZXkobGVmdCwgc21hbGxPZmZzZXQpOworICAgICAgICAgICAgYmFz
ZU9mZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKKworICAgICAgICAgICAgLy8gUG9zdC1JbmRl
eCBMb2FkIFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAw
KQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBB
ZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFBvc3QtSW5k
ZXggU3RvcmUgUGF0dGVybjoKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1
ZTEsIGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAvLyAgICAg
YWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBpZiAoIWJhc2VUb01lbW9y
aWVzLmNvbnRhaW5zKGxlZnQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Zm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTWVtb3JpZXMuZ2V0KGxlZnQpKSB7Cisg
ICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBWZWN0b3I8VmFs
dWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBi
bG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LT5vd25lciwgSGFzaFNldDxN
ZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQobWVtb3J5KTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgaWYgKGFkZFRvUGFyZW50cy5jb250
YWlucyhjaGlsZCkpCisgICAgICAgICAgICAgICAgYWRkVG9QYXJlbnRzLmZpbmQoY2hpbGQpLT52
YWx1ZS5hcHBlbmQodmFsdWUpOworICAgICAgICB9CiAgICAgfTsKIAogICAgIGZvciAoQmFzaWNC
bG9jayogYmFzaWNCbG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIGZv
ciAoaW5kZXggPSAwOyBpbmRleCA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpbmRleCkKLSAgICAg
ICAgICAgIHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZShiYXNpY0Jsb2NrLT5hdChpbmRleCkp
OworICAgICAgICAgICAgdHJ5QWRkQ2FuZGlkYXRlcyhiYXNpY0Jsb2NrLT5hdChpbmRleCkpOwog
ICAgIH0KIAogICAgIGF1dG8gY29udHJvbEVxdWl2YWxlbnQgPSBbJl0gKFZhbHVlKiB2MSwgVmFs
dWUqIHYyKSAtPiBib29sIHsKQEAgLTE2MSw2OCArMTUzLDc2IEBAIGJvb2wgY2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgfHwgKGRvbWlu
YXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNrd2FyZHNEb21pbmF0
b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOwogICAgIH07CiAKLSAgICAvLyBU
aGlzIHNlYXJjaCBpcyBleHBlbnNpdmUuIEhvd2V2ZXIsIGR1ZSB0byB0aGUgZ3JlZWR5IHBhdHRl
cm4KLSAgICAvLyBtYXRjaGluZywgbm8gYmV0dGVyIG1ldGhvZCBjYW4gYmUgcHJvcG9zZWQgYXQg
cHJlc2VudC4KLSAgICBhdXRvIHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sgPSBbJl0gKFZhbHVlKiB2
YWx1ZSkgLT4gdW5zaWduZWQgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOwotICAgICAgICBmb3IgKGluZGV4ID0g
MDsgaW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBpZiAoYmxv
Y2stPmF0KGluZGV4KSA9PSB2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Cisg
ICAgZm9yIChhdXRvIHBhaXIgOiBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlcykgeworICAg
ICAgICBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrID0gcGFpci5rZXk7CisgICAgICAgIGZvciAoTWVt
b3J5VmFsdWUqIG1lbW9yeSA6IHBhaXIudmFsdWUpIHsKKyAgICAgICAgICAgIC8vIENvbnZlcnQg
UHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgICAgICAg
ICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgICAgICAgICAgICBh
ZGRyZXNzID0gTm9wCisgICAgICAgICAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICAuLi4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0
KSAgICAgICAgICAgIC0tPiAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4KKyAgICAgICAgICAgIC8vICAgICBwYXJlbnQgPSBCM09wY29kZShhZGRyZXNzLCAuLi4p
ICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5ld0FkZHJlc3MsIC4uLikKKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBDb252ZXJ0IFByZS1JbmRleCBTdG9yZSBQYXR0ZXJu
IHRvIHRoZSBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBOb3AKKyAgICAgICAg
ICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC4uLgorICAgICAgICAgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAg
ICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICAu
Li4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAg
ICAgICAgLy8gICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAg
ICAgcGFyZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorICAgICAgICAgICAgZm9yIChW
YWx1ZSogYWRkcmVzcyA6IHByZUluZGV4Q2FuZGlkYXRlcy5nZXQobWVtb3J5KSkgeworICAgICAg
ICAgICAgICAgIGlmIChoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaGFuZGxlZFZh
bHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRy
ZXNzKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYg
KCFhZGRUb1BhcmVudHMuY29udGFpbnMoYWRkcmVzcykgfHwgIWFkZFRvUGFyZW50cy5maW5kKGFk
ZHJlc3MpLT52YWx1ZS5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSBtZW1vcnlUb0luZGV4Lmdl
dChtZW1vcnkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwg
YWRkcmVzcy0+Y2hpbGQoMCksIGFkZHJlc3MtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAv
LyB1cGRhdGUgYWxsIGFkZHJlc3MgcmVmZXJlbmNlcyB3aXRoIHRoZSBuZXdBZGRyZXNzCisgICAg
ICAgICAgICAgICAgZm9yIChWYWx1ZSogcGFyZW50IDogYWRkVG9QYXJlbnRzLmdldChhZGRyZXNz
KSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyZW50
LT5udW1DaGlsZHJlbigpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBj
aGlsZCA9IHBhcmVudC0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hp
bGQgPT0gYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmNoaWxk
KGkpID0gbmV3QWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aE5vcElnbm9yaW5nVHlwZSgp
OworCisgICAgICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25p
Y2FsIEZvcm06CisgICAgICAgICAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAgICAvLyAgICAgLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3
T2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAg
ICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgorICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3
QWRkcmVzcykKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDb252ZXJ0IFBvc3QtSW5k
ZXggU3RvcmUgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgICAgICAgICAvLyAg
ICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0
YW50CisgICAgICAgICAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQorICAgICAgICAgICAgLy8gICAg
IG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1
ZSwgYmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLS0+ICAgLi4uCisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQorICAgICAgICAg
ICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IHBvc3RJbmRleENhbmRpZGF0ZXMuZ2V0KG1lbW9yeSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8
IGhhbmRsZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1l
bW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSBtZW1vcnlUb0luZGV4LmdldChtZW1v
cnkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJl
c3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVz
cyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9y
eS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQpOworICAgICAgICAgICAg
ICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3QWRkcmVzcyk7CisKKyAgICAgICAg
ICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChtZW1vcnkpOworICAgICAgICAgICAgICAgIGhhbmRs
ZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBpbmRleDsKLSAgICB9OwotCi0gICAgZm9yIChhdXRvIHBhaXIgOiBwcmVJbmRleExv
YWRDYW5kaWRhdGVzKSB7Ci0gICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBwYWlyLmtleTsK
LSAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwYWlyLnZhbHVlOwotICAgICAgICBpZiAoaWdub3Jl
ZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVz
cykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAg
ICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgIC8v
IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KLSAgICAgICAgLy8gbWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5ld01lbW9yeSkK
LSAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5CYXNpY0Jsb2Nr
KGFkZHJlc3MpICsgMTsKLSAgICAgICAgTWVtb3J5VmFsdWUqIG5ld01lbW9yeSA9IGluc2VydGlv
blNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KGluc2VydGlvbkluZGV4LCBMb2FkLCBtZW1vcnktPnR5
cGUoKSwgYWRkcmVzcy0+b3JpZ2luKCksIG1lbW9yeS0+bGFzdENoaWxkKCkpOwotICAgICAgICBu
ZXdNZW1vcnktPnNldE9mZnNldChtZW1vcnktPm9mZnNldCgpKTsKLSAgICAgICAgbWVtb3J5LT5y
ZXBsYWNlV2l0aElkZW50aXR5KG5ld01lbW9yeSk7Ci0gICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGFkZHJlc3MtPm93bmVyKTsKLQotICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkp
OwotICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgLy8gVGhpcyB3
aWxsIHJlc2V0IHZhbHVlcycgaW5kZXhlcyBpZiB0aGVyZSBhcmUgYW55IGluc2VydGlvbnMuCisg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJhc2ljQmxvY2spOwogICAgIH0KIAotICAgIGF1
dG8gZGV0ZWN0UG9zdEluZGV4ID0gWyZdIChjb25zdCBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFs
dWUqPiYgY2FuZGlkYXRlcykgewotICAgICAgICBmb3IgKGF1dG8gcGFpciA6IGNhbmRpZGF0ZXMp
IHsKLSAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBwYWlyLmtleTsKLSAgICAgICAg
ICAgIFZhbHVlKiBhZGRyZXNzID0gcGFpci52YWx1ZTsKLSAgICAgICAgICAgIGlmIChpZ25vcmVk
VmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNz
KSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1
ZUluZGV4SW5CYXNpY0Jsb2NrKG1lbW9yeSk7Ci0gICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KGluc2VydGlvbkluZGV4LCBtZW1v
cnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnQoKSk7Ci0gICAgICAgICAgICBW
YWx1ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbklu
ZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQp
OwotICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsK
LSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKG1lbW9yeS0+b3duZXIpOwotCi0gICAg
ICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOwotICAgICAgICAgICAgaWdub3JlZFZh
bHVlcy5hZGQoYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50Ci0gICAgLy8g
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFz
ZSwgbmV3T2Zmc2V0KQotICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAgICAgICAg
ICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0tPiAgIC4uLgotICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgo
cG9zdEluZGV4TG9hZENhbmRpZGF0ZXMpOwotCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50Ci0gICAgLy8gLi4uICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0
KQotICAgIC8vIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZSwgYmFzZSwgMCkKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLS0+ICAgLi4uCi0gICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAg
IGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQotICAgIGRldGVjdFBvc3RJbmRleChwb3N0
SW5kZXhTdG9yZUNhbmRpZGF0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKaW5kZXggYjkzY2U4MTliMWUzZmExNDA5ZDBiN2M3
M2IwMWM4YmZiOTExNjNlNS4uNjYyZjMyMzgwNWNjZjczNjc4ZGRlNmYxMzkzN2RjZWVkMzdlNDA5
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcApAQCAtMTE4LDcgKzEx
OCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSkKICAgICBsb3dl
ck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucyhwcm9jZWR1cmUpOwogICAgIGxlZ2FsaXplTWVtb3J5
T2Zmc2V0cyhwcm9jZWR1cmUpOwogICAgIG1vdmVDb25zdGFudHMocHJvY2VkdXJlKTsKLSAgICBp
ZiAoT3B0aW9uczo6dXNlQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cygpICYmIHByb2Nl
ZHVyZS5vcHRMZXZlbCgpID49IDIpCisgICAgaWYgKHByb2NlZHVyZS5vcHRMZXZlbCgpID49IDIp
CiAgICAgICAgIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKHByb2NlZHVyZSk7CiAgICAg
ZWxpbWluYXRlRGVhZENvZGUocHJvY2VkdXJlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlS2V5LmgKaW5kZXggNDZmNDQwYzUyZmQ0ZTBjZTlkZjA5NjU5OGNkNWNjMDZmMzk5NTFhMS4u
Yjg0YzhhNGQzNjRiYTg4NzA4YjgwMTk0OGIzYzgxNTljMjk4NDdlMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZUtleS5oCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCi0gICAgVmFsdWVLZXkoVmFsdWUqIGNoaWxkLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBW
YWx1ZUtleShWYWx1ZSogY2hpbGQsIGludDMyX3Qgb2Zmc2V0KTsKIAogICAgIFZhbHVlS2V5KEtp
bmQsIFR5cGUsIFZhbHVlKiBjaGlsZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVLZXlJbmxpbmVzLmgKaW5kZXggZTE4NjYxOTQ5MjYyMTQwNjZmZTg5ZTVjNzFiMmQwNzc4
MDU0NzAxZi4uMjFmNGI3OTc4ODY4YjRlZWI4Y2YxMjkyZjY0Njk4ZTNjZWMxODA1YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKQEAgLTMzLDEyICsz
MywxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotaW5saW5lIFZhbHVl
S2V5OjpWYWx1ZUtleShWYWx1ZSogY2hpbGQsIGludDY0X3QgdmFsdWUpCitpbmxpbmUgVmFsdWVL
ZXk6OlZhbHVlS2V5KFZhbHVlKiBjaGlsZCwgaW50MzJfdCBvZmZzZXQpCiB7CiAgICAgbV9raW5k
ID0gT29wczsKICAgICBtX3R5cGUgPSBWb2lkOwogICAgIHUuaW5kaWNlc1swXSA9IGNoaWxkLT5p
bmRleCgpOwotICAgIHUudmFsdWUgPSB2YWx1ZTsKKyAgICB1LmluZGljZXNbMV0gPSBvZmZzZXQ7
CiB9CiAKIGlubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoS2luZCBraW5kLCBUeXBlIHR5cGUsIFZh
bHVlKiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCBlMTcxYWNmNTVlMzY3
MGY4OTFmMTViYThmMjBjNmNkYzFjMTg2OTJmLi45ZDcyZjI0MTA2MDcxNjhkNjA0N2M5YTU3OTc4
MzMyM2NmZmNlMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTY0LDYgKzEx
NjQsNyBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogYm9vbCBzaG91bGRSdW4oY29uc3QgY2hhciogZmls
dGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7CiAKIHZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCk7
Cit2b2lkIHRlc3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFByZUlu
ZGV4NjQoKTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFBvc3RJ
bmRleDY0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCAwODE3ZjYx
OTdiYzU4Njk2Zjk0OTcyZThkNjA0OWZmMjFkMjAyNzA4Li4zZjg1Nzk4Mjg1MmZhNWJkZDE3Yjc2
NTA5YmJkMDBhMjA5ZTYwMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAK
QEAgLTEwMiw2ICsxMDIsODMgQEAgdm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKQogICAgIENIRUNL
X0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwg
dGVzdCgpKTsKIH0KIAordm9pZCB0ZXN0TG9hZFdpdGhTdG9yZVByZUluZGV4MzIoKQoreworICAg
IGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07
CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRl
c3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
IFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFyaWFibGUqIHAg
PSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAg
ICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0g
cm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICBy
b290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIs
IHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIg
PSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxv
b3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCks
IHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVz
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9v
cFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25k
LCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9
IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBwMycgPSAmcDMKKyAgICAv
LyBzdG9yZSg1LCBwMycpCisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxv
bihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7Cisg
ICAgVmFsdWUqIHAzUHJpbWUgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBPcGFx
dWUsIE9yaWdpbigpLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
cHJvYywgU3RvcmUsIE9yaWdpbigpLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDUpLCBwM1ByaW1lKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykpOworICAg
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJu
IHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShw
cm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50
MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkgeworICAgICAgICAgICAgKisrcHRy
ID0gNTsKKyAgICAgICAgICAgIHIgKz0gKnB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCiB2b2lkIHRlc3RMb2FkUHJlSW5k
ZXg2NCgpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQpAQCAt
MzQ0LDYgKzQyMSw3IEBAIHZvaWQgdGVzdFN0b3JlUHJlSW5kZXgzMigpCiAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjNF0hIik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZv
a2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAg
IHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzJd
LCAqcHRyKTsKQEAgLTM2OCw2ICs0NDYsOSBAQCB2b2lkIHRlc3RTdG9yZVByZUluZGV4NjQoKQog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBw
cmVJbmNyZW1lbnQpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
aWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjOF0h
Iik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90
Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKQEAgLTM5Niw2ICs0NzcsNyBA
QCB2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDMyKCkKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgIl0sICM0Iik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0ciA9IGJpdHdp
c2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzFdLCA0KTsKQEAgLTQy
Myw2ICs1MDUsNyBAQCB2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDY0KCkKICAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZv
a2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAg
IHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzFd
LCA0KTsKQEAgLTQwOTcsMTcgKzQxODAsMTUgQEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFy
KiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAg
UlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAgIFJVTih0ZXN0WlNockFy
Z0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlQjNDYW5vbmlj
YWxpemVQcmVQb3N0SW5jcmVtZW50cygpKSB7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFByZUluZGV4
MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7Ci0gICAgICAgIFJVTih0
ZXN0TG9hZFBvc3RJbmRleDMyKCkpOwotICAgICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgp
KTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUlu
ZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RM
b2FkUG9zdEluZGV4NjQoKSk7CiAKLSAgICAgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4MzIoKSk7
Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDY0KCkpOwotICAgICAgICBSVU4odGVzdFN0
b3JlUG9zdEluZGV4MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpKTsK
LSAgICB9CisgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9y
ZVByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDMyKCkpOworICAgIFJV
Tih0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCAxNzIx
ZTE2NWIxZmZlYmI0YzY2MjI0YjQ4ZTUxM2Q1Yzg2ZjFlM2IwLi4xOWM1ODI3YzMzZDAyODM2ZGYw
NjUxNTRkZDAyYWNiMDllOTVjZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnNMaXN0LmgKQEAgLTQzNyw3ICs0MzcsNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5
RmFzdE1lbW9yeSgpOwogICAgIHYoVW5zaWduZWQsIG1heEIzVGFpbER1cEJsb2NrU2l6ZSwgMywg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4QjNUYWlsRHVwQmxvY2tTdWNj
ZXNzb3JzLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZUIzSG9pc3RMb29w
SW52YXJpYW50VmFsdWVzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihCb29sLCB1
c2VCM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgXAogICAgIHYoQm9vbCwgdXNlRG9sbGFyVk0sIGZhbHNlLCBSZXN0cmljdGVkLCAi
aW5zdGFsbHMgdGhlICR2bSBkZWJ1Z2dpbmcgdG9vbCBpbiBnbG9iYWwgb2JqZWN0cyIpIFwKICAg
ICB2KE9wdGlvblN0cmluZywgZnVuY3Rpb25PdmVycmlkZXMsIG51bGxwdHIsIFJlc3RyaWN0ZWQs
ICJmaWxlIHdpdGggZGVidWdnaW5nIG92ZXJyaWRlcyBmb3IgZnVuY3Rpb24gYm9kaWVzIikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436345</attachid>
            <date>2021-08-24 16:37:32 -0700</date>
            <delta_ts>2021-08-24 23:40:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210824183731.patch</filename>
            <type>text/plain</type>
            <size>28135</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iYTk5MGViZTIzZjZhMWMw
NTBkM2VjYzkxODljMTA1N2ZiZmFhZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMS0wOC0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhlIHN0b3JlIGlzIHNlbWFu
dGljYWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAg
dGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0aGlzIGNhc2UsIG1heWJl
IHdlIHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAgICBkZXRlY3QgdGhlIHZp
b2xhdGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMg
cHJvYmxlbSwgd2UgbW92ZXMgdGhlIGFkZHJlc3MgdmFsdWUgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeSB2YWx1ZSBpbnN0ZWFkIG9mCisgICAgICAgIG1vdmluZyBtZW1vcnkgdmFsdWUgdXB3YXJk
LgorCisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25p
Y2FsIEZvcm06CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFy
ZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIENvbnZlcnQgUHJlLUlu
ZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorCisgICAgICAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBO
b3AKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
bWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBwYXJlbnQgPSBC
M09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5l
d0FkZHJlc3MsIC4uLikKKworICAgICAgICBUbyBtb3ZlIHRoZSBhZGRyZXNzIHZhbHVlIGRvd253
YXJkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHVzZSByZWZlcmVuY2Ugb2YgYWRkcmVz
cyBiZXR3ZWVuCisgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzLgorCisgICAg
ICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNH
ZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
TG9hZFdpdGhTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6
CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNo
clRlc3RzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMDgtMjIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0M2Y4OTI3YTJlMS4uZjEwMWM2
YTdmMTIyMzZhYTdjMzVjMzk0ZmI3ODU4MGVjMzlkMDllMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTIsNjkgKzUyLDQ2IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5kZXggeyAwIH07CiAgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBCbG9ja0luc2VydGlvblNldCBi
bG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMg
PSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKLSAgICBJbmRleFNldDxW
YWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
cmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+
IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOworICAgIEluZGV4U2V0PFZhbHVlKj4gaGFuZGxlZFZh
bHVlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IG1lbW9yeVRvSW5kZXg7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBhZGRVc2VzOworICAgIEhhc2hNYXA8VmFs
dWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7CiAgICAgSGFzaE1hcDxW
YWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRUb0FkZHJlc3NlczsKLQotICAgIEhh
c2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvU3RvcmVzOwotICAgIEhh
c2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlczsKLQot
ICAgIGF1dG8gdHJ5QWRkUHJlUG9zdEluZGV4Q2FuZGlkYXRlID0gWyZdIChWYWx1ZSogdmFsdWUp
IHsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IHByZUluZGV4Q2Fu
ZGlkYXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IHBvc3RJ
bmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgSGFzaFNldDxNZW1vcnlW
YWx1ZSo+PiBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlczsKKworICAgIC8vIFN0cmVuZ3Ro
IFJlZHVjdGlvbiB3aWxsIGxlYXZlIHRoZSBJUiBpbiB0aGUgZm9ybSB3ZSdyZSBtYXRjaGluZyBu
b3cuIAorICAgIC8vIEl0J2xsIHRha2UgYW4gYWRkKHgsIGNvbnN0YW50KSB0aGF0J3MgYW4gYWRk
cmVzcyBhbmQgbW92ZSB0aGUgb2Zmc2V0IAorICAgIC8vIGludG8gdGhlIGxvYWQgaXRzZWxmLCBh
bmQgdGhhdCdzIHdoeSB3ZSBjYW4gbWF0Y2ggdGhpcyByZWR1bmRhbmN5LgorICAgIGF1dG8gdHJ5
QWRkQ2FuZGlkYXRlcyA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAgIHN3aXRjaCAodmFs
dWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgLy8gUHJl
LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgbWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46
Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgICAgICAgICAg
Ly8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQotICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzID0gWyZdICgp
IHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAm
JiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKG1lbW9yeS0+b2Zmc2V0KCkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1
ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnks
IGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBi
YXNlVG9Mb2Fkcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQorICAgICAgICBjYXNlIExvYWQ6CiAgICAgICAgIGNhc2UgU3RvcmU6IHsK
LSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0
b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRl
cm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCi0g
ICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcyA9IFsm
XSAoKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlw
ZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxk
KDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgYmFzZVRvU3RvcmVzLmFkZChtZW1vcnktPmNoaWxkKDEp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlVcGRhdGVCYXNlVG9TdG9yZXMoKTsK
KyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCk7CisgICAgICAgICAgICBWYWx1ZSogdHlwZSA9IHZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkID8g
bWVtb3J5IDogbWVtb3J5LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmICh0eXBlLT50eXBlKCkg
IT0gSW50MzIgJiYgdHlwZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBQcmUtSW5kZXggTG9hZC9TdG9yZSBQYXR0ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAgICAgLi4uCisg
ICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0S2V5ID0gVmFsdWVLZXkobWVtb3J5
LT5sYXN0Q2hpbGQoKSwgbWVtb3J5LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBp
dGVyID0gYmFzZU9mZnNldFRvQWRkcmVzc2VzLmZpbmQoYmFzZU9mZnNldEtleSk7CisgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gYmFzZU9mZnNldFRvQWRkcmVzc2VzLmVuZCgpKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNz
IDogaXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhDYW5kaWRhdGVz
LmFkZChtZW1vcnksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoYWRk
cmVzcyk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrVG9QcmVQb3N0SW5kZXhDYW5kaWRhdGVz
LmFkZChtZW1vcnktPm93bmVyLCBIYXNoU2V0PE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZh
bHVlLmFkZChtZW1vcnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGJhc2VUb01lbW9yaWVzLmFkZChtZW1vcnktPmxhc3RDaGlsZCgpLCBW
ZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7Cisg
ICAgICAgICAgICBtZW1vcnlUb0luZGV4LmFkZChtZW1vcnksIGluZGV4KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEyMiwzOCArOTksNDYgQEAgYm9vbCBjYW5vbmljYWxp
emVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICBWYWx1ZSog
bGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IHZhbHVl
LT5jaGlsZCgxKTsKIAotICAgICAgICAgICAgYXV0byB0cnlBZGRwb3N0SW5kZXhDYW5kaWRhdGVz
ID0gWyZdICgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJpZ2h0LT5oYXNJbnRQdHIoKSB8fCB2
YWx1ZS0+dHlwZSgpICE9IEludDY0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmlnaHQtPmFzSW50UHRyKCk7Ci0gICAgICAg
ICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1
ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQg
IT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZvcm0oc21hbGxPZmZzZXQp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgLy8gc28gZmFy
IHRoaXMgQWRkIHZhbHVlIGlzIGEgdmFsaWQgYWRkcmVzcyBjYW5kaWRhdGUgZm9yIGJvdGggcHJl
Zml4IGFuZCBwb3N0Zml4IHBhdHRlcm4KLSAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zm
c2V0a2V5ID0gVmFsdWVLZXkobGVmdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc21hbGxPZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRr
ZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodmFsdWUpOwotICAg
ICAgICAgICAgICAgIGlmIChiYXNlVG9Mb2Fkcy5jb250YWlucyhsZWZ0KSkgewotICAgICAgICAg
ICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9Mb2Fkcy5nZXQobGVm
dCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQo
bWVtb3J5LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChi
YXNlVG9TdG9yZXMuY29udGFpbnMobGVmdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChN
ZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvU3RvcmVzLmdldChsZWZ0KSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghcmln
aHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQdHIo
KTsKKyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nh
c3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICBpZiAoc21hbGxPZmZz
ZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZvcm0oc21hbGxPZmZz
ZXQpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICB0cnlBZGRwb3N0SW5k
ZXhDYW5kaWRhdGVzKCk7CisgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMg
YSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0
dGVybgorICAgICAgICAgICAgYWRkVXNlcy5hZGQodmFsdWUsIFZlY3RvcjxWYWx1ZSo+KCkpOwor
ICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldEtleSA9IFZhbHVlS2V5KGxlZnQsIHNtYWxs
T2Zmc2V0KTsKKyAgICAgICAgICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNl
dEtleSwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7CisK
KyAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggTG9hZC9TdG9yZSBQYXR0ZXJuOgorICAgICAgICAg
ICAgLy8gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2UsIDApCisgICAgICAgICAgICAvLyAg
ICAgLi4uCisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisg
ICAgICAgICAgICBhdXRvIGl0ZXIgPSBiYXNlVG9NZW1vcmllcy5maW5kKGxlZnQpOworICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gYmFzZVRvTWVtb3JpZXMuZW5kKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBpdGVyLT52YWx1
ZSkgeworICAgICAgICAgICAgICAgIHBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgVmVj
dG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgYmxvY2tUb1ByZVBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeS0+b3duZXIsIEhh
c2hTZXQ8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKG1lbW9yeSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUq
IGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IGFk
ZFVzZXMuZmluZChjaGlsZCk7CisgICAgICAgICAgICBpZiAoaXRlciAhPSBhZGRVc2VzLmVuZCgp
KQorICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIH0K
ICAgICB9OwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrIDogcHJvYy5ibG9ja3NJ
blByZU9yZGVyKCkpIHsKICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYmFzaWNCbG9j
ay0+c2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgdHJ5QWRkUHJlUG9zdEluZGV4Q2FuZGlk
YXRlKGJhc2ljQmxvY2stPmF0KGluZGV4KSk7CisgICAgICAgICAgICB0cnlBZGRDYW5kaWRhdGVz
KGJhc2ljQmxvY2stPmF0KGluZGV4KSk7CiAgICAgfQogCiAgICAgYXV0byBjb250cm9sRXF1aXZh
bGVudCA9IFsmXSAoVmFsdWUqIHYxLCBWYWx1ZSogdjIpIC0+IGJvb2wgewpAQCAtMTYxLDY4ICsx
NDYsNzMgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHBy
b2MpCiAgICAgICAgICAgICB8fCAoZG9taW5hdG9ycy5kb21pbmF0ZXModjItPm93bmVyLCB2MS0+
b3duZXIpICYmIGJhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKHYxLT5vd25lciwgdjItPm93
bmVyKSk7CiAgICAgfTsKIAotICAgIC8vIFRoaXMgc2VhcmNoIGlzIGV4cGVuc2l2ZS4gSG93ZXZl
ciwgZHVlIHRvIHRoZSBncmVlZHkgcGF0dGVybgotICAgIC8vIG1hdGNoaW5nLCBubyBiZXR0ZXIg
bWV0aG9kIGNhbiBiZSBwcm9wb3NlZCBhdCBwcmVzZW50LgotICAgIGF1dG8gdmFsdWVJbmRleElu
QmFzaWNCbG9jayA9IFsmXSAoVmFsdWUqIHZhbHVlKSAtPiB1bnNpZ25lZCB7Ci0gICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB2YWx1ZS0+b3du
ZXI7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgIGlmIChibG9jay0+YXQoaW5kZXgpID09IHZhbHVlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICBmb3IgKGF1dG8gcGFpciA6IGJsb2NrVG9QcmVQ
b3N0SW5kZXhDYW5kaWRhdGVzKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sgPSBw
YWlyLmtleTsKKyAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogcGFpci52YWx1ZSkg
eworICAgICAgICAgICAgLy8gQ29udmVydCBQcmUtSW5kZXggTG9hZC9TdG9yZSBQYXR0ZXJuIHRv
IHRoZSBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBOb3AKKyAgICAgICAgICAg
IC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4u
LgorICAgICAgICAgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAv
LyAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUoYmFzZSwgb2Zmc2V0KSAgICAgLS0+ICAgICBtZW1v
cnkgPSBNZW1vcnlWYWx1ZShiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAg
IC8vICAgICBwYXJlbnQgPSBCM09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBh
cmVudCA9IEIzT3Bjb2RlKG5ld0FkZHJlc3MsIC4uLikKKyAgICAgICAgICAgIGZvciAoVmFsdWUq
IGFkZHJlc3MgOiBwcmVJbmRleENhbmRpZGF0ZXMuZ2V0KG1lbW9yeSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaGFuZGxlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGhhbmRsZWRWYWx1ZXMu
Y29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byBk
b21pbmF0ZVVzZXMgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
aXRlciA9IGFkZFVzZXMuZmluZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gYWRkVXNlcy5lbmQoKSB8fCAhaXRlci0+dmFsdWUuc2l6ZSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVl
KiBwYXJlbnQgOiBpdGVyLT52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFk
b21pbmF0b3JzLmRvbWluYXRlcyhtZW1vcnktPm93bmVyLCBwYXJlbnQtPm93bmVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIGlmICghZG9taW5hdGVVc2VzKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXgg
PSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdB
ZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwg
bWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIGFkZHJlc3MtPmNoaWxkKDEpKTsK
KyAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYWxsIGFkZHJlc3MgcmVmZXJlbmNlcyB3aXRoIHRo
ZSBuZXdBZGRyZXNzCisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogcGFyZW50IDogYWRkVXNl
cy5nZXQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBhcmVudC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSomIGNoaWxkID0gcGFyZW50LT5jaGlsZChpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGlsZCA9PSBhZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkID0gbmV3QWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aE5vcElnbm9yaW5nVHlw
ZSgpOworCisgICAgICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAg
ICAgICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IExvYWQvU3RvcmUgUGF0dGVybiB0byB0
aGUgQ2Fub25pY2FsIEZvcm06CisgICAgICAgICAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAgICAvLyAg
ICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQo
YmFzZSwgbmV3T2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVl
KGJhc2UsIDApICAgICAgICBtZW1vcnkgPSBNZW1vcnlWYWx1ZShiYXNlLCAwKQorICAgICAgICAg
ICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KKyAgICAg
ICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVz
cyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNz
IDogcG9zdEluZGV4Q2FuZGlkYXRlcy5nZXQobWVtb3J5KSkgeworICAgICAgICAgICAgICAgIGlm
IChoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaGFuZGxlZFZhbHVlcy5jb250YWlu
cyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnNl
cnRpb25JbmRleCA9IG1lbW9yeVRvSW5kZXguZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICAgICAg
VmFsdWUqIG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbnNl
cnRpb25JbmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkp
OworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+
Y2hpbGQoMCksIG5ld09mZnNldCk7CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdp
dGhJZGVudGl0eShuZXdBZGRyZXNzKTsKKworICAgICAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMu
YWRkKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5hZGQoYWRkcmVzcyk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH07
Ci0KLSAgICBmb3IgKGF1dG8gcGFpciA6IHByZUluZGV4TG9hZENhbmRpZGF0ZXMpIHsKLSAgICAg
ICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAgICAgICBWYWx1ZSogYWRkcmVz
cyA9IHBhaXIudmFsdWU7Ci0gICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9y
eSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxl
bnQobWVtb3J5LCBhZGRyZXNzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCi0gICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1v
cnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4uLgotICAgICAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkg
ICAgICAgbWVtb3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQotICAgICAgICB1bnNpZ25lZCBpbnNl
cnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2soYWRkcmVzcykgKyAxOwotICAgICAg
ICBNZW1vcnlWYWx1ZSogbmV3TWVtb3J5ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1
ZT4oaW5zZXJ0aW9uSW5kZXgsIExvYWQsIG1lbW9yeS0+dHlwZSgpLCBhZGRyZXNzLT5vcmlnaW4o
KSwgbWVtb3J5LT5sYXN0Q2hpbGQoKSk7Ci0gICAgICAgIG5ld01lbW9yeS0+c2V0T2Zmc2V0KG1l
bW9yeS0+b2Zmc2V0KCkpOwotICAgICAgICBtZW1vcnktPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3
TWVtb3J5KTsKLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYWRkcmVzcy0+b3duZXIpOwot
Ci0gICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgIGlnbm9yZWRWYWx1
ZXMuYWRkKGFkZHJlc3MpOworICAgICAgICAvLyBUaGlzIHdpbGwgcmVzZXQgdmFsdWVzJyBpbmRl
eGVzIGlmIHRoZXJlIGFyZSBhbnkgaW5zZXJ0aW9ucy4KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmFzaWNCbG9jayk7CiAgICAgfQogCi0gICAgYXV0byBkZXRlY3RQb3N0SW5kZXggPSBb
Jl0gKGNvbnN0IEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+JiBjYW5kaWRhdGVzKSB7Ci0g
ICAgICAgIGZvciAoYXV0byBwYWlyIDogY2FuZGlkYXRlcykgewotICAgICAgICAgICAgTWVtb3J5
VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBw
YWlyLnZhbHVlOwotICAgICAgICAgICAgaWYgKGlnbm9yZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5
KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9sRXF1aXZhbGVu
dChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sobWVt
b3J5KTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3Mt
PmNoaWxkKDEpLT5hc0ludCgpKTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmln
aW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7Ci0gICAgICAgICAgICBhZGRyZXNz
LT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOwotICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7Ci0KLSAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMu
YWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCi0gICAgLy8g
bWVtb3J5ID0gTG9hZChiYXNlLCAwKSAgICAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwg
MCkKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAgLi4uCi0gICAg
Ly8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0
eShuZXdBZGRyZXNzKQotICAgIGRldGVjdFBvc3RJbmRleChwb3N0SW5kZXhMb2FkQ2FuZGlkYXRl
cyk7Ci0KLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T2Zm
c2V0ID0gQ29uc3RhbnQKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCi0gICAgLy8gbWVtb3J5ID0gU3Rv
cmUodmFsdWUsIGJhc2UsIDApICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQot
ICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KLSAgICAvLyBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5l
d0FkZHJlc3MpCi0gICAgZGV0ZWN0UG9zdEluZGV4KHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlcyk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmNwcAppbmRleCBiOTNjZTgxOWIxZTNmYTE0MDlkMGI3YzczYjAxYzhiZmI5MTE2M2U1Li42NjJm
MzIzODA1Y2NmNzM2NzhkZGU2ZjEzOTM3ZGNlZWQzN2U0MDk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJhdGUuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBnZW5lcmF0ZVRv
QWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgIGxvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRp
b25zKHByb2NlZHVyZSk7CiAgICAgbGVnYWxpemVNZW1vcnlPZmZzZXRzKHByb2NlZHVyZSk7CiAg
ICAgbW92ZUNvbnN0YW50cyhwcm9jZWR1cmUpOwotICAgIGlmIChPcHRpb25zOjp1c2VCM0Nhbm9u
aWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKCkgJiYgcHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikK
KyAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikKICAgICAgICAgY2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMocHJvY2VkdXJlKTsKICAgICBlbGltaW5hdGVEZWFkQ29kZShwcm9j
ZWR1cmUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtl
eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAppbmRleCA0NmY0NDBj
NTJmZDRlMGNlOWRmMDk2NTk4Y2Q1Y2MwNmYzOTk1MWExLi5iODRjOGE0ZDM2NGJhODg3MDhiODAx
OTQ4YjNjODE1OWMyOTg0N2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgK
QEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBWYWx1ZUtleShW
YWx1ZSogY2hpbGQsIGludDY0X3QgdmFsdWUpOworICAgIFZhbHVlS2V5KFZhbHVlKiBjaGlsZCwg
aW50MzJfdCBvZmZzZXQpOwogCiAgICAgVmFsdWVLZXkoS2luZCwgVHlwZSwgVmFsdWUqIGNoaWxk
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAppbmRl
eCBlMTg2NjE5NDkyNjIxNDA2NmZlODllNWM3MWIyZDA3NzgwNTQ3MDFmLi4yMWY0Yjc5Nzg4Njhi
NGVlYjhjZjEyOTJmNjQ2OThlM2NlYzE4MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZUtleUlubGluZXMuaApAQCAtMzMsMTIgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgewogCi1pbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KFZhbHVlKiBj
aGlsZCwgaW50NjRfdCB2YWx1ZSkKK2lubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoVmFsdWUqIGNo
aWxkLCBpbnQzMl90IG9mZnNldCkKIHsKICAgICBtX2tpbmQgPSBPb3BzOwogICAgIG1fdHlwZSA9
IFZvaWQ7CiAgICAgdS5pbmRpY2VzWzBdID0gY2hpbGQtPmluZGV4KCk7Ci0gICAgdS52YWx1ZSA9
IHZhbHVlOworICAgIHUuaW5kaWNlc1sxXSA9IG9mZnNldDsKIH0KIAogaW5saW5lIFZhbHVlS2V5
OjpWYWx1ZUtleShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgVmFsdWUqIGNoaWxkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5oCmluZGV4IGUxNzFhY2Y1NWUzNjcwZjg5MWYxNWJhOGYyMGM2Y2RjMWMx
ODY5MmYuLjlkNzJmMjQxMDYwNzE2OGQ2MDQ3YzlhNTc5NzgzMzIzY2ZmY2UxOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNjQsNiArMTE2NCw3IEBAIHZvaWQgYWRkQ29weVRl
c3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+
Jik7CiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHRlc3RO
YW1lKTsKIAogdm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRXaXRoU3Rv
cmVQcmVJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpOwogdm9pZCB0ZXN0TG9h
ZFBvc3RJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDA4MTdmNjE5N2JjNTg2OTZmOTQ5NzJlOGQ2MDQ5
ZmYyMWQyMDI3MDguLjNmODU3OTgyODUyZmE1YmRkMTdiNzY1MDliYmQwMGEyMDllNjAyOTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMTAyLDYgKzEwMiw4MyBAQCB2
b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpCiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpj
b2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOwogfQogCit2b2lkIHRl
c3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9
IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBu
dW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFk
ZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50
NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8g
cjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0gYWRkcgorICAgIC8v
IFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFu
dChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOwor
CisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBs
b29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIg
Pj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0g
bG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4o
KSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25l
KSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBzaWxv
bihwMywgXnAyKQorICAgIC8vIHAzJyA9ICZwMworICAgIC8vIHN0b3JlKDUsIHAzJykKKyAgICAv
LyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gZ290
byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcDNQcmltZSA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE9wYXF1ZSwgT3JpZ2luKCksIHAzKTsKKyAg
ICBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBTdG9yZSwgT3JpZ2luKCks
IGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNSksIHAz
UHJpbWUpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9j
LCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BC
b2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50
ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25l
X0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5y
ZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9j
KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworCisgICAgYXV0byB0ZXN0
ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOworICAgICAgICB3
aGlsZSAociA8IDEwKSB7CisgICAgICAgICAgICAqKytwdHIgPSA1OworICAgICAgICAgICAgciAr
PSAqcHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBDSEVD
S19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSks
IHRlc3QoKSk7Cit9CisKIHZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCkKIHsKICAgICBpZiAoT3B0
aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBAIC0zNDQsNiArNDIxLDcgQEAgdm9pZCB0
ZXN0U3RvcmVQcmVJbmRleDMyKCkKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
ICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
IiM0XSEiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0PGlu
dDMyX3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNbMl0sICpwdHIpOwpAQCAtMzY4LDYgKzQ0
Niw5IEBAIHZvaWQgdGVzdFN0b3JlUHJlSW5kZXg2NCgpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CiAKICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKwogICAgIGludHB0cl90IHJl
cyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwg
NCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPihyZXMpOwogICAgIENIRUNLX0VR
KG51bXNbMl0sICpwdHIpOwpAQCAtMzk2LDYgKzQ3Nyw3IEBAIHZvaWQgdGVzdFN0b3JlUG9zdElu
ZGV4MzIoKQogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FS
TTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzQiKTsKKwog
ICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0PGludDMyX3QqPihyZXMp
OwogICAgIENIRUNLX0VRKG51bXNbMV0sIDQpOwpAQCAtNDIzLDYgKzUwNSw3IEBAIHZvaWQgdGVz
dFN0b3JlUG9zdEluZGV4NjQoKQogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAi
XSwgIzgiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0PGlu
dDY0X3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNbMV0sIDQpOwpAQCAtNDA5NywxNyArNDE4
MCwxNSBAQCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRy
PFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigw
eGZmZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgNjMp
KTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VCM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
KCkpIHsKLSAgICAgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigpKTsKLSAgICAgICAgUlVOKHRl
c3RMb2FkUHJlSW5kZXg2NCgpKTsKLSAgICAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7
Ci0gICAgICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFBy
ZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVz
dExvYWRQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsKIAot
ICAgICAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXgzMigpKTsKLSAgICAgICAgUlVOKHRlc3RTdG9y
ZVByZUluZGV4NjQoKSk7Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKLSAg
ICAgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDY0KCkpOwotICAgIH0KKyAgICBSVU4odGVzdFN0
b3JlUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXg2NCgpKTsKKyAgICBS
VU4odGVzdFN0b3JlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDY0
KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IDE3MjFlMTY1YjFmZmViYjRjNjYyMjRiNDhl
NTEzZDVjODZmMWUzYjAuLjE5YzU4MjdjMzNkMDI4MzZkZjA2NTE1NGRkMDJhY2IwOWU5NWNlYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAtNDM3
LDcgKzQzNyw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihV
bnNpZ25lZCwgbWF4QjNUYWlsRHVwQmxvY2tTaXplLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KFVuc2lnbmVkLCBtYXhCM1RhaWxEdXBCbG9ja1N1Y2Nlc3NvcnMsIDMsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoQm9vbCwgdXNlQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KEJvb2wsIHVzZUIzQ2Fub25pY2FsaXplUHJlUG9z
dEluY3JlbWVudHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihCb29s
LCB1c2VEb2xsYXJWTSwgZmFsc2UsIFJlc3RyaWN0ZWQsICJpbnN0YWxscyB0aGUgJHZtIGRlYnVn
Z2luZyB0b29sIGluIGdsb2JhbCBvYmplY3RzIikgXAogICAgIHYoT3B0aW9uU3RyaW5nLCBmdW5j
dGlvbk92ZXJyaWRlcywgbnVsbHB0ciwgUmVzdHJpY3RlZCwgImZpbGUgd2l0aCBkZWJ1Z2dpbmcg
b3ZlcnJpZGVzIGZvciBmdW5jdGlvbiBib2RpZXMiKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436371</attachid>
            <date>2021-08-24 23:40:53 -0700</date>
            <delta_ts>2021-08-25 08:58:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210825014051.patch</filename>
            <type>text/plain</type>
            <size>28480</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iYTk5MGViZTIzZjZhMWMw
NTBkM2VjYzkxODljMTA1N2ZiZmFhZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMS0wOC0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhlIHN0b3JlIGlzIHNlbWFu
dGljYWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAg
dGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0aGlzIGNhc2UsIG1heWJl
IHdlIHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAgICBkZXRlY3QgdGhlIHZp
b2xhdGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMg
cHJvYmxlbSwgd2UgbW92ZXMgdGhlIGFkZHJlc3MgdmFsdWUgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeSB2YWx1ZSBpbnN0ZWFkIG9mCisgICAgICAgIG1vdmluZyBtZW1vcnkgdmFsdWUgdXB3YXJk
LgorCisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25p
Y2FsIEZvcm06CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFy
ZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIENvbnZlcnQgUHJlLUlu
ZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorCisgICAgICAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBO
b3AKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
bWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBwYXJlbnQgPSBC
M09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5l
d0FkZHJlc3MsIC4uLikKKworICAgICAgICBUbyBtb3ZlIHRoZSBhZGRyZXNzIHZhbHVlIGRvd253
YXJkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHVzZSByZWZlcmVuY2Ugb2YgYWRkcmVz
cyBiZXR3ZWVuCisgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzLgorCisgICAg
ICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNH
ZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
TG9hZFdpdGhTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6
CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNo
clRlc3RzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMDgtMjIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0M2Y4OTI3YTJlMS4uZWY5MjRk
NjhmYWZiMDVhMDNiODRjMTU2MGEwZjkxMWZiNDhjYjE0MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTIsNjkgKzUyLDUxIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5kZXggeyAwIH07CiAgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBCbG9ja0luc2VydGlvblNldCBi
bG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMg
PSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKLSAgICBJbmRleFNldDxW
YWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
cmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+
IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOworICAgIEluZGV4U2V0PFZhbHVlKj4gaGFuZGxlZFZh
bHVlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IG1lbW9yeVRvSW5kZXg7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBhZGRVc2VzOworICAgIEhhc2hNYXA8VmFs
dWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7CiAgICAgSGFzaE1hcDxW
YWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRUb0FkZHJlc3NlczsKLQotICAgIEhh
c2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvU3RvcmVzOwotICAgIEhh
c2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlczsKLQot
ICAgIGF1dG8gdHJ5QWRkUHJlUG9zdEluZGV4Q2FuZGlkYXRlID0gWyZdIChWYWx1ZSogdmFsdWUp
IHsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IHByZUluZGV4Q2Fu
ZGlkYXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IHBvc3RJ
bmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgSGFzaFNldDxNZW1vcnlW
YWx1ZSo+PiBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlczsKKworICAgIC8vIFN0cmVuZ3Ro
IFJlZHVjdGlvbiB3aWxsIGxlYXZlIHRoZSBJUiBpbiB0aGUgZm9ybSB3ZSdyZSBtYXRjaGluZyBu
b3cuIAorICAgIC8vIEl0J2xsIHRha2UgYW4gYWRkKHgsIGNvbnN0YW50KSB0aGF0J3MgYW4gYWRk
cmVzcyBhbmQgbW92ZSB0aGUgb2Zmc2V0IAorICAgIC8vIGludG8gdGhlIGxvYWQgaXRzZWxmLCBh
bmQgdGhhdCdzIHdoeSB3ZSBjYW4gbWF0Y2ggdGhpcyByZWR1bmRhbmN5LgorICAgIGF1dG8gdHJ5
QWRkQ2FuZGlkYXRlcyA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAgIHN3aXRjaCAodmFs
dWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgLy8gUHJl
LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgbWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46
Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgICAgICAgICAg
Ly8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQotICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzID0gWyZdICgp
IHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAm
JiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKG1lbW9yeS0+b2Zmc2V0KCkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1
ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnks
IGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBi
YXNlVG9Mb2Fkcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQorICAgICAgICBjYXNlIExvYWQ6CiAgICAgICAgIGNhc2UgU3RvcmU6IHsK
LSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0
b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRl
cm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCi0g
ICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcyA9IFsm
XSAoKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlw
ZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxk
KDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgYmFzZVRvU3RvcmVzLmFkZChtZW1vcnktPmNoaWxkKDEp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlVcGRhdGVCYXNlVG9TdG9yZXMoKTsK
KyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCk7CisgICAgICAgICAgICBWYWx1ZSogdHlwZSA9IHZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkID8g
bWVtb3J5IDogbWVtb3J5LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmICh0eXBlLT50eXBlKCkg
IT0gSW50MzIgJiYgdHlwZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBQcmUtSW5kZXggTG9hZC9TdG9yZSBQYXR0ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAgICAgLi4uCisg
ICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0S2V5ID0gVmFsdWVLZXkobWVtb3J5
LT5sYXN0Q2hpbGQoKSwgbWVtb3J5LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBp
dGVyID0gYmFzZU9mZnNldFRvQWRkcmVzc2VzLmZpbmQoYmFzZU9mZnNldEtleSk7CisgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gYmFzZU9mZnNldFRvQWRkcmVzc2VzLmVuZCgpKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNz
IDogaXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHZpb2xh
dGVkIGFkZHJlc3MgdmFsdWUgaWYgaXQgaGFzIGFueSB1c2UgcmVmZXJlbmNlcworICAgICAgICAg
ICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzIHdoZW4g
dGhleSBhcmUgaW4gdGhlIHNhbWUgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRV
c2VzSXRlciA9IGFkZFVzZXMuZmluZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFkZFVzZXNJdGVyICE9IGFkZFVzZXMuZW5kKCkgJiYgYWRkVXNlc0l0ZXItPnZhbHVlLnNpemUo
KSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJlSW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIFZlY3RvcjxWYWx1ZSo+KCkpLml0
ZXJhdG9yLT52YWx1ZS5hcHBlbmQoYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgIGJsb2Nr
VG9QcmVQb3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnktPm93bmVyLCBIYXNoU2V0PE1lbW9y
eVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChtZW1vcnkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJhc2VUb01lbW9yaWVzLmFk
ZChtZW1vcnktPmxhc3RDaGlsZCgpLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICBtZW1vcnlUb0luZGV4LmFkZChtZW1v
cnksIGluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEyMiwzOCAr
MTA0LDQ2IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBw
cm9jKQogICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAg
ICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CiAKLSAgICAgICAgICAgIGF1dG8g
dHJ5QWRkcG9zdEluZGV4Q2FuZGlkYXRlcyA9IFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFyaWdodC0+aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJp
Z2h0LT5hc0ludFB0cigpOwotICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxs
T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkSW5jcmVt
ZW50SW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIC8vIHNvIGZhciB0aGlzIEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJl
c3MgY2FuZGlkYXRlIGZvciBib3RoIHByZWZpeCBhbmQgcG9zdGZpeCBwYXR0ZXJuCi0gICAgICAg
ICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0YXRpY19j
YXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYmFzZU9mZnNldFRv
QWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZVRvTG9hZHMuY29u
dGFpbnMobGVmdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVt
b3J5IDogYmFzZVRvTG9hZHMuZ2V0KGxlZnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcG9z
dEluZGV4TG9hZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoYmFzZVRvU3RvcmVzLmNvbnRhaW5zKGxlZnQpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb1N0b3Jl
cy5nZXQobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhTdG9yZUNhbmRp
ZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH07CisgICAgICAgICAgICBpZiAoIXJpZ2h0LT5oYXNJbnRQdHIoKSB8fCB2YWx1ZS0+dHlwZSgp
ICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaW50cHRyX3Qg
b2Zmc2V0ID0gcmlnaHQtPmFzSW50UHRyKCk7CisgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlw
ZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwor
ICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkSW5j
cmVtZW50SW5kZXhGb3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgdHJ5QWRkcG9zdEluZGV4Q2FuZGlkYXRlcygpOworICAgICAgICAgICAgLy8g
c28gZmFyIHRoaXMgQWRkIHZhbHVlIGlzIGEgdmFsaWQgYWRkcmVzcyBjYW5kaWRhdGUgZm9yIGJv
dGggcHJlZml4IGFuZCBwb3N0Zml4IHBhdHRlcm4KKyAgICAgICAgICAgIGFkZFVzZXMuYWRkKHZh
bHVlLCBWZWN0b3I8VmFsdWUqPigpKTsKKyAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRL
ZXkgPSBWYWx1ZUtleShsZWZ0LCBzbWFsbE9mZnNldCk7CisgICAgICAgICAgICBiYXNlT2Zmc2V0
VG9BZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRLZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQodmFsdWUpOworCisgICAgICAgICAgICAvLyBQb3N0LUluZGV4IExvYWQv
U3RvcmUgUGF0dGVybjoKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBNZW1vcnlWYWx1ZShi
YXNlLCAwKQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIGFkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgYXV0byBpdGVyID0gYmFzZVRvTWVt
b3JpZXMuZmluZChsZWZ0KTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IGJhc2VUb01lbW9yaWVz
LmVuZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm9yIChNZW1vcnlW
YWx1ZSogbWVtb3J5IDogaXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICBwb3N0SW5kZXhD
YW5kaWRhdGVzLmFkZChtZW1vcnksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgIGJsb2NrVG9QcmVQb3N0SW5kZXhDYW5kaWRh
dGVzLmFkZChtZW1vcnktPm93bmVyLCBIYXNoU2V0PE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3It
PnZhbHVlLmFkZChtZW1vcnkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KKworICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7Cisg
ICAgICAgICAgICBhdXRvIGl0ZXIgPSBhZGRVc2VzLmZpbmQoY2hpbGQpOworICAgICAgICAgICAg
aWYgKGl0ZXIgIT0gYWRkVXNlcy5lbmQoKSkKKyAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZS5h
cHBlbmQodmFsdWUpOworICAgICAgICB9CiAgICAgfTsKIAogICAgIGZvciAoQmFzaWNCbG9jayog
YmFzaWNCbG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIGZvciAoaW5k
ZXggPSAwOyBpbmRleCA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgICAg
IHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZShiYXNpY0Jsb2NrLT5hdChpbmRleCkpOworICAg
ICAgICAgICAgdHJ5QWRkQ2FuZGlkYXRlcyhiYXNpY0Jsb2NrLT5hdChpbmRleCkpOwogICAgIH0K
IAogICAgIGF1dG8gY29udHJvbEVxdWl2YWxlbnQgPSBbJl0gKFZhbHVlKiB2MSwgVmFsdWUqIHYy
KSAtPiBib29sIHsKQEAgLTE2MSw2OCArMTUxLDcyIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9z
dEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgfHwgKGRvbWluYXRvcnMu
ZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNrd2FyZHNEb21pbmF0b3JzLmRv
bWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOwogICAgIH07CiAKLSAgICAvLyBUaGlzIHNl
YXJjaCBpcyBleHBlbnNpdmUuIEhvd2V2ZXIsIGR1ZSB0byB0aGUgZ3JlZWR5IHBhdHRlcm4KLSAg
ICAvLyBtYXRjaGluZywgbm8gYmV0dGVyIG1ldGhvZCBjYW4gYmUgcHJvcG9zZWQgYXQgcHJlc2Vu
dC4KLSAgICBhdXRvIHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sgPSBbJl0gKFZhbHVlKiB2YWx1ZSkg
LT4gdW5zaWduZWQgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOwotICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBpZiAoYmxvY2stPmF0
KGluZGV4KSA9PSB2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgZm9y
IChhdXRvIHBhaXIgOiBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlcykgeworICAgICAgICBC
YXNpY0Jsb2NrKiBiYXNpY0Jsb2NrID0gcGFpci5rZXk7CisgICAgICAgIGZvciAoTWVtb3J5VmFs
dWUqIG1lbW9yeSA6IHBhaXIudmFsdWUpIHsKKyAgICAgICAgICAgIC8vIENvbnZlcnQgUHJlLUlu
ZGV4IExvYWQvU3RvcmUgUGF0dGVybiB0byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgICAgICAg
ICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgICAgICAgICAgICBh
ZGRyZXNzID0gTm9wCisgICAgICAgICAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICAuLi4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2Us
IG9mZnNldCkgICAgIC0tPiAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUoYmFzZSwgb2Zmc2V0KQor
ICAgICAgICAgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLi4uCisgICAgICAgICAgICAvLyAgICAgcGFyZW50ID0gQjNPcGNvZGUoYWRkcmVz
cywgLi4uKSAgICAgICAgICAgICAgICBwYXJlbnQgPSBCM09wY29kZShuZXdBZGRyZXNzLCAuLi4p
CisgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogcHJlSW5kZXhDYW5kaWRhdGVzLmdl
dChtZW1vcnkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZWRWYWx1ZXMuY29udGFpbnMo
bWVtb3J5KSB8fCBoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9sRXF1
aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgICAgIGF1dG8gZG9taW5hdGVzQWxsQWRkVXNlcyA9IFsmXSAoKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gYWRkVXNlcy5maW5kKGFkZHJl
c3MpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBhZGRVc2VzLmVuZCgpICYm
IGl0ZXItPnZhbHVlLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIHBh
cmVudCA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbWlu
YXRvcnMuZG9taW5hdGVzKG1lbW9yeS0+b3duZXIsIHBhcmVudC0+b3duZXIpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXNBbGxBZGRVc2VzKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5k
ZXggPSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBu
ZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFk
ZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIGFkZHJlc3MtPmNoaWxkKDEp
KTsKKyAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYWxsIGFkZHJlc3MgcmVmZXJlbmNlcyB3aXRo
IHRoZSBuZXdBZGRyZXNzCisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogcGFyZW50IDogYWRk
VXNlcy5nZXQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHBhcmVudC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWYWx1ZSomIGNoaWxkID0gcGFyZW50LT5jaGlsZChpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjaGlsZCA9PSBhZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkID0gbmV3QWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aE5vcElnbm9yaW5n
VHlwZSgpOworCisgICAgICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAg
ICAgICAgICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQ29udmVydCBQb3N0LUluZGV4IExvYWQvU3RvcmUgUGF0dGVybiB0
byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgICAgICAgICAvLyAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAgICAv
LyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBB
ZGQoYmFzZSwgbmV3T2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IE1lbW9yeVZh
bHVlKGJhc2UsIDApICAgICAgICBtZW1vcnkgPSBNZW1vcnlWYWx1ZShiYXNlLCAwKQorICAgICAg
ICAgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KKyAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRk
cmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRy
ZXNzIDogcG9zdEluZGV4Q2FuZGlkYXRlcy5nZXQobWVtb3J5KSkgeworICAgICAgICAgICAgICAg
IGlmIChoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaGFuZGxlZFZhbHVlcy5jb250
YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnNlcnRpb25JbmRleCA9IG1lbW9yeVRvSW5kZXguZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICAg
ICAgVmFsdWUqIG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihp
bnNlcnRpb25JbmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50
KCkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVz
cy0+Y2hpbGQoMCksIG5ld09mZnNldCk7CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFj
ZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsKKworICAgICAgICAgICAgICAgIGhhbmRsZWRWYWx1
ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5hZGQoYWRkcmVz
cyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAg
IH07Ci0KLSAgICBmb3IgKGF1dG8gcGFpciA6IHByZUluZGV4TG9hZENhbmRpZGF0ZXMpIHsKLSAg
ICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAgICAgICBWYWx1ZSogYWRk
cmVzcyA9IHBhaXIudmFsdWU7Ci0gICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1l
bW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2
YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAv
LyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCi0gICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdN
ZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC4uLgotICAgICAgICAvLyBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNl
dCkgICAgICAgbWVtb3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQotICAgICAgICB1bnNpZ25lZCBp
bnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2soYWRkcmVzcykgKyAxOwotICAg
ICAgICBNZW1vcnlWYWx1ZSogbmV3TWVtb3J5ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlW
YWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIExvYWQsIG1lbW9yeS0+dHlwZSgpLCBhZGRyZXNzLT5vcmln
aW4oKSwgbWVtb3J5LT5sYXN0Q2hpbGQoKSk7Ci0gICAgICAgIG5ld01lbW9yeS0+c2V0T2Zmc2V0
KG1lbW9yeS0+b2Zmc2V0KCkpOwotICAgICAgICBtZW1vcnktPnJlcGxhY2VXaXRoSWRlbnRpdHko
bmV3TWVtb3J5KTsKLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYWRkcmVzcy0+b3duZXIp
OwotCi0gICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgIGlnbm9yZWRW
YWx1ZXMuYWRkKGFkZHJlc3MpOworICAgICAgICAvLyBUaGlzIHdpbGwgcmVzZXQgdmFsdWVzJyBp
bmRleGVzIGlmIHRoZXJlIGFyZSBhbnkgaW5zZXJ0aW9ucy4KKyAgICAgICAgaW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoYmFzaWNCbG9jayk7CiAgICAgfQogCi0gICAgYXV0byBkZXRlY3RQb3N0SW5kZXgg
PSBbJl0gKGNvbnN0IEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+JiBjYW5kaWRhdGVzKSB7
Ci0gICAgICAgIGZvciAoYXV0byBwYWlyIDogY2FuZGlkYXRlcykgewotICAgICAgICAgICAgTWVt
b3J5VmFsdWUqIG1lbW9yeSA9IHBhaXIua2V5OwotICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3Mg
PSBwYWlyLnZhbHVlOwotICAgICAgICAgICAgaWYgKGlnbm9yZWRWYWx1ZXMuY29udGFpbnMobWVt
b3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9sRXF1aXZh
bGVudChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2so
bWVtb3J5KTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJl
c3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0g
aW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5v
cmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7Ci0gICAgICAgICAgICBhZGRy
ZXNzLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOwotICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7Ci0KLSAgICAgICAgICAgIGlnbm9yZWRWYWx1
ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCi0gICAg
Ly8gbWVtb3J5ID0gTG9hZChiYXNlLCAwKSAgICAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFz
ZSwgMCkKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAgLi4uCi0g
ICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVu
dGl0eShuZXdBZGRyZXNzKQotICAgIGRldGVjdFBvc3RJbmRleChwb3N0SW5kZXhMb2FkQ2FuZGlk
YXRlcyk7Ci0KLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3
T2Zmc2V0ID0gQ29uc3RhbnQKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCi0gICAgLy8gbWVtb3J5ID0g
U3RvcmUodmFsdWUsIGJhc2UsIDApICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAw
KQotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KLSAgICAv
LyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5
KG5ld0FkZHJlc3MpCi0gICAgZGV0ZWN0UG9zdEluZGV4KHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRl
cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
YXRlLmNwcAppbmRleCBiOTNjZTgxOWIxZTNmYTE0MDlkMGI3YzczYjAxYzhiZmI5MTE2M2U1Li42
NjJmMzIzODA1Y2NmNzM2NzhkZGU2ZjEzOTM3ZGNlZWQzN2U0MDk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBnZW5lcmF0
ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgIGxvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6
YXRpb25zKHByb2NlZHVyZSk7CiAgICAgbGVnYWxpemVNZW1vcnlPZmZzZXRzKHByb2NlZHVyZSk7
CiAgICAgbW92ZUNvbnN0YW50cyhwcm9jZWR1cmUpOwotICAgIGlmIChPcHRpb25zOjp1c2VCM0Nh
bm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKCkgJiYgcHJvY2VkdXJlLm9wdExldmVsKCkgPj0g
MikKKyAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikKICAgICAgICAgY2Fub25pY2Fs
aXplUHJlUG9zdEluY3JlbWVudHMocHJvY2VkdXJlKTsKICAgICBlbGltaW5hdGVEZWFkQ29kZShw
cm9jZWR1cmUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZUtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAppbmRleCA0NmY0
NDBjNTJmZDRlMGNlOWRmMDk2NTk4Y2Q1Y2MwNmYzOTk1MWExLi5iODRjOGE0ZDM2NGJhODg3MDhi
ODAxOTQ4YjNjODE1OWMyOTg0N2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5
LmgKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBWYWx1ZUtl
eShWYWx1ZSogY2hpbGQsIGludDY0X3QgdmFsdWUpOworICAgIFZhbHVlS2V5KFZhbHVlKiBjaGls
ZCwgaW50MzJfdCBvZmZzZXQpOwogCiAgICAgVmFsdWVLZXkoS2luZCwgVHlwZSwgVmFsdWUqIGNo
aWxkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaApp
bmRleCBlMTg2NjE5NDkyNjIxNDA2NmZlODllNWM3MWIyZDA3NzgwNTQ3MDFmLi4yMWY0Yjc5Nzg4
NjhiNGVlYjhjZjEyOTJmNjQ2OThlM2NlYzE4MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaApAQCAtMzMsMTIgKzMzLDEyIEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1pbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KFZhbHVl
KiBjaGlsZCwgaW50NjRfdCB2YWx1ZSkKK2lubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoVmFsdWUq
IGNoaWxkLCBpbnQzMl90IG9mZnNldCkKIHsKICAgICBtX2tpbmQgPSBPb3BzOwogICAgIG1fdHlw
ZSA9IFZvaWQ7CiAgICAgdS5pbmRpY2VzWzBdID0gY2hpbGQtPmluZGV4KCk7Ci0gICAgdS52YWx1
ZSA9IHZhbHVlOworICAgIHUuaW5kaWNlc1sxXSA9IG9mZnNldDsKIH0KIAogaW5saW5lIFZhbHVl
S2V5OjpWYWx1ZUtleShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgVmFsdWUqIGNoaWxkKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGUxNzFhY2Y1NWUzNjcwZjg5MWYxNWJhOGYyMGM2Y2Rj
MWMxODY5MmYuLjlkNzJmMjQxMDYwNzE2OGQ2MDQ3YzlhNTc5NzgzMzIzY2ZmY2UxOWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNjQsNiArMTE2NCw3IEBAIHZvaWQgYWRkQ29w
eVRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgp
Pj4+Jik7CiBib29sIHNob3VsZFJ1bihjb25zdCBjaGFyKiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHRl
c3ROYW1lKTsKIAogdm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKTsKK3ZvaWQgdGVzdExvYWRXaXRo
U3RvcmVQcmVJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpOwogdm9pZCB0ZXN0
TG9hZFBvc3RJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDA4MTdmNjE5N2JjNTg2OTZmOTQ5NzJlOGQ2
MDQ5ZmYyMWQyMDI3MDguLjNmODU3OTgyODUyZmE1YmRkMTdiNzY1MDliYmQwMGEyMDllNjAyOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMTAyLDYgKzEwMiw4MyBA
QCB2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpCiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+
KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOwogfQogCit2b2lk
IHRlc3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNb
XSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIg
PSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9j
LmFkZFZhcmlhYmxlKEludDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUo
SW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAg
Ly8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0gYWRkcgorICAg
IC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25z
dGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBw
MSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkp
OworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAv
LyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYg
cjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAy
ID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmln
aW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhk
b25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBz
aWxvbihwMywgXnAyKQorICAgIC8vIHAzJyA9ICZwMworICAgIC8vIHN0b3JlKDUsIHAzJykKKyAg
ICAvLyByMyA9IHIyICsgbG9hZChwMykKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8g
Z290byBsb29wCisgICAgVmFsdWUqIHAzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAzKTsKKyAgICBWYWx1ZSogcDNQcmltZSA9
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE9wYXF1ZSwgT3JpZ2luKCksIHAzKTsK
KyAgICBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBTdG9yZSwgT3JpZ2lu
KCksIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNSks
IHAzUHJpbWUpOworICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAzKSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBE
b25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJv
Yy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNTQShw
cm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworCisgICAgYXV0byB0
ZXN0ID0gWyZdICgpIC0+IGludDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOworICAgICAg
ICB3aGlsZSAociA8IDEwKSB7CisgICAgICAgICAgICAqKytwdHIgPSA1OworICAgICAgICAgICAg
ciArPSAqcHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBD
SEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRy
KSksIHRlc3QoKSk7Cit9CisKIHZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCkKIHsKICAgICBpZiAo
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBAIC0zNDQsNiArNDIxLDcgQEAgdm9p
ZCB0ZXN0U3RvcmVQcmVJbmRleDMyKCkKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgIiM0XSEiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUs
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0
PGludDMyX3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNbMl0sICpwdHIpOwpAQCAtMzY4LDYg
KzQ0Niw5IEBAIHZvaWQgdGVzdFN0b3JlUHJlSW5kZXg2NCgpCiAgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CiAKICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKwogICAgIGludHB0cl90
IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRy
KSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPihyZXMpOwogICAgIENIRUNL
X0VRKG51bXNbMl0sICpwdHIpOwpAQCAtMzk2LDYgKzQ3Nyw3IEBAIHZvaWQgdGVzdFN0b3JlUG9z
dEluZGV4MzIoKQogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChp
c0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzQiKTsK
KwogICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0PGludDMyX3QqPihy
ZXMpOwogICAgIENIRUNLX0VRKG51bXNbMV0sIDQpOwpAQCAtNDIzLDYgKzUwNSw3IEBAIHZvaWQg
dGVzdFN0b3JlUG9zdEluZGV4NjQoKQogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCAiXSwgIzgiKTsKKwogICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUs
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CiAgICAgcHRyID0gYml0d2lzZV9jYXN0
PGludDY0X3QqPihyZXMpOwogICAgIENIRUNLX0VRKG51bXNbMV0sIDQpOwpAQCAtNDA5NywxNyAr
NDE4MCwxNSBAQCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVm
UHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFpTaHJBcmdJbW0z
MigweGZmZmZmZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwg
NjMpKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VCM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1l
bnRzKCkpIHsKLSAgICAgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXgzMigpKTsKLSAgICAgICAgUlVO
KHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKLSAgICAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4MzIo
KSk7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9h
ZFByZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4o
dGVzdExvYWRQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsK
IAotICAgICAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXgzMigpKTsKLSAgICAgICAgUlVOKHRlc3RT
dG9yZVByZUluZGV4NjQoKSk7Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsK
LSAgICAgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDY0KCkpOwotICAgIH0KKyAgICBSVU4odGVz
dFN0b3JlUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXg2NCgpKTsKKyAg
ICBSVU4odGVzdFN0b3JlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRl
eDY0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IDE3MjFlMTY1YjFmZmViYjRjNjYyMjRi
NDhlNTEzZDVjODZmMWUzYjAuLjE5YzU4MjdjMzNkMDI4MzZkZjA2NTE1NGRkMDJhY2IwOWU5NWNl
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAt
NDM3LDcgKzQzNyw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAg
dihVbnNpZ25lZCwgbWF4QjNUYWlsRHVwQmxvY2tTaXplLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KFVuc2lnbmVkLCBtYXhCM1RhaWxEdXBCbG9ja1N1Y2Nlc3NvcnMsIDMsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KEJvb2wsIHVzZUIzQ2Fub25pY2FsaXplUHJl
UG9zdEluY3JlbWVudHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihC
b29sLCB1c2VEb2xsYXJWTSwgZmFsc2UsIFJlc3RyaWN0ZWQsICJpbnN0YWxscyB0aGUgJHZtIGRl
YnVnZ2luZyB0b29sIGluIGdsb2JhbCBvYmplY3RzIikgXAogICAgIHYoT3B0aW9uU3RyaW5nLCBm
dW5jdGlvbk92ZXJyaWRlcywgbnVsbHB0ciwgUmVzdHJpY3RlZCwgImZpbGUgd2l0aCBkZWJ1Z2dp
bmcgb3ZlcnJpZGVzIGZvciBmdW5jdGlvbiBib2RpZXMiKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436393</attachid>
            <date>2021-08-25 08:58:56 -0700</date>
            <delta_ts>2021-08-25 10:03:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210825105854.patch</filename>
            <type>text/plain</type>
            <size>28865</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iYTk5MGViZTIzZjZhMWMw
NTBkM2VjYzkxODljMTA1N2ZiZmFhZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMS0wOC0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhlIHN0b3JlIGlzIHNlbWFu
dGljYWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAg
dGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0aGlzIGNhc2UsIG1heWJl
IHdlIHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAgICBkZXRlY3QgdGhlIHZp
b2xhdGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMg
cHJvYmxlbSwgd2UgbW92ZXMgdGhlIGFkZHJlc3MgdmFsdWUgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeSB2YWx1ZSBpbnN0ZWFkIG9mCisgICAgICAgIG1vdmluZyBtZW1vcnkgdmFsdWUgdXB3YXJk
LgorCisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25p
Y2FsIEZvcm06CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFy
ZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIENvbnZlcnQgUHJlLUlu
ZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorCisgICAgICAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBO
b3AKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
bWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBwYXJlbnQgPSBC
M09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5l
d0FkZHJlc3MsIC4uLikKKworICAgICAgICBUbyBtb3ZlIHRoZSBhZGRyZXNzIHZhbHVlIGRvd253
YXJkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHVzZSByZWZlcmVuY2Ugb2YgYWRkcmVz
cyBiZXR3ZWVuCisgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzLgorCisgICAg
ICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNH
ZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
TG9hZFdpdGhTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6
CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNo
clRlc3RzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMDgtMjIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0M2Y4OTI3YTJlMS4uOTQ2YTE5
MWJmYjM3YTkzNjUwZjZhMzMzNWFlNjE5MTA5ODhlODNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTIsNjkgKzUyLDU0IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5kZXggeyAwIH07CiAgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBCbG9ja0luc2VydGlvblNldCBi
bG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMg
PSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKLSAgICBJbmRleFNldDxW
YWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
cmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+
IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOworICAgIEluZGV4U2V0PFZhbHVlKj4gaGFuZGxlZFZh
bHVlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IG1lbW9yeVRvSW5kZXg7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBhZGRVc2VzOworICAgIEhhc2hNYXA8VmFs
dWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7CiAgICAgSGFzaE1hcDxW
YWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRUb0FkZHJlc3NlczsKLQotICAgIEhh
c2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvU3RvcmVzOwotICAgIEhh
c2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlczsKLQot
ICAgIGF1dG8gdHJ5QWRkUHJlUG9zdEluZGV4Q2FuZGlkYXRlID0gWyZdIChWYWx1ZSogdmFsdWUp
IHsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IHByZUluZGV4Q2Fu
ZGlkYXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IHBvc3RJ
bmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgSGFzaFNldDxNZW1vcnlW
YWx1ZSo+PiBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlczsKKworICAgIC8vIFN0cmVuZ3Ro
IFJlZHVjdGlvbiB3aWxsIGxlYXZlIHRoZSBJUiBpbiB0aGUgZm9ybSB3ZSdyZSBtYXRjaGluZyBu
b3cuIAorICAgIC8vIEl0J2xsIHRha2UgYW4gYWRkKHgsIGNvbnN0YW50KSB0aGF0J3MgYW4gYWRk
cmVzcyBhbmQgbW92ZSB0aGUgb2Zmc2V0IAorICAgIC8vIGludG8gdGhlIGxvYWQgaXRzZWxmLCBh
bmQgdGhhdCdzIHdoeSB3ZSBjYW4gbWF0Y2ggdGhpcyByZWR1bmRhbmN5LgorICAgIGF1dG8gdHJ5
QWRkQ2FuZGlkYXRlcyA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAgIHN3aXRjaCAodmFs
dWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgLy8gUHJl
LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgbWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46
Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgICAgICAgICAg
Ly8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQotICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzID0gWyZdICgp
IHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAm
JiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKG1lbW9yeS0+b2Zmc2V0KCkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1
ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnks
IGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBi
YXNlVG9Mb2Fkcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQorICAgICAgICBjYXNlIExvYWQ6CiAgICAgICAgIGNhc2UgU3RvcmU6IHsK
LSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0
b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRl
cm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCi0g
ICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcyA9IFsm
XSAoKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlw
ZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxk
KDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgYmFzZVRvU3RvcmVzLmFkZChtZW1vcnktPmNoaWxkKDEp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlVcGRhdGVCYXNlVG9TdG9yZXMoKTsK
KyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCk7CisgICAgICAgICAgICBWYWx1ZSogdHlwZSA9IHZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkID8g
bWVtb3J5IDogbWVtb3J5LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmICh0eXBlLT50eXBlKCkg
IT0gSW50MzIgJiYgdHlwZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBQcmUtSW5kZXggTG9hZC9TdG9yZSBQYXR0ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAgICAgLi4uCisg
ICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0S2V5ID0gVmFsdWVLZXkobWVtb3J5
LT5sYXN0Q2hpbGQoKSwgbWVtb3J5LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBp
dGVyID0gYmFzZU9mZnNldFRvQWRkcmVzc2VzLmZpbmQoYmFzZU9mZnNldEtleSk7CisgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gYmFzZU9mZnNldFRvQWRkcmVzc2VzLmVuZCgpKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNz
IDogaXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHZpb2xh
dGVkIGFkZHJlc3MgdmFsdWUgaWYgaXQgaGFzIGFueSB1c2UgcmVmZXJlbmNlcworICAgICAgICAg
ICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzIHdoZW4g
dGhleSBhcmUgaW4gdGhlIHNhbWUgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRV
c2VzSXRlciA9IGFkZFVzZXMuZmluZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFkZFVzZXNJdGVyICE9IGFkZFVzZXMuZW5kKCkgJiYgYWRkVXNlc0l0ZXItPnZhbHVlLnNpemUo
KSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gZG91YmxlLWNoZWNrIG9mZnNldHMgdG8gYXZvaWQgVmFsdWVLZXkgY29sbGlzaW9u
cworICAgICAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSAhPSBzdGF0aWNfY2Fz
dDxWYWx1ZTo6T2Zmc2V0VHlwZT4oYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHByZUlu
ZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBibG9ja1RvUHJlUG9zdElu
ZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LT5vd25lciwgSGFzaFNldDxNZW1vcnlWYWx1ZSo+KCkp
Lml0ZXJhdG9yLT52YWx1ZS5hZGQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBiYXNlVG9NZW1vcmllcy5hZGQobWVtb3J5LT5s
YXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChtZW1vcnkpOworICAgICAgICAgICAgbWVtb3J5VG9JbmRleC5hZGQobWVtb3J5LCBpbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMjIsMzggKzEwNyw0NiBAQCBi
b29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAg
ICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgVmFsdWUq
IHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOwogCi0gICAgICAgICAgICBhdXRvIHRyeUFkZHBvc3RJ
bmRleENhbmRpZGF0ZXMgPSBbJl0gKCkgewotICAgICAgICAgICAgICAgIGlmICghcmlnaHQtPmhh
c0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQ
dHIoKTsKLSAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0
YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlm
IChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZEluY3JlbWVudEluZGV4Rm9y
bShzbWFsbE9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0
ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgotICAgICAgICAgICAgICAgIFZh
bHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ2NF90
PihzbWFsbE9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5h
ZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUb0xvYWRzLmNvbnRhaW5zKGxlZnQp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VU
b0xvYWRzLmdldChsZWZ0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RJbmRleExvYWRD
YW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGJhc2VUb1N0b3Jlcy5jb250YWlucyhsZWZ0KSkgewotICAgICAgICAgICAg
ICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9TdG9yZXMuZ2V0KGxlZnQp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OworICAgICAg
ICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJp
Z2h0LT5hc0ludFB0cigpOworICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZz
ZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAgICAg
IGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZEluY3JlbWVudEluZGV4
Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
IHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMoKTsKKyAgICAgICAgICAgIC8vIHNvIGZhciB0aGlz
IEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJlc3MgY2FuZGlkYXRlIGZvciBib3RoIHByZWZpeCBh
bmQgcG9zdGZpeCBwYXR0ZXJuCisgICAgICAgICAgICBhZGRVc2VzLmFkZCh2YWx1ZSwgVmVjdG9y
PFZhbHVlKj4oKSk7CisgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0S2V5ID0gVmFsdWVL
ZXkobGVmdCwgc21hbGxPZmZzZXQpOworICAgICAgICAgICAgYmFzZU9mZnNldFRvQWRkcmVzc2Vz
LmFkZChiYXNlT2Zmc2V0S2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKHZhbHVlKTsKKworICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBMb2FkL1N0b3JlIFBhdHRl
cm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUoYmFzZSwgMCkKKyAg
ICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IGJhc2VUb01lbW9yaWVzLmZpbmQo
bGVmdCk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBiYXNlVG9NZW1vcmllcy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9y
eSA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5h
ZGQobWVtb3J5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVt
b3J5LT5vd25lciwgSGFzaFNldDxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQo
bWVtb3J5KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAg
YXV0byBpdGVyID0gYWRkVXNlcy5maW5kKGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChpdGVyICE9
IGFkZFVzZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sg
OiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5k
ZXggPCBiYXNpY0Jsb2NrLT5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICB0cnlBZGRQcmVQ
b3N0SW5kZXhDYW5kaWRhdGUoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKKyAgICAgICAgICAgIHRy
eUFkZENhbmRpZGF0ZXMoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKICAgICB9CiAKICAgICBhdXRv
IGNvbnRyb2xFcXVpdmFsZW50ID0gWyZdIChWYWx1ZSogdjEsIFZhbHVlKiB2MikgLT4gYm9vbCB7
CkBAIC0xNjEsNjggKzE1NCw3MiBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
KFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2
Mi0+b3duZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEt
Pm93bmVyLCB2Mi0+b3duZXIpKTsKICAgICB9OwogCi0gICAgLy8gVGhpcyBzZWFyY2ggaXMgZXhw
ZW5zaXZlLiBIb3dldmVyLCBkdWUgdG8gdGhlIGdyZWVkeSBwYXR0ZXJuCi0gICAgLy8gbWF0Y2hp
bmcsIG5vIGJldHRlciBtZXRob2QgY2FuIGJlIHByb3Bvc2VkIGF0IHByZXNlbnQuCi0gICAgYXV0
byB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrID0gWyZdIChWYWx1ZSogdmFsdWUpIC0+IHVuc2lnbmVk
IHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IHZhbHVlLT5vd25lcjsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpbmRleCkgPT0g
dmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIGZvciAoYXV0byBwYWly
IDogYmxvY2tUb1ByZVBvc3RJbmRleENhbmRpZGF0ZXMpIHsKKyAgICAgICAgQmFzaWNCbG9jayog
YmFzaWNCbG9jayA9IHBhaXIua2V5OworICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkg
OiBwYWlyLnZhbHVlKSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IFByZS1JbmRleCBMb2FkL1N0
b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5v
cAorICAgICAgICAgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBNZW1vcnlWYWx1ZShiYXNlLCBvZmZzZXQpICAg
ICAtLT4gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAg
IC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4u
LgorICAgICAgICAgICAgLy8gICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAg
ICAgICAgICAgICAgcGFyZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorICAgICAgICAg
ICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IHByZUluZGV4Q2FuZGlkYXRlcy5nZXQobWVtb3J5KSkg
eworICAgICAgICAgICAgICAgIGlmIChoYW5kbGVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwg
aGFuZGxlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVt
b3J5LCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgICAgICBhdXRvIGRvbWluYXRlc0FsbEFkZFVzZXMgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IGFkZFVzZXMuZmluZChhZGRyZXNzKTsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gYWRkVXNlcy5lbmQoKSAmJiBpdGVyLT52YWx1
ZS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBwYXJlbnQgOiBpdGVy
LT52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb21pbmF0b3JzLmRvbWlu
YXRlcyhtZW1vcnktPm93bmVyLCBwYXJlbnQtPm93bmVyKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAg
ICAgIGlmICghZG9taW5hdGVzQWxsQWRkVXNlcygpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc2VydGlvbkluZGV4ID0gbWVtb3J5
VG9JbmRleC5nZXQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9
IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9yeS0+
b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBhZGRyZXNzLT5jaGlsZCgxKSk7CisgICAgICAg
ICAgICAgICAgLy8gdXBkYXRlIGFsbCBhZGRyZXNzIHJlZmVyZW5jZXMgd2l0aCB0aGUgbmV3QWRk
cmVzcworICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIHBhcmVudCA6IGFkZFVzZXMuZ2V0KGFk
ZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
YXJlbnQtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVmFs
dWUqJiBjaGlsZCA9IHBhcmVudC0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQgPT0gYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9
IG5ld0FkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhOb3BJZ25vcmluZ1R5cGUoKTsKKwor
ICAgICAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgICAgICAg
ICAgaGFuZGxlZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIENvbnZlcnQgUG9zdC1JbmRleCBMb2FkL1N0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9u
aWNhbCBGb3JtOgorICAgICAgICAgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAorICAgICAgICAgICAgLy8gICAgIC4uLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5l
d09mZnNldCkKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBNZW1vcnlWYWx1ZShiYXNlLCAw
KSAgICAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUoYmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAg
ICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAgLi4uCisgICAgICAgICAgICAv
LyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVu
dGl0eShuZXdBZGRyZXNzKQorICAgICAgICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IHBvc3RJ
bmRleENhbmRpZGF0ZXMuZ2V0KG1lbW9yeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxl
ZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGhhbmRsZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVz
cykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5k
ZXggPSBtZW1vcnlUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBu
ZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5k
ZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKKyAgICAg
ICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+
KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDAp
LCBuZXdPZmZzZXQpOworICAgICAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoSWRlbnRp
dHkobmV3QWRkcmVzcyk7CisKKyAgICAgICAgICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChtZW1v
cnkpOworICAgICAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOworICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9OwotCi0gICAg
Zm9yIChhdXRvIHBhaXIgOiBwcmVJbmRleExvYWRDYW5kaWRhdGVzKSB7Ci0gICAgICAgIE1lbW9y
eVZhbHVlKiBtZW1vcnkgPSBwYWlyLmtleTsKLSAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwYWly
LnZhbHVlOwotICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGln
bm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9y
eSwgYWRkcmVzcykpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gYWRkcmVzcyA9
IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAg
ICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9h
ZChiYXNlLCBvZmZzZXQpCi0gICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuLi4KLSAgICAgICAgLy8gbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpICAgICAgIG1l
bW9yeSA9IElkZW50aXR5KG5ld01lbW9yeSkKLSAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5k
ZXggPSB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrKGFkZHJlc3MpICsgMTsKLSAgICAgICAgTWVtb3J5
VmFsdWUqIG5ld01lbW9yeSA9IGluc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KGluc2Vy
dGlvbkluZGV4LCBMb2FkLCBtZW1vcnktPnR5cGUoKSwgYWRkcmVzcy0+b3JpZ2luKCksIG1lbW9y
eS0+bGFzdENoaWxkKCkpOwotICAgICAgICBuZXdNZW1vcnktPnNldE9mZnNldChtZW1vcnktPm9m
ZnNldCgpKTsKLSAgICAgICAgbWVtb3J5LT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld01lbW9yeSk7
Ci0gICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGFkZHJlc3MtPm93bmVyKTsKLQotICAgICAg
ICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOwotICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChh
ZGRyZXNzKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHJlc2V0IHZhbHVlcycgaW5kZXhlcyBpZiB0
aGVyZSBhcmUgYW55IGluc2VydGlvbnMuCisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJh
c2ljQmxvY2spOwogICAgIH0KIAotICAgIGF1dG8gZGV0ZWN0UG9zdEluZGV4ID0gWyZdIChjb25z
dCBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiYgY2FuZGlkYXRlcykgewotICAgICAgICBm
b3IgKGF1dG8gcGFpciA6IGNhbmRpZGF0ZXMpIHsKLSAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBwYWlyLmtleTsKLSAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gcGFpci52YWx1
ZTsKLSAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdu
b3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5
LCBhZGRyZXNzKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgdW5z
aWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrKG1lbW9yeSk7Ci0g
ICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0
VmFsdWU+KGluc2VydGlvbkluZGV4LCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgx
KS0+YXNJbnQoKSk7Ci0gICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFk
ZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFj
ZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsKLSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKG1lbW9yeS0+b3duZXIpOwotCi0gICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1v
cnkpOwotICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d09mZnNldCA9IENvbnN0YW50Ci0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQotICAgIC8vIG1lbW9yeSA9
IExvYWQoYmFzZSwgMCkgICAgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCi0gICAg
Ly8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgotICAgIC8vIGFkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRk
cmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4TG9hZENhbmRpZGF0ZXMpOwotCi0g
ICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENv
bnN0YW50Ci0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Fk
ZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQotICAgIC8vIG1lbW9yeSA9IFN0b3JlKHZhbHVl
LCBiYXNlLCAwKSAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKLSAgICAvLyAu
Li4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAgLi4uCi0gICAgLy8gYWRkcmVzcyA9
IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNz
KQotICAgIGRldGVjdFBvc3RJbmRleChwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKaW5k
ZXggYjkzY2U4MTliMWUzZmExNDA5ZDBiN2M3M2IwMWM4YmZiOTExNjNlNS4uNjYyZjMyMzgwNWNj
ZjczNjc4ZGRlNmYxMzkzN2RjZWVkMzdlNDA5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0dlbmVyYXRlLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSkKICAgICBsb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucyhwcm9j
ZWR1cmUpOwogICAgIGxlZ2FsaXplTWVtb3J5T2Zmc2V0cyhwcm9jZWR1cmUpOwogICAgIG1vdmVD
b25zdGFudHMocHJvY2VkdXJlKTsKLSAgICBpZiAoT3B0aW9uczo6dXNlQjNDYW5vbmljYWxpemVQ
cmVQb3N0SW5jcmVtZW50cygpICYmIHByb2NlZHVyZS5vcHRMZXZlbCgpID49IDIpCisgICAgaWYg
KHByb2NlZHVyZS5vcHRMZXZlbCgpID49IDIpCiAgICAgICAgIGNhbm9uaWNhbGl6ZVByZVBvc3RJ
bmNyZW1lbnRzKHByb2NlZHVyZSk7CiAgICAgZWxpbWluYXRlRGVhZENvZGUocHJvY2VkdXJlKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKaW5kZXggNDZmNDQwYzUyZmQ0ZTBj
ZTlkZjA5NjU5OGNkNWNjMDZmMzk5NTFhMS4uYjg0YzhhNGQzNjRiYTg4NzA4YjgwMTk0OGIzYzgx
NTljMjk4NDdlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVL
ZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCkBAIC01Niw3
ICs1Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgVmFsdWVLZXkoVmFsdWUqIGNo
aWxkLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZUtleShWYWx1ZSogY2hpbGQsIGludDMyX3Qg
b2Zmc2V0KTsKIAogICAgIFZhbHVlS2V5KEtpbmQsIFR5cGUsIFZhbHVlKiBjaGlsZCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKaW5kZXggZTE4NjYx
OTQ5MjYyMTQwNjZmZTg5ZTVjNzFiMmQwNzc4MDU0NzAxZi4uMDBlZjBjZjc0MmU2OGE3ZjdlMmU5
ZmYyNGYyMTBmMjkwYTJhMjFlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVLZXlJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVLZXlJbmxpbmVzLmgKQEAgLTMzLDEyICszMywxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKIAotaW5saW5lIFZhbHVlS2V5OjpWYWx1ZUtleShWYWx1ZSogY2hpbGQsIGlu
dDY0X3QgdmFsdWUpCitpbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KFZhbHVlKiBjaGlsZCwgaW50
MzJfdCBvZmZzZXQpCiB7CiAgICAgbV9raW5kID0gT29wczsKICAgICBtX3R5cGUgPSBWb2lkOwot
ICAgIHUuaW5kaWNlc1swXSA9IGNoaWxkLT5pbmRleCgpOwotICAgIHUudmFsdWUgPSB2YWx1ZTsK
KyAgICAvLyBUaGUgb2JzZXJ2YXRpb24gaXMgdGhhdCB3aGVuIGJvdGggY2hpbGQtPmluZGV4KCkg
YW5kIG9mZnNldCBhcmUgMCdzLAorICAgIC8vIEhhc2hNYXAgd291bGQgbm90IGFjY2VwdCB0aGUg
VmFsdWVLZXkuCisgICAgdS5pbmRpY2VzWzBdID0gY2hpbGQtPmluZGV4KCkgKyAxOworICAgIHUu
aW5kaWNlc1sxXSA9IG9mZnNldCArIDE7CiB9CiAKIGlubGluZSBWYWx1ZUtleTo6VmFsdWVLZXko
S2luZCBraW5kLCBUeXBlIHR5cGUsIFZhbHVlKiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuaAppbmRleCBlMTcxYWNmNTVlMzY3MGY4OTFmMTViYThmMjBjNmNkYzFjMTg2OTJmLi45ZDcy
ZjI0MTA2MDcxNjhkNjA0N2M5YTU3OTc4MzMyM2NmZmNlMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCkBAIC0xMTY0LDYgKzExNjQsNyBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBj
aGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogYm9vbCBz
aG91bGRSdW4oY29uc3QgY2hhciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7CiAKIHZv
aWQgdGVzdExvYWRQcmVJbmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgz
MigpOwogdm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXgz
MigpOwogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiM18zLmNwcAppbmRleCAwODE3ZjYxOTdiYzU4Njk2Zjk0OTcyZThkNjA0OWZmMjFkMjAyNzA4
Li4zZjg1Nzk4Mjg1MmZhNWJkZDE3Yjc2NTA5YmJkMDBhMjA5ZTYwMjk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTEwMiw2ICsxMDIsODMgQEAgdm9pZCB0ZXN0TG9h
ZFByZUluZGV4MzIoKQogICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lz
ZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKIH0KIAordm9pZCB0ZXN0TG9hZFdpdGhT
dG9yZVByZUluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMs
IDQsIDUsIDYsIDcsIDgsIDksIDEwIH07CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbG9vcFRlc3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbG9vcEJvZHkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9
IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJ
bnQzMik7CisgICAgVmFyaWFibGUqIHAgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAg
IC8vIFVwc2lsb24ocjEsIF5yMikKKyAgICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAx
LCBecDIpCisgICAgVmFsdWUqIHIxID0gcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3Jp
Z2luKCksIEludDMyLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJv
YywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQs
IE9yaWdpbigpLCBwLCBwMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAv
LyBwMiA9IFBoaSgpCisgICAgLy8gcjIgPSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8g
ZG9uZQorICAgIFZhbHVlKiByMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAg
IFZhbHVlKiBjb25kID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVh
bCwgT3JpZ2luKCksIHIyLCBsb29wVGVzdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDEwKSk7CisgICAgbG9vcFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBCcmFuY2gsIE9yaWdpbigpLCBjb25kLCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50
ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29w
X0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikK
KyAgICAvLyBwMycgPSAmcDMKKyAgICAvLyBzdG9yZSg1LCBwMycpCisgICAgLy8gcjMgPSByMiAr
IGxvYWQocDMpCisgICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAg
IFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2lu
KCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDQpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgVmFsdWUqIHAzUHJpbWUgPSBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBPcGFxdWUsIE9yaWdpbigpLCBwMyk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCBsb29wQm9keS0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDUpLCBwM1ByaW1lKTsKKyAg
ICBWYWx1ZSogcjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdp
bigpLCByMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLCBwMykpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9v
cFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAg
IC8vIGRvbmU6CisgICAgLy8gcmV0dXJuIHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFi
aWxpdHkoKTsKKyAgICB2YWxpZGF0ZShwcm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAt
PiBpbnQzMl90IHsKKyAgICAgICAgaW50MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAx
MCkgeworICAgICAgICAgICAgKisrcHRyID0gNTsKKyAgICAgICAgICAgIHIgKz0gKnB0cjsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tl
PGludDMyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOwor
fQorCiB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQpAQCAtMzQ0LDYgKzQyMSw3IEBAIHZvaWQgdGVzdFN0b3JlUHJl
SW5kZXgzMigpCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlz
QVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjNF0hIik7CisK
ICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVz
KTsKICAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKQEAgLTM2OCw2ICs0NDYsOSBAQCB2b2lk
IHRlc3RTdG9yZVByZUluZGV4NjQoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwcmVJbmNyZW1lbnQpOwogCiAgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2Vz
SW5zdHJ1Y3Rpb24oKmNvZGUsICIjOF0hIik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8
aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0
ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzJdLCAq
cHRyKTsKQEAgLTM5Niw2ICs0NzcsNyBAQCB2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDMyKCkKICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM0Iik7CisKICAgICBpbnRwdHJf
dCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0
ciksIDQpOwogICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKICAgICBDSEVD
S19FUShudW1zWzFdLCA0KTsKQEAgLTQyMyw2ICs1MDUsNyBAQCB2b2lkIHRlc3RTdG9yZVBvc3RJ
bmRleDY0KCkKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNB
Uk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7CisK
ICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVz
KTsKICAgICBDSEVDS19FUShudW1zWzFdLCA0KTsKQEAgLTQwOTcsMTcgKzQxODAsMTUgQEAgdm9p
ZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwg
MSkpOwogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CiAKLSAgICBp
ZiAoT3B0aW9uczo6dXNlQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cygpKSB7Ci0gICAg
ICAgIFJVTih0ZXN0TG9hZFByZUluZGV4MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFByZUlu
ZGV4NjQoKSk7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkpOwotICAgICAgICBS
VU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDMyKCkp
OworICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdElu
ZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CiAKLSAgICAgICAgUlVO
KHRlc3RTdG9yZVByZUluZGV4MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDY0
KCkpOwotICAgICAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4MzIoKSk7Ci0gICAgICAgIFJVTih0
ZXN0U3RvcmVQb3N0SW5kZXg2NCgpKTsKLSAgICB9CisgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4
MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RTdG9y
ZVBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpKTsKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAppbmRleCAxNzIxZTE2NWIxZmZlYmI0YzY2MjI0YjQ4ZTUxM2Q1Yzg2ZjFl
M2IwLi4xOWM1ODI3YzMzZDAyODM2ZGYwNjUxNTRkZDAyYWNiMDllOTVjZWM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTQzNyw3ICs0MzcsNiBA
QCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoVW5zaWduZWQsIG1h
eEIzVGFpbER1cEJsb2NrU2l6ZSwgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25l
ZCwgbWF4QjNUYWlsRHVwQmxvY2tTdWNjZXNzb3JzLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KEJvb2wsIHVzZUIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCi0gICAgdihCb29sLCB1c2VCM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoQm9vbCwgdXNlRG9sbGFy
Vk0sIGZhbHNlLCBSZXN0cmljdGVkLCAiaW5zdGFsbHMgdGhlICR2bSBkZWJ1Z2dpbmcgdG9vbCBp
biBnbG9iYWwgb2JqZWN0cyIpIFwKICAgICB2KE9wdGlvblN0cmluZywgZnVuY3Rpb25PdmVycmlk
ZXMsIG51bGxwdHIsIFJlc3RyaWN0ZWQsICJmaWxlIHdpdGggZGVidWdnaW5nIG92ZXJyaWRlcyBm
b3IgZnVuY3Rpb24gYm9kaWVzIikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436398</attachid>
            <date>2021-08-25 10:03:28 -0700</date>
            <delta_ts>2021-08-25 12:06:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229175-20210825120327.patch</filename>
            <type>text/plain</type>
            <size>28872</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iYTk5MGViZTIzZjZhMWMw
NTBkM2VjYzkxODljMTA1N2ZiZmFhZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMS0wOC0yMyAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJl
c3MgbW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBp
biB0aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAg
IHRlbXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyOTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9k
ZSBmb3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0
aGUgY2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1
bWUgIi4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFz
ZXMgZm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFk
ZHJlc3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVt
b3J5ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hv
dWxkIGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhlIHN0b3JlIGlzIHNlbWFu
dGljYWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAg
dGhlIGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0aGlzIGNhc2UsIG1heWJl
IHdlIHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAgICBkZXRlY3QgdGhlIHZp
b2xhdGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMg
cHJvYmxlbSwgd2UgbW92ZXMgdGhlIGFkZHJlc3MgdmFsdWUgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeSB2YWx1ZSBpbnN0ZWFkIG9mCisgICAgICAgIG1vdmluZyBtZW1vcnkgdmFsdWUgdXB3YXJk
LgorCisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25p
Y2FsIEZvcm06CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAg
ICAgICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFy
ZW50ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIENvbnZlcnQgUHJlLUlu
ZGV4IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorCisgICAgICAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBO
b3AKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
bWVtb3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBwYXJlbnQgPSBC
M09wY29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5l
d0FkZHJlc3MsIC4uLikKKworICAgICAgICBUbyBtb3ZlIHRoZSBhZGRyZXNzIHZhbHVlIGRvd253
YXJkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHVzZSByZWZlcmVuY2Ugb2YgYWRkcmVz
cyBiZXR3ZWVuCisgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzLgorCisgICAg
ICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNH
ZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0
TG9hZFdpdGhTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6
CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJ
bmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNo
clRlc3RzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMDgtMjIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0M2Y4OTI3YTJlMS4uZGUyMmIy
ZGJiZmRiMTlkMDZkOWI1MTFlMTJhNTQ1N2QzZThhNTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTIsNjkgKzUyLDU0IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgdW5zaWduZWQgaW5kZXggeyAwIH07CiAgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldCB7IHByb2MgfTsKLSAgICBCbG9ja0luc2VydGlvblNldCBi
bG9ja0luc2VydGlvblNldCB7IHByb2MgfTsKIAogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMg
PSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKLSAgICBJbmRleFNldDxW
YWx1ZSo+IGlnbm9yZWRWYWx1ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+PiBiYXNlVG9Mb2FkczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
cmVJbmRleExvYWRDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+
IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOworICAgIEluZGV4U2V0PFZhbHVlKj4gaGFuZGxlZFZh
bHVlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IG1lbW9yeVRvSW5kZXg7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBhZGRVc2VzOworICAgIEhhc2hNYXA8VmFs
dWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7CiAgICAgSGFzaE1hcDxW
YWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRUb0FkZHJlc3NlczsKLQotICAgIEhh
c2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvU3RvcmVzOwotICAgIEhh
c2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlczsKLQot
ICAgIGF1dG8gdHJ5QWRkUHJlUG9zdEluZGV4Q2FuZGlkYXRlID0gWyZdIChWYWx1ZSogdmFsdWUp
IHsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IHByZUluZGV4Q2Fu
ZGlkYXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IHBvc3RJ
bmRleENhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgSGFzaFNldDxNZW1vcnlW
YWx1ZSo+PiBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlczsKKworICAgIC8vIFN0cmVuZ3Ro
IFJlZHVjdGlvbiB3aWxsIGxlYXZlIHRoZSBJUiBpbiB0aGUgZm9ybSB3ZSdyZSBtYXRjaGluZyBu
b3cuIAorICAgIC8vIEl0J2xsIHRha2UgYW4gYWRkKHgsIGNvbnN0YW50KSB0aGF0J3MgYW4gYWRk
cmVzcyBhbmQgbW92ZSB0aGUgb2Zmc2V0IAorICAgIC8vIGludG8gdGhlIGxvYWQgaXRzZWxmLCBh
bmQgdGhhdCdzIHdoeSB3ZSBjYW4gbWF0Y2ggdGhpcyByZWR1bmRhbmN5LgorICAgIGF1dG8gdHJ5
QWRkQ2FuZGlkYXRlcyA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAgIHN3aXRjaCAodmFs
dWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgLy8gUHJl
LUluZGV4IFBhdHRlcm46Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCi0gICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgbWVtb3J5
ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46
Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgICAgICAgICAg
Ly8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQotICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzID0gWyZdICgp
IHsKLSAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAm
JiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghQXJnOjppc1ZhbGlkSW5jcmVtZW50SW5kZXhGb3JtKG1lbW9yeS0+b2Zmc2V0KCkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgwKSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1
ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnks
IGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBi
YXNlVG9Mb2Fkcy5hZGQobWVtb3J5LT5jaGlsZCgwKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQorICAgICAgICBjYXNlIExvYWQ6CiAgICAgICAgIGNhc2UgU3RvcmU6IHsK
LSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgICAgICAgICAgLy8gICAgIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0
b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRl
cm46Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCi0g
ICAgICAgICAgICAvLyAgICAgLi4uCi0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCi0gICAgICAgICAgICBhdXRvIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcyA9IFsm
XSAoKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlw
ZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQ2NCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxk
KDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgYmFzZVRvU3RvcmVzLmFkZChtZW1vcnktPmNoaWxkKDEp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB0cnlVcGRhdGVCYXNlVG9TdG9yZXMoKTsK
KyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCk7CisgICAgICAgICAgICBWYWx1ZSogdHlwZSA9IHZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkID8g
bWVtb3J5IDogbWVtb3J5LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmICh0eXBlLT50eXBlKCkg
IT0gSW50MzIgJiYgdHlwZS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBQcmUtSW5kZXggTG9hZC9TdG9yZSBQYXR0ZXJuOgorICAgICAgICAgICAgICAgIC8vICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAgICAgLi4uCisg
ICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2UsIG9mZnNldCkK
KyAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0S2V5ID0gVmFsdWVLZXkobWVtb3J5
LT5sYXN0Q2hpbGQoKSwgbWVtb3J5LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBp
dGVyID0gYmFzZU9mZnNldFRvQWRkcmVzc2VzLmZpbmQoYmFzZU9mZnNldEtleSk7CisgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gYmFzZU9mZnNldFRvQWRkcmVzc2VzLmVuZCgpKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNz
IDogaXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHZpb2xh
dGVkIGFkZHJlc3MgdmFsdWUgaWYgaXQgaGFzIGFueSB1c2UgcmVmZXJlbmNlcworICAgICAgICAg
ICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzIHdoZW4g
dGhleSBhcmUgaW4gdGhlIHNhbWUgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRV
c2VzSXRlciA9IGFkZFVzZXMuZmluZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFkZFVzZXNJdGVyICE9IGFkZFVzZXMuZW5kKCkgJiYgYWRkVXNlc0l0ZXItPnZhbHVlLnNpemUo
KSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gZG91YmxlLWNoZWNrIG9mZnNldHMgdG8gYXZvaWQgVmFsdWVLZXkgY29sbGlzaW9u
cworICAgICAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSAhPSBzdGF0aWNfY2Fz
dDxWYWx1ZTo6T2Zmc2V0VHlwZT4oYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHByZUlu
ZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBibG9ja1RvUHJlUG9zdElu
ZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LT5vd25lciwgSGFzaFNldDxNZW1vcnlWYWx1ZSo+KCkp
Lml0ZXJhdG9yLT52YWx1ZS5hZGQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBiYXNlVG9NZW1vcmllcy5hZGQobWVtb3J5LT5s
YXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChtZW1vcnkpOworICAgICAgICAgICAgbWVtb3J5VG9JbmRleC5hZGQobWVtb3J5LCBpbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMjIsMzggKzEwNyw0NiBAQCBi
b29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAg
ICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgVmFsdWUq
IHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOwogCi0gICAgICAgICAgICBhdXRvIHRyeUFkZHBvc3RJ
bmRleENhbmRpZGF0ZXMgPSBbJl0gKCkgewotICAgICAgICAgICAgICAgIGlmICghcmlnaHQtPmhh
c0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdodC0+YXNJbnRQ
dHIoKTsKLSAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0
YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlm
IChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZEluY3JlbWVudEluZGV4Rm9y
bShzbWFsbE9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0
ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgotICAgICAgICAgICAgICAgIFZh
bHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ2NF90
PihzbWFsbE9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5h
ZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUb0xvYWRzLmNvbnRhaW5zKGxlZnQp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VU
b0xvYWRzLmdldChsZWZ0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RJbmRleExvYWRD
YW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGJhc2VUb1N0b3Jlcy5jb250YWlucyhsZWZ0KSkgewotICAgICAgICAgICAg
ICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9TdG9yZXMuZ2V0KGxlZnQp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OworICAgICAg
ICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJp
Z2h0LT5hc0ludFB0cigpOworICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZz
ZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAgICAg
IGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZEluY3JlbWVudEluZGV4
Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
IHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMoKTsKKyAgICAgICAgICAgIC8vIHNvIGZhciB0aGlz
IEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJlc3MgY2FuZGlkYXRlIGZvciBib3RoIHByZWZpeCBh
bmQgcG9zdGZpeCBwYXR0ZXJuCisgICAgICAgICAgICBhZGRVc2VzLmFkZCh2YWx1ZSwgVmVjdG9y
PFZhbHVlKj4oKSk7CisgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0S2V5ID0gVmFsdWVL
ZXkobGVmdCwgc21hbGxPZmZzZXQpOworICAgICAgICAgICAgYmFzZU9mZnNldFRvQWRkcmVzc2Vz
LmFkZChiYXNlT2Zmc2V0S2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKHZhbHVlKTsKKworICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBMb2FkL1N0b3JlIFBhdHRl
cm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUoYmFzZSwgMCkKKyAg
ICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IGJhc2VUb01lbW9yaWVzLmZpbmQo
bGVmdCk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBiYXNlVG9NZW1vcmllcy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9y
eSA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5h
ZGQobWVtb3J5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVt
b3J5LT5vd25lciwgSGFzaFNldDxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQo
bWVtb3J5KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAg
YXV0byBpdGVyID0gYWRkVXNlcy5maW5kKGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChpdGVyICE9
IGFkZFVzZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sg
OiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5k
ZXggPCBiYXNpY0Jsb2NrLT5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICB0cnlBZGRQcmVQ
b3N0SW5kZXhDYW5kaWRhdGUoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKKyAgICAgICAgICAgIHRy
eUFkZENhbmRpZGF0ZXMoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKICAgICB9CiAKICAgICBhdXRv
IGNvbnRyb2xFcXVpdmFsZW50ID0gWyZdIChWYWx1ZSogdjEsIFZhbHVlKiB2MikgLT4gYm9vbCB7
CkBAIC0xNjEsNjggKzE1NCw3MiBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
KFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2
Mi0+b3duZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEt
Pm93bmVyLCB2Mi0+b3duZXIpKTsKICAgICB9OwogCi0gICAgLy8gVGhpcyBzZWFyY2ggaXMgZXhw
ZW5zaXZlLiBIb3dldmVyLCBkdWUgdG8gdGhlIGdyZWVkeSBwYXR0ZXJuCi0gICAgLy8gbWF0Y2hp
bmcsIG5vIGJldHRlciBtZXRob2QgY2FuIGJlIHByb3Bvc2VkIGF0IHByZXNlbnQuCi0gICAgYXV0
byB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrID0gWyZdIChWYWx1ZSogdmFsdWUpIC0+IHVuc2lnbmVk
IHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IHZhbHVlLT5vd25lcjsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpbmRleCkgPT0g
dmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIGZvciAoY29uc3QgYXV0
byYgcGFpciA6IGJsb2NrVG9QcmVQb3N0SW5kZXhDYW5kaWRhdGVzKSB7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJhc2ljQmxvY2sgPSBwYWlyLmtleTsKKyAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSog
bWVtb3J5IDogcGFpci52YWx1ZSkgeworICAgICAgICAgICAgLy8gQ29udmVydCBQcmUtSW5kZXgg
TG9hZC9TdG9yZSBQYXR0ZXJuIHRvIHRoZSBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJl
c3MgPSBOb3AKKyAgICAgICAgICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIC4uLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUoYmFzZSwgb2Zm
c2V0KSAgICAgLS0+ICAgICBtZW1vcnkgPSBNZW1vcnlWYWx1ZShiYXNlLCBvZmZzZXQpCisgICAg
ICAgICAgICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBwYXJlbnQgPSBCM09wY29kZShhZGRyZXNzLCAu
Li4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5ld0FkZHJlc3MsIC4uLikKKyAg
ICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3MgOiBwcmVJbmRleENhbmRpZGF0ZXMuZ2V0KG1l
bW9yeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZFZhbHVlcy5jb250YWlucyhtZW1v
cnkpIHx8IGhhbmRsZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFs
ZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgYXV0byBkb21pbmF0ZXNBbGxBZGRVc2VzID0gWyZdICgpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBhZGRVc2VzLmZpbmQoYWRkcmVzcyk7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IGFkZFVzZXMuZW5kKCkgJiYgaXRl
ci0+dmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogcGFyZW50
IDogaXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9taW5hdG9y
cy5kb21pbmF0ZXMobWVtb3J5LT5vd25lciwgcGFyZW50LT5vd25lcikpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgICAgICBpZiAoIWRvbWluYXRlc0FsbEFkZFVzZXMoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9
IG1lbW9yeVRvSW5kZXguZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0Fk
ZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihpbnNlcnRpb25JbmRleCwgQWRkLCBt
ZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgYWRkcmVzcy0+Y2hpbGQoMSkpOwor
ICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBhbGwgYWRkcmVzcyByZWZlcmVuY2VzIHdpdGggdGhl
IG5ld0FkZHJlc3MKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBwYXJlbnQgOiBhZGRVc2Vz
LmdldChhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcGFyZW50LT5udW1DaGlsZHJlbigpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZhbHVlKiYgY2hpbGQgPSBwYXJlbnQtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkID09IGFkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGQgPSBuZXdBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoTm9wSWdub3JpbmdUeXBl
KCk7CisKKyAgICAgICAgICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChtZW1vcnkpOworICAgICAg
ICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBDb252ZXJ0IFBvc3QtSW5kZXggTG9hZC9TdG9yZSBQYXR0ZXJuIHRvIHRo
ZSBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKKyAgICAgICAgICAgIC8vICAg
ICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChi
YXNlLCBuZXdPZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUo
YmFzZSwgMCkgICAgICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2UsIDApCisgICAgICAgICAg
ICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgorICAgICAg
ICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNz
ID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3Mg
OiBwb3N0SW5kZXhDYW5kaWRhdGVzLmdldChtZW1vcnkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGhhbmRsZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBoYW5kbGVkVmFsdWVzLmNvbnRhaW5z
KGFkZHJlc3MpIHx8ICFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc2Vy
dGlvbkluZGV4ID0gbWVtb3J5VG9JbmRleC5nZXQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICBW
YWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KGluc2Vy
dGlvbkluZGV4LCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnQoKSk7
CisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
PFZhbHVlPihpbnNlcnRpb25JbmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5j
aGlsZCgwKSwgbmV3T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0
aElkZW50aXR5KG5ld0FkZHJlc3MpOworCisgICAgICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5h
ZGQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICBoYW5kbGVkVmFsdWVzLmFkZChhZGRyZXNzKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfTsK
LQotICAgIGZvciAoYXV0byBwYWlyIDogcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcykgewotICAgICAg
ICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7Ci0gICAgICAgIFZhbHVlKiBhZGRyZXNz
ID0gcGFpci52YWx1ZTsKLSAgICAgICAgaWYgKGlnbm9yZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5
KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9sRXF1aXZhbGVu
dChtZW1vcnksIGFkZHJlc3MpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNl
dCkKLSAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gIG5ld01lbW9y
eSA9IExvYWQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uCi0gICAgICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAg
ICAgICBtZW1vcnkgPSBJZGVudGl0eShuZXdNZW1vcnkpCi0gICAgICAgIHVuc2lnbmVkIGluc2Vy
dGlvbkluZGV4ID0gdmFsdWVJbmRleEluQmFzaWNCbG9jayhhZGRyZXNzKSArIDE7Ci0gICAgICAg
IE1lbW9yeVZhbHVlKiBuZXdNZW1vcnkgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVl
PihpbnNlcnRpb25JbmRleCwgTG9hZCwgbWVtb3J5LT50eXBlKCksIGFkZHJlc3MtPm9yaWdpbigp
LCBtZW1vcnktPmxhc3RDaGlsZCgpKTsKLSAgICAgICAgbmV3TWVtb3J5LT5zZXRPZmZzZXQobWVt
b3J5LT5vZmZzZXQoKSk7Ci0gICAgICAgIG1lbW9yeS0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdN
ZW1vcnkpOwotICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShhZGRyZXNzLT5vd25lcik7Ci0K
LSAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKLSAgICAgICAgaWdub3JlZFZhbHVl
cy5hZGQoYWRkcmVzcyk7CisgICAgICAgIC8vIFRoaXMgd2lsbCByZXNldCB2YWx1ZXMnIGluZGV4
ZXMgaWYgdGhlcmUgYXJlIGFueSBpbnNlcnRpb25zLgorICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShiYXNpY0Jsb2NrKTsKICAgICB9CiAKLSAgICBhdXRvIGRldGVjdFBvc3RJbmRleCA9IFsm
XSAoY29uc3QgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4mIGNhbmRpZGF0ZXMpIHsKLSAg
ICAgICAgZm9yIChhdXRvIHBhaXIgOiBjYW5kaWRhdGVzKSB7Ci0gICAgICAgICAgICBNZW1vcnlW
YWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7Ci0gICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IHBh
aXIudmFsdWU7Ci0gICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkp
IHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50
KG1lbW9yeSwgYWRkcmVzcykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIGluc2VydGlvbkluZGV4ID0gdmFsdWVJbmRleEluQmFzaWNCbG9jayhtZW1v
cnkpOwotICAgICAgICAgICAgVmFsdWUqIG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8
Q29uc3Q2NFZhbHVlPihpbnNlcnRpb25JbmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+
Y2hpbGQoMSktPmFzSW50KCkpOwotICAgICAgICAgICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNl
cnRpb25TZXQuaW5zZXJ0PFZhbHVlPihpbnNlcnRpb25JbmRleCwgQWRkLCBtZW1vcnktPm9yaWdp
bigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAgIGFkZHJlc3Mt
PnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3QWRkcmVzcyk7Ci0gICAgICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZShtZW1vcnktPm93bmVyKTsKLQotICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5h
ZGQobWVtb3J5KTsKLSAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKLSAgICAvLyBt
ZW1vcnkgPSBMb2FkKGJhc2UsIDApICAgICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAw
KQotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gICAuLi4KLSAgICAv
LyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5
KG5ld0FkZHJlc3MpCi0gICAgZGV0ZWN0UG9zdEluZGV4KHBvc3RJbmRleExvYWRDYW5kaWRhdGVz
KTsKLQotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPZmZz
ZXQgPSBDb25zdGFudAotICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09mZnNldCkKLSAgICAvLyBtZW1vcnkgPSBTdG9y
ZSh2YWx1ZSwgYmFzZSwgMCkgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCi0g
ICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgotICAgIC8vIGFk
ZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3
QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCmluZGV4IGI5M2NlODE5YjFlM2ZhMTQwOWQwYjdjNzNiMDFjOGJmYjkxMTYzZTUuLjY2MmYz
MjM4MDVjY2Y3MzY3OGRkZTZmMTM5MzdkY2VlZDM3ZTQwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNHZW5lcmF0ZS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIGdlbmVyYXRlVG9B
aXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCiAgICAgbG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlv
bnMocHJvY2VkdXJlKTsKICAgICBsZWdhbGl6ZU1lbW9yeU9mZnNldHMocHJvY2VkdXJlKTsKICAg
ICBtb3ZlQ29uc3RhbnRzKHByb2NlZHVyZSk7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZUIzQ2Fub25p
Y2FsaXplUHJlUG9zdEluY3JlbWVudHMoKSAmJiBwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAyKQor
ICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAyKQogICAgICAgICBjYW5vbmljYWxpemVQ
cmVQb3N0SW5jcmVtZW50cyhwcm9jZWR1cmUpOwogICAgIGVsaW1pbmF0ZURlYWRDb2RlKHByb2Nl
ZHVyZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCmluZGV4IDQ2ZjQ0MGM1
MmZkNGUwY2U5ZGYwOTY1OThjZDVjYzA2ZjM5OTUxYTEuLmI4NGM4YTRkMzY0YmE4ODcwOGI4MDE5
NDhiM2M4MTU5YzI5ODQ3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaApA
QCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFZhbHVlS2V5KFZh
bHVlKiBjaGlsZCwgaW50NjRfdCB2YWx1ZSk7CisgICAgVmFsdWVLZXkoVmFsdWUqIGNoaWxkLCBp
bnQzMl90IG9mZnNldCk7CiAKICAgICBWYWx1ZUtleShLaW5kLCBUeXBlLCBWYWx1ZSogY2hpbGQp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGlu
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCmluZGV4
IGUxODY2MTk0OTI2MjE0MDY2ZmU4OWU1YzcxYjJkMDc3ODA1NDcwMWYuLjAwZWYwY2Y3NDJlNjhh
N2Y3ZTJlOWZmMjRmMjEwZjI5MGEyYTIxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlS2V5SW5saW5lcy5oCkBAIC0zMywxMiArMzMsMTQgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKLWlubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoVmFsdWUqIGNo
aWxkLCBpbnQ2NF90IHZhbHVlKQoraW5saW5lIFZhbHVlS2V5OjpWYWx1ZUtleShWYWx1ZSogY2hp
bGQsIGludDMyX3Qgb2Zmc2V0KQogewogICAgIG1fa2luZCA9IE9vcHM7CiAgICAgbV90eXBlID0g
Vm9pZDsKLSAgICB1LmluZGljZXNbMF0gPSBjaGlsZC0+aW5kZXgoKTsKLSAgICB1LnZhbHVlID0g
dmFsdWU7CisgICAgLy8gVGhlIG9ic2VydmF0aW9uIGlzIHRoYXQgd2hlbiBib3RoIGNoaWxkLT5p
bmRleCgpIGFuZCBvZmZzZXQgYXJlIDAncywKKyAgICAvLyBIYXNoTWFwIHdvdWxkIG5vdCBhY2Nl
cHQgdGhlIFZhbHVlS2V5LgorICAgIHUuaW5kaWNlc1swXSA9IGNoaWxkLT5pbmRleCgpICsgMTsK
KyAgICB1LmluZGljZXNbMV0gPSBvZmZzZXQgKyAxOwogfQogCiBpbmxpbmUgVmFsdWVLZXk6OlZh
bHVlS2V5KEtpbmQga2luZCwgVHlwZSB0eXBlLCBWYWx1ZSogY2hpbGQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmgKaW5kZXggZTE3MWFjZjU1ZTM2NzBmODkxZjE1YmE4ZjIwYzZjZGMxYzE4Njky
Zi4uOWQ3MmYyNDEwNjA3MTY4ZDYwNDdjOWE1Nzk3ODMzMjNjZmZjZTE5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE2NCw2ICsxMTY0LDcgQEAgdm9pZCBhZGRDb3B5VGVzdHMo
Y29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsK
IGJvb2wgc2hvdWxkUnVuKGNvbnN0IGNoYXIqIGZpbHRlciwgY29uc3QgY2hhciogdGVzdE5hbWUp
OwogCiB2b2lkIHRlc3RMb2FkUHJlSW5kZXgzMigpOwordm9pZCB0ZXN0TG9hZFdpdGhTdG9yZVBy
ZUluZGV4MzIoKTsKIHZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7CiB2b2lkIHRlc3RMb2FkUG9z
dEluZGV4MzIoKTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggMDgxN2Y2MTk3YmM1ODY5NmY5NDk3MmU4ZDYwNDlmZjIx
ZDIwMjcwOC4uM2Y4NTc5ODI4NTJmYTViZGQxN2I3NjUwOWJiZDAwYTIwOWU2MDI5NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0xMDIsNiArMTAyLDgzIEBAIHZvaWQg
dGVzdExvYWRQcmVJbmRleDMyKCkKICAgICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUs
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7CiB9CiAKK3ZvaWQgdGVzdExv
YWRXaXRoU3RvcmVQcmVJbmRleDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAx
LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDMyX3QqIHB0ciA9IG51bXM7
CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFy
aWFibGUoSW50MzIpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7
CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9
IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBz
aWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHBy
b2MsIE9yaWdpbigpLCBJbnQzMiwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBC
Mzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6
CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAx
MCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29w
VGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBw
KTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFi
b3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBG
cmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMgPSBwMiArIDEKKyAgICAvLyBVcHNpbG9uKHAz
LCBecDIpCisgICAgLy8gcDMnID0gJnAzCisgICAgLy8gc3RvcmUoNSwgcDMnKQorICAgIC8vIHIz
ID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAvLyBnb3RvIGxv
b3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQs
IE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9y
aWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIFZhbHVlKiBwM1ByaW1lID0gbG9vcEJv
ZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgT3BhcXVlLCBPcmlnaW4oKSwgcDMpOworICAgIGxv
b3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgbG9v
cEJvZHktPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA1KSwgcDNQcmlt
ZSk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExv
YWQsIEludDMyLCBPcmlnaW4oKSwgcDMpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlh
YmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHkt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxv
Y2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBwcm9jLnJlc2V0
UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOwor
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKCkgLT4gaW50MzJfdCB7CisgICAgICAgIGludDMyX3QgciA9IDA7CisgICAgICAgIHdoaWxl
IChyIDwgMTApIHsKKyAgICAgICAgICAgICorK3B0ciA9IDU7CisgICAgICAgICAgICByICs9ICpw
dHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VR
KGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVz
dCgpKTsKK30KKwogdm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKQogewogICAgIGlmIChPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTM0NCw2ICs0MjEsNyBAQCB2b2lkIHRlc3RT
dG9yZVByZUluZGV4MzIoKQogICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
IGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRd
ISIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lz
ZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJf
dCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0cik7CkBAIC0zNjgsNiArNDQ2LDkg
QEAgdm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCkKICAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKIAogICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzhdISIpOworCiAgICAgaW50cHRyX3QgcmVzID0g
aW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsK
ICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVt
c1syXSwgKnB0cik7CkBAIC0zOTYsNiArNDc3LDcgQEAgdm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgz
MigpCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQo
KSkKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjNCIpOworCiAgICAg
aW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0
cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHJlcyk7CiAg
ICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CkBAIC00MjMsNiArNTA1LDcgQEAgdm9pZCB0ZXN0U3Rv
cmVQb3N0SW5kZXg2NCgpCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAg
aWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAj
OCIpOworCiAgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lz
ZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKICAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRf
dCo+KHJlcyk7CiAgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CkBAIC00MDk3LDE3ICs0MTgwLDE1
IEBAIHZvaWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZm
ZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCA2MykpOwog
Ci0gICAgaWYgKE9wdGlvbnM6OnVzZUIzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoKSkg
ewotICAgICAgICBSVU4odGVzdExvYWRQcmVJbmRleDMyKCkpOwotICAgICAgICBSVU4odGVzdExv
YWRQcmVJbmRleDY0KCkpOwotICAgICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgzMigpKTsKLSAg
ICAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW5k
ZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9h
ZFBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkpOwogCi0gICAg
ICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDMyKCkpOwotICAgICAgICBSVU4odGVzdFN0b3JlUHJl
SW5kZXg2NCgpKTsKLSAgICAgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDMyKCkpOwotICAgICAg
ICBSVU4odGVzdFN0b3JlUG9zdEluZGV4NjQoKSk7Ci0gICAgfQorICAgIFJVTih0ZXN0U3RvcmVQ
cmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDY0KCkpOworICAgIFJVTih0
ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4NjQoKSk7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggMTcyMWUxNjViMWZmZWJiNGM2NjIyNGI0OGU1MTNk
NWM4NmYxZTNiMC4uMTljNTgyN2MzM2QwMjgzNmRmMDY1MTU0ZGQwMmFjYjA5ZTk1Y2VjNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC00MzcsNyAr
NDM3LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KFVuc2ln
bmVkLCBtYXhCM1RhaWxEdXBCbG9ja1NpemUsIDMsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
VW5zaWduZWQsIG1heEIzVGFpbER1cEJsb2NrU3VjY2Vzc29ycywgMywgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihCb29sLCB1c2VCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAotICAgIHYoQm9vbCwgdXNlQjNDYW5vbmljYWxpemVQcmVQb3N0SW5j
cmVtZW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KEJvb2wsIHVz
ZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdnaW5n
IHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihPcHRpb25TdHJpbmcsIGZ1bmN0aW9u
T3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBvdmVy
cmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwK
</data>
<flag name="review"
          id="459422"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436412</attachid>
            <date>2021-08-25 13:22:44 -0700</date>
            <delta_ts>2021-08-25 16:30:11 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-229175-20210825152242.patch</filename>
            <type>text/plain</type>
            <size>29411</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5jYzhmM2MyYTE0YjJjNDY3
NWU4ZThlNTgxNTdmMTlkM2QxNWM1ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NyBAQAorMjAyMS0wOC0yNSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgW0FSTTY0XSBGaXggcHJlLWluZGV4IGFkZHJlc3MgbW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0
aGUgY2Fub25pY2FsaXphdGlvbiBwaGFzZSBmb3IgcHJlL3Bvc3QtaW5jcmVtZW50IGFkZHJlc3Mg
bW9kZQorICAgICAgICBkdWUgdG8gdGhlIHBvdGVudGlhbCBidWdzIGNvbW1lbnRlZCBvbiBpbiB0
aGUgcHJldmlvdXMgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyODUzOC4gQW5kIHRoaXMgcGF0Y2ggcmVtb3ZlZCB0aGUgCisgICAgICAgIHRl
bXBvcmFyeSBmaXggaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
OTIxMS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgcHJlLWluZGV4IGFkZHJlc3MgbW9kZSBm
b3IgTG9hZCBpbnN0cnVjdGlvbiBjb252ZXJ0IHRoZSBwYXR0ZXJuIAorICAgICAgICB0byB0aGUg
Y2Fub25pY2FsIGZvcm0gbGlrZSB0aGlzOgorCisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAg
ICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNl
LCBvZmZzZXQpCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Li4uCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVtb3J5
ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIHdoaWNoIGlzIHdyb25nLiBBc3N1bWUg
Ii4uLiIgY29udGFpbnMgYSBzdG9yZSB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGFsaWFzZXMg
Zm9yIGFkZHJlc3M6CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAg
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAg
ICAgIFN0b3JlKHZhbHVlMSwgYWRkcmVzcykgICAgICAgICAgICBTdG9yZSh2YWx1ZTEsIGFkZHJl
c3MpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAgbWVtb3J5
ID0gSWRlbnRpdHkobmV3TWVtb3J5KQorCisgICAgICAgIFRoZSBsb2FkZWQgdmFsdWUgc2hvdWxk
IGFsd2F5cyBiZSB2YWx1ZTEgd2hpY2ggaXMgbm90IHRydWUgYWZ0ZXIgdGhlIGNvbnZlcnNpb24u
CisgICAgICAgIFNvLCBtb3ZpbmcgdGhlIGxvYWQgYWJvdmUgdGhlIHN0b3JlIGlzIHNlbWFudGlj
YWxseSBpbmNvcnJlY3QgYmVjYXVzZSBpdCdzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAgdGhl
IGJlaGF2aW9yIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBJbiB0aGlzIGNhc2UsIG1heWJlIHdl
IHNob3VsZCBhcHBseSBhbGlhcyBhbmFseXNpcyB0bworICAgICAgICBkZXRlY3QgdGhlIHZpb2xh
dGlvbnMgb2YgcmVmZXJlbmNlIHVwZGF0aW5nLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMgcHJv
YmxlbSwgd2UgbW92ZXMgdGhlIGFkZHJlc3MgdmFsdWUgdG8ganVzdCBiZWZvcmUgdGhlIG1lbW9y
eSB2YWx1ZSBpbnN0ZWFkIG9mCisgICAgICAgIG1vdmluZyBtZW1vcnkgdmFsdWUgdXB3YXJkLgor
CisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4IExvYWQgUGF0dGVybiB0byB0aGUgQ2Fub25pY2Fs
IEZvcm06CisKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAg
ICAgICAgICAgICAgYWRkcmVzcyA9IE5vcAorICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIC4uLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNl
LCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkgICAgICAg
ICAgICAtLT4gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLi4u
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAg
ICAgIHBhcmVudCA9IEIzT3Bjb2RlKGFkZHJlc3MsIC4uLikgICAgICAgICAgICAgICAgcGFyZW50
ID0gQjNPcGNvZGUobmV3QWRkcmVzcywgLi4uKQorCisgICAgICAgIENvbnZlcnQgUHJlLUluZGV4
IFN0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNhbCBGb3JtOgorCisgICAgICAgICAgICBhZGRy
ZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBOb3AK
KyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCisgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgbWVt
b3J5ID0gU3RvcmUodmFsdWUxLCBiYXNlLCBvZmZzZXQpICAgLS0+ICAgICBtZW1vcnkgPSBTdG9y
ZSh2YWx1ZTEsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBwYXJlbnQgPSBCM09w
Y29kZShhZGRyZXNzLCAuLi4pICAgICAgICAgICAgICAgIHBhcmVudCA9IEIzT3Bjb2RlKG5ld0Fk
ZHJlc3MsIC4uLikKKworICAgICAgICBUbyBtb3ZlIHRoZSBhZGRyZXNzIHZhbHVlIGRvd253YXJk
LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHVzZSByZWZlcmVuY2Ugb2YgYWRkcmVzcyBi
ZXR3ZWVuCisgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBtZW1vcnkgdmFsdWVzLgorCisgICAgICAg
ICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNHZW5l
cmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBi
My9CM1ZhbHVlS2V5Lmg6CisgICAgICAgICogYjMvQjNWYWx1ZUtleUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlS2V5OjpWYWx1ZUtleSk6CisgICAgICAgICogYjMvdGVzdGIzLmg6
CisgICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAodGVzdExvYWRXaXRoU3RvcmVQ
cmVJbmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4MzIpOgorICAgICAgICAodGVz
dFN0b3JlUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0U3RvcmVQb3N0SW5kZXgzMik6CisgICAg
ICAgICh0ZXN0U3RvcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChhZGRTaHJUZXN0cyk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorCiAyMDIxLTA4LTIyICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIGFscmVhZHktc2hp
cHBlZCB3YXNtIG9wdGlvbiBmbGFncwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCmluZGV4IGNlZGNi
ZjcwZTcwZjg0YzgwMGZhODljN2RkODFhNDNmODkyN2EyZTEuLmVlOGQzYTA0MWZiMzAyZmMxMTNm
YWU4YmNiOTU1M2IxM2ZlYWFlOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKQEAgLTUyLDY5
ICs1Miw1NyBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIHVuc2lnbmVkIGluZGV4IHsgMCB9OwogICAgIEluc2VydGlvblNldCBpbnNl
cnRpb25TZXQgeyBwcm9jIH07Ci0gICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25T
ZXQgeyBwcm9jIH07CiAKICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gcHJvYy5kb21pbmF0
b3JzKCk7CiAgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgYmFja3dhcmRzRG9taW5hdG9ycyA9IHBy
b2MuYmFja3dhcmRzRG9taW5hdG9ycygpOwogCi0gICAgSW5kZXhTZXQ8VmFsdWUqPiBpZ25vcmVk
VmFsdWVzOwotICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRv
TG9hZHM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhMb2FkQ2Fu
ZGlkYXRlczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhMb2Fk
Q2FuZGlkYXRlczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IGhhbmRsZWRWYWx1ZXM7CisgICAgSGFz
aE1hcDxWYWx1ZSosIHVuc2lnbmVkPiBtZW1vcnlUb0luZGV4OworICAgIEhhc2hNYXA8VmFsdWUq
LCBWZWN0b3I8VmFsdWUqPj4gYWRkVXNlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1l
bW9yeVZhbHVlKj4+IGJhc2VUb01lbW9yaWVzOwogICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3Rv
cjxWYWx1ZSo+PiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXM7Ci0KLSAgICBIYXNoTWFwPFZhbHVlKiwg
VmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb1N0b3JlczsKLSAgICBIYXNoTWFwPE1lbW9yeVZh
bHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXM7Ci0KLSAgICBhdXRvIHRyeUFk
ZFByZVBvc3RJbmRleENhbmRpZGF0ZSA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CisgICAgSGFzaE1h
cDxNZW1vcnlWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBwcmVJbmRleENhbmRpZGF0ZXM7CisgICAg
SGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+PiBwb3N0SW5kZXhDYW5kaWRhdGVz
OworICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEhhc2hTZXQ8TWVtb3J5VmFsdWUqPj4gYmxvY2tU
b1ByZVBvc3RJbmRleENhbmRpZGF0ZXM7CisKKyAgICAvLyBTdHJlbmd0aCBSZWR1Y3Rpb24gd2ls
bCBsZWF2ZSB0aGUgSVIgaW4gdGhlIGZvcm0gd2UncmUgbWF0Y2hpbmcgbm93LiAKKyAgICAvLyBJ
dCdsbCB0YWtlIGFuIGFkZCh4LCBjb25zdGFudCkgdGhhdCdzIGFuIGFkZHJlc3MgYW5kIG1vdmUg
dGhlIG9mZnNldCAKKyAgICAvLyBpbnRvIHRoZSBsb2FkIGl0c2VsZiwgYW5kIHRoYXQncyB3aHkg
d2UgY2FuIG1hdGNoIHRoaXMgcmVkdW5kYW5jeS4KKyAgICBhdXRvIHRyeUFkZENhbmRpZGF0ZXMg
PSBbJl0gKFZhbHVlKiB2YWx1ZSkgewogICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkg
ewotICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJu
OgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAg
ICAgICAgLy8gICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwg
b2Zmc2V0KQotICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgotICAgICAgICAgICAg
Ly8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKLSAgICAgICAgICAgIC8vICAgICAuLi4KLSAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAg
IGF1dG8gdHJ5QWRkcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcyA9IFsmXSAoKSB7Ci0gICAgICAgICAg
ICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKLSAg
ICAgICAgICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT50eXBl
KCkgIT0gSW50NjQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6
aXNWYWxpZEluY3JlbWVudEluZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9m
ZnNldGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0YXRpY19jYXN0PGludDY0X3Q+
KG1lbW9yeS0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlT2Zmc2V0
VG9BZGRyZXNzZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3MgOiBi
YXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCBhZGRyZXNzKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFzZVRvTG9hZHMuYWRk
KG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQobWVtb3J5KTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHRyeUFkZHBy
ZUluZGV4TG9hZENhbmRpZGF0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
KyAgICAgICAgY2FzZSBMb2FkOgogICAgICAgICBjYXNlIFN0b3JlOiB7Ci0gICAgICAgICAgICAv
LyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFz
ZSwgb2Zmc2V0KQotICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgotICAgICAgICAg
ICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQotICAgICAgICAgICAgLy8g
ICAgIC4uLgotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQot
ICAgICAgICAgICAgYXV0byB0cnlVcGRhdGVCYXNlVG9TdG9yZXMgPSBbJl0gKCkgewotICAgICAg
ICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQzMiAm
JiBtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0gSW50NjQpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+aGFzSW50KCkg
fHwgbWVtb3J5LT5vZmZzZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIGJhc2VUb1N0b3Jlcy5hZGQobWVtb3J5LT5jaGlsZCgxKSwgVmVjdG9yPE1lbW9y
eVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwotICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgdHJ5VXBkYXRlQmFzZVRvU3RvcmVzKCk7CisgICAgICAgICAgICBN
ZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICAg
ICAgVmFsdWUqIHR5cGUgPSB2YWx1ZS0+b3Bjb2RlKCkgPT0gTG9hZCA/IG1lbW9yeSA6IG1lbW9y
eS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBpZiAodHlwZS0+dHlwZSgpICE9IEludDMyICYmIHR5
cGUtPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChtZW1vcnktPm9mZnNldCgpKSB7CisgICAgICAgICAgICAgICAgLy8gUHJlLUluZGV4IExv
YWQvU3RvcmUgUGF0dGVybjoKKyAgICAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgICAg
IC8vICAgICBtZW1vcnkgPSBNZW1vcnlWYWx1ZShiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAg
ICAgVmFsdWVLZXkgYmFzZU9mZnNldEtleSA9IFZhbHVlS2V5KG1lbW9yeS0+bGFzdENoaWxkKCks
IG1lbW9yeS0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IGJhc2VPZmZz
ZXRUb0FkZHJlc3Nlcy5maW5kKGJhc2VPZmZzZXRLZXkpOworICAgICAgICAgICAgICAgIGlmIChp
dGVyID09IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IGl0ZXItPnZhbHVl
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBnb2FsIGlzIHRvIG1vdmUgdGhlIEFkZCB0
byB0aGlzIExvYWQvU3RvcmUuIFdlIG9ubHkgbW92ZSB0aGUgQWRkIHRvIHRoaXMgTWVtb3J5IHZh
bHVlCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGd1YXJhbnRlZSBpdCBkb21pbmF0ZXMg
YWxsIHVzZXMuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG90aGVyIHVzZXMgb2YgdGhlIEFkZCwgaXQg
Z3VhcmFudGVlcworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIE1lbW9yeSB2YWx1ZSBkb2Vz
bid0IGRvbWluYXRlIHRob3NlIHVzZXMuIFRoaXMgaXMgYmVjYXVzZSB3ZSdyZSB2aXNpdGluZyB0
aGUgcHJvZ3JhbSBpbiBwcmUtb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2Fs
LCBzbyB3ZSB2aXNpdCB0aGlzIE1lbW9yeSB2YWx1ZSBiZWZvcmUgYWxsIHRoZSB0aGluZ3MgaXQg
ZG9taW5hdGVzLiBTbyBpZiB0aGUgQWRkIGhhcyBvdGhlcgorICAgICAgICAgICAgICAgICAgICAv
LyB1c2Vycywgd2UgbXVzdCBub3QgZG9taW5hdGUgdGhvc2UgdXNlcnMuIFRoZXJlZm9yZSwgdGhp
cyBNZW1vcnlWYWx1ZSB3b24ndCBiZSBhIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgICAgICAgICAg
YXV0byBhZGRVc2VzSXRlciA9IGFkZFVzZXMuZmluZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFkZFVzZXNJdGVyICE9IGFkZFVzZXMuZW5kKCkgJiYgYWRkVXNlc0l0ZXItPnZh
bHVlLnNpemUoKSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gZG91YmxlIGNoZWNrIG9mZnNldHMgdG8gYXZvaWQgVmFsdWVLZXkg
Y29sbGlzaW9ucworICAgICAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSAhPSBz
dGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4oYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRy
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIHByZUluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBibG9ja1Rv
UHJlUG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LT5vd25lciwgSGFzaFNldDxNZW1vcnlW
YWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBiYXNlVG9NZW1vcmllcy5hZGQo
bWVtb3J5LT5sYXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgbWVtb3J5VG9JbmRleC5hZGQobWVtb3J5
LCBpbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMjIsMzggKzEx
MCw0NiBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJv
YykKICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAg
ICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOwogCi0gICAgICAgICAgICBhdXRvIHRy
eUFkZHBvc3RJbmRleENhbmRpZGF0ZXMgPSBbJl0gKCkgewotICAgICAgICAgICAgICAgIGlmICgh
cmlnaHQtPmhhc0ludFB0cigpIHx8IHZhbHVlLT50eXBlKCkgIT0gSW50NjQpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByaWdo
dC0+YXNJbnRQdHIoKTsKLSAgICAgICAgICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9m
ZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQpOwotICAgICAgICAg
ICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZEluY3JlbWVu
dEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMgYSB2YWxpZCBhZGRyZXNz
IGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0dGVybgotICAgICAgICAg
ICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShsZWZ0LCBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJhc2VPZmZzZXRUb0Fk
ZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUb0xvYWRzLmNvbnRh
aW5zKGxlZnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9y
eSA6IGJhc2VUb0xvYWRzLmdldChsZWZ0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RJ
bmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUb1N0b3Jlcy5jb250YWlucyhsZWZ0KSkgewotICAg
ICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9TdG9yZXMu
Z2V0KGxlZnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4U3RvcmVDYW5kaWRh
dGVzLmFkZChtZW1vcnksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
OworICAgICAgICAgICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAh
PSBJbnQ2NCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGludHB0cl90IG9m
ZnNldCA9IHJpZ2h0LT5hc0ludFB0cigpOworICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUg
c21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKKyAg
ICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNWYWxpZEluY3Jl
bWVudEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgIHRyeUFkZHBvc3RJbmRleENhbmRpZGF0ZXMoKTsKKyAgICAgICAgICAgIC8vIHNv
IGZhciB0aGlzIEFkZCB2YWx1ZSBpcyBhIHZhbGlkIGFkZHJlc3MgY2FuZGlkYXRlIGZvciBib3Ro
IHByZWZpeCBhbmQgcG9zdGZpeCBwYXR0ZXJuCisgICAgICAgICAgICBhZGRVc2VzLmFkZCh2YWx1
ZSwgVmVjdG9yPFZhbHVlKj4oKSk7CisgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0S2V5
ID0gVmFsdWVLZXkobGVmdCwgc21hbGxPZmZzZXQpOworICAgICAgICAgICAgYmFzZU9mZnNldFRv
QWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0S2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKHZhbHVlKTsKKworICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBMb2FkL1N0
b3JlIFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUoYmFz
ZSwgMCkKKyAgICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IGJhc2VUb01lbW9y
aWVzLmZpbmQobGVmdCk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBiYXNlVG9NZW1vcmllcy5l
bmQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAoTWVtb3J5VmFs
dWUqIG1lbW9yeSA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2Fu
ZGlkYXRlcy5hZGQobWVtb3J5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBibG9ja1RvUHJlUG9zdEluZGV4Q2FuZGlkYXRl
cy5hZGQobWVtb3J5LT5vd25lciwgSGFzaFNldDxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52
YWx1ZS5hZGQobWVtb3J5KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CisKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAg
ICAgICAgICAgYXV0byBpdGVyID0gYWRkVXNlcy5maW5kKGNoaWxkKTsKKyAgICAgICAgICAgIGlm
IChpdGVyICE9IGFkZFVzZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBw
ZW5kKHZhbHVlKTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJh
c2ljQmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICBmb3IgKGluZGV4
ID0gMDsgaW5kZXggPCBiYXNpY0Jsb2NrLT5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICB0
cnlBZGRQcmVQb3N0SW5kZXhDYW5kaWRhdGUoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKKyAgICAg
ICAgICAgIHRyeUFkZENhbmRpZGF0ZXMoYmFzaWNCbG9jay0+YXQoaW5kZXgpKTsKICAgICB9CiAK
ICAgICBhdXRvIGNvbnRyb2xFcXVpdmFsZW50ID0gWyZdIChWYWx1ZSogdjEsIFZhbHVlKiB2Mikg
LT4gYm9vbCB7CkBAIC0xNjEsNjggKzE1Nyw3NSBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJ
bmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRv
bWluYXRlcyh2Mi0+b3duZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21p
bmF0ZXModjEtPm93bmVyLCB2Mi0+b3duZXIpKTsKICAgICB9OwogCi0gICAgLy8gVGhpcyBzZWFy
Y2ggaXMgZXhwZW5zaXZlLiBIb3dldmVyLCBkdWUgdG8gdGhlIGdyZWVkeSBwYXR0ZXJuCi0gICAg
Ly8gbWF0Y2hpbmcsIG5vIGJldHRlciBtZXRob2QgY2FuIGJlIHByb3Bvc2VkIGF0IHByZXNlbnQu
Ci0gICAgYXV0byB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrID0gWyZdIChWYWx1ZSogdmFsdWUpIC0+
IHVuc2lnbmVkIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IHZhbHVlLT5vd25lcjsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChp
bmRleCkgPT0gdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9OwotCi0gICAgZm9yIChhdXRvIHBhaXIgOiBw
cmVJbmRleExvYWRDYW5kaWRhdGVzKSB7Ci0gICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBw
YWlyLmtleTsKLSAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwYWlyLnZhbHVlOwotICAgICAgICBp
ZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFp
bnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
ICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgICAgICAvLyAuLi4gICAgICAg
ICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0g
ICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KLSAgICAgICAg
Ly8gbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5l
d01lbW9yeSkKLSAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5C
YXNpY0Jsb2NrKGFkZHJlc3MpICsgMTsKLSAgICAgICAgTWVtb3J5VmFsdWUqIG5ld01lbW9yeSA9
IGluc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KGluc2VydGlvbkluZGV4LCBMb2FkLCBt
ZW1vcnktPnR5cGUoKSwgYWRkcmVzcy0+b3JpZ2luKCksIG1lbW9yeS0+bGFzdENoaWxkKCkpOwot
ICAgICAgICBuZXdNZW1vcnktPnNldE9mZnNldChtZW1vcnktPm9mZnNldCgpKTsKLSAgICAgICAg
bWVtb3J5LT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld01lbW9yeSk7Ci0gICAgICAgIGluc2VydGlv
blNldC5leGVjdXRlKGFkZHJlc3MtPm93bmVyKTsKLQotICAgICAgICBpZ25vcmVkVmFsdWVzLmFk
ZChtZW1vcnkpOwotICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKLSAgICB9Ci0K
LSAgICBhdXRvIGRldGVjdFBvc3RJbmRleCA9IFsmXSAoY29uc3QgSGFzaE1hcDxNZW1vcnlWYWx1
ZSosIFZhbHVlKj4mIGNhbmRpZGF0ZXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBjYW5k
aWRhdGVzKSB7Ci0gICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7Ci0g
ICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IHBhaXIudmFsdWU7Ci0gICAgICAgICAgICBpZiAo
aWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMo
YWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgZm9y
IChjb25zdCBhdXRvJiBwYWlyIDogYmxvY2tUb1ByZVBvc3RJbmRleENhbmRpZGF0ZXMpIHsKKyAg
ICAgICAgQmFzaWNCbG9jayogYmFzaWNCbG9jayA9IHBhaXIua2V5OworICAgICAgICBmb3IgKE1l
bW9yeVZhbHVlKiBtZW1vcnkgOiBwYWlyLnZhbHVlKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxl
ZFZhbHVlcy5jb250YWlucyhtZW1vcnkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxv
Y2sobWVtb3J5KTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFk
ZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNz
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5
LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7Ci0gICAgICAgICAgICBh
ZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOwotICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7Ci0KLSAgICAgICAgICAgIGlnbm9yZWRW
YWx1ZXMuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNz
KTsKKyAgICAgICAgICAgIC8vIENvbnZlcnQgUHJlLUluZGV4IExvYWQvU3RvcmUgUGF0dGVybiB0
byB0aGUgQ2Fub25pY2FsIEZvcm06CisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpICAgICAgICAgICAgICAgICAgICBhZGRyZXNzID0gTm9wCisgICAgICAgICAg
ICAvLyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Li4KKyAgICAgICAgICAgIC8vICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Ly8gICAgIG1lbW9yeSA9IE1lbW9yeVZhbHVlKGJhc2UsIG9mZnNldCkgICAgIC0tPiAgICAgbWVt
b3J5ID0gTWVtb3J5VmFsdWUoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIC4uLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAg
ICAvLyAgICAgcGFyZW50ID0gQjNPcGNvZGUoYWRkcmVzcywgLi4uKSAgICAgICAgICAgICAgICBw
YXJlbnQgPSBCM09wY29kZShuZXdBZGRyZXNzLCAuLi4pCisgICAgICAgICAgICBmb3IgKFZhbHVl
KiBhZGRyZXNzIDogcHJlSW5kZXhDYW5kaWRhdGVzLmdldChtZW1vcnkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGhhbmRsZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVp
dmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgYXV0byBkb21pbmF0ZXNBbGxBZGRVc2VzID0gWyZdICgpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBhZGRVc2VzLmZpbmQoYWRkcmVz
cyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IGFkZFVzZXMuZW5kKCkgJiYg
aXRlci0+dmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogcGFy
ZW50IDogaXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9taW5h
dG9ycy5kb21pbmF0ZXMobWVtb3J5LT5vd25lciwgcGFyZW50LT5vd25lcikpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgICAgICBpZiAoIWRvbWluYXRlc0FsbEFkZFVzZXMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRl
eCA9IG1lbW9yeVRvSW5kZXguZ2V0KG1lbW9yeSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5l
d0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihpbnNlcnRpb25JbmRleCwgQWRk
LCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgYWRkcmVzcy0+Y2hpbGQoMSkp
OworICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIHBhcmVudCA6IGFkZFVzZXMuZ2V0KGFkZHJl
c3MpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJl
bnQtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUq
JiBjaGlsZCA9IHBhcmVudC0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQgPT0gYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IG5l
d0FkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhOb3BJZ25vcmluZ1R5cGUoKTsKKworICAg
ICAgICAgICAgICAgIGhhbmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgICAgICAgICAg
aGFuZGxlZFZhbHVlcy5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIENvbnZlcnQgUG9zdC1JbmRleCBMb2FkL1N0b3JlIFBhdHRlcm4gdG8gdGhlIENhbm9uaWNh
bCBGb3JtOgorICAgICAgICAgICAgLy8gICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAorICAgICAgICAgICAgLy8gICAgIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG5ld09m
ZnNldCkKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBNZW1vcnlWYWx1ZShiYXNlLCAwKSAg
ICAgICAgbWVtb3J5ID0gTWVtb3J5VmFsdWUoYmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAgICAu
Li4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAgLi4uCisgICAgICAgICAgICAvLyAg
ICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0
eShuZXdBZGRyZXNzKQorICAgICAgICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IHBvc3RJbmRl
eENhbmRpZGF0ZXMuZ2V0KG1lbW9yeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZFZh
bHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRy
ZXNzKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IG1lbW9yeVRvSW5kZXguZ2V0KG1lbW9yeSk7CisgICAg
ICAgICAgICAgICAgVmFsdWUqIG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2
NFZhbHVlPihpbnNlcnRpb25JbmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQo
MSktPmFzSW50KCkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4o
KSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7CisgICAgICAgICAgICAgICAgYWRkcmVz
cy0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNzKTsKKworICAgICAgICAgICAgICAgIGhh
bmRsZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgaGFuZGxlZFZhbHVlcy5h
ZGQoYWRkcmVzcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9OworICAgICAgICAv
LyBBZnRlciB0aGlzIGV4ZWN1dGVzLCBtZW1vcnlUb0luZGV4IG5vIGxvbmdlciBjb250YWlucyB1
cCB0byBkYXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGJsb2NrLgorICAgICAgICAvLyBCdXQgdGhh
dCdzIG9rIGJlY2F1c2Ugd2UgbmV2ZXIgdG91Y2ggdGhpcyBibG9jayBhZ2Fpbi4KKyAgICAgICAg
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmFzaWNCbG9jayk7CisgICAgfQogCi0gICAgLy8gLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50Ci0gICAg
Ly8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQo
YmFzZSwgbmV3T2Zmc2V0KQotICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAgICAg
ICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCi0gICAgLy8gLi4uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0tPiAgIC4uLgotICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAg
ICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKLSAgICBkZXRlY3RQb3N0SW5k
ZXgocG9zdEluZGV4TG9hZENhbmRpZGF0ZXMpOwotCi0gICAgLy8gLi4uICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50Ci0gICAgLy8gLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zm
c2V0KQotICAgIC8vIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAgICBtZW1vcnkg
PSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKLSAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLS0+ICAgLi4uCi0gICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAg
ICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQotICAgIGRldGVjdFBvc3RJbmRleChw
b3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKaW5kZXggYjkzY2U4MTliMWUzZmExNDA5ZDBi
N2M3M2IwMWM4YmZiOTExNjNlNS4uNjYyZjMyMzgwNWNjZjczNjc4ZGRlNmYxMzkzN2RjZWVkMzdl
NDA5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcApAQCAtMTE4LDcg
KzExOCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSkKICAgICBs
b3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucyhwcm9jZWR1cmUpOwogICAgIGxlZ2FsaXplTWVt
b3J5T2Zmc2V0cyhwcm9jZWR1cmUpOwogICAgIG1vdmVDb25zdGFudHMocHJvY2VkdXJlKTsKLSAg
ICBpZiAoT3B0aW9uczo6dXNlQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cygpICYmIHBy
b2NlZHVyZS5vcHRMZXZlbCgpID49IDIpCisgICAgaWYgKHByb2NlZHVyZS5vcHRMZXZlbCgpID49
IDIpCiAgICAgICAgIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKHByb2NlZHVyZSk7CiAg
ICAgZWxpbWluYXRlRGVhZENvZGUocHJvY2VkdXJlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlS2V5LmgKaW5kZXggNDZmNDQwYzUyZmQ0ZTBjZTlkZjA5NjU5OGNkNWNjMDZmMzk5NTFh
MS4uYjg0YzhhNGQzNjRiYTg4NzA4YjgwMTk0OGIzYzgxNTljMjk4NDdlMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogCi0gICAgVmFsdWVLZXkoVmFsdWUqIGNoaWxkLCBpbnQ2NF90IHZhbHVlKTsKKyAg
ICBWYWx1ZUtleShWYWx1ZSogY2hpbGQsIGludDMyX3Qgb2Zmc2V0KTsKIAogICAgIFZhbHVlS2V5
KEtpbmQsIFR5cGUsIFZhbHVlKiBjaGlsZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVLZXlJbmxpbmVzLmgKaW5kZXggZTE4NjYxOTQ5MjYyMTQwNjZmZTg5ZTVjNzFiMmQw
Nzc4MDU0NzAxZi4uMDBlZjBjZjc0MmU2OGE3ZjdlMmU5ZmYyNGYyMTBmMjkwYTJhMjFlYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKQEAgLTMzLDEy
ICszMywxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotaW5saW5lIFZh
bHVlS2V5OjpWYWx1ZUtleShWYWx1ZSogY2hpbGQsIGludDY0X3QgdmFsdWUpCitpbmxpbmUgVmFs
dWVLZXk6OlZhbHVlS2V5KFZhbHVlKiBjaGlsZCwgaW50MzJfdCBvZmZzZXQpCiB7CiAgICAgbV9r
aW5kID0gT29wczsKICAgICBtX3R5cGUgPSBWb2lkOwotICAgIHUuaW5kaWNlc1swXSA9IGNoaWxk
LT5pbmRleCgpOwotICAgIHUudmFsdWUgPSB2YWx1ZTsKKyAgICAvLyBUaGUgb2JzZXJ2YXRpb24g
aXMgdGhhdCB3aGVuIGJvdGggY2hpbGQtPmluZGV4KCkgYW5kIG9mZnNldCBhcmUgMCdzLAorICAg
IC8vIEhhc2hNYXAgd291bGQgbm90IGFjY2VwdCB0aGUgVmFsdWVLZXkuCisgICAgdS5pbmRpY2Vz
WzBdID0gY2hpbGQtPmluZGV4KCkgKyAxOworICAgIHUuaW5kaWNlc1sxXSA9IG9mZnNldCArIDE7
CiB9CiAKIGlubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoS2luZCBraW5kLCBUeXBlIHR5cGUsIFZh
bHVlKiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCBlMTcxYWNmNTVlMzY3
MGY4OTFmMTViYThmMjBjNmNkYzFjMTg2OTJmLi45ZDcyZjI0MTA2MDcxNjhkNjA0N2M5YTU3OTc4
MzMyM2NmZmNlMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTY0LDYgKzEx
NjQsNyBAQCB2b2lkIGFkZENvcHlUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYpOwogYm9vbCBzaG91bGRSdW4oY29uc3QgY2hhciogZmls
dGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7CiAKIHZvaWQgdGVzdExvYWRQcmVJbmRleDMyKCk7
Cit2b2lkIHRlc3RMb2FkV2l0aFN0b3JlUHJlSW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFByZUlu
ZGV4NjQoKTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFBvc3RJ
bmRleDY0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCAwODE3ZjYx
OTdiYzU4Njk2Zjk0OTcyZThkNjA0OWZmMjFkMjAyNzA4Li4zZjg1Nzk4Mjg1MmZhNWJkZDE3Yjc2
NTA5YmJkMDBhMjA5ZTYwMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAK
QEAgLTEwMiw2ICsxMDIsODMgQEAgdm9pZCB0ZXN0TG9hZFByZUluZGV4MzIoKQogICAgIENIRUNL
X0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwg
dGVzdCgpKTsKIH0KIAordm9pZCB0ZXN0TG9hZFdpdGhTdG9yZVByZUluZGV4MzIoKQoreworICAg
IGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwIH07
CisgICAgaW50MzJfdCogcHRyID0gbnVtczsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFRl
c3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
IFZhcmlhYmxlKiByID0gcHJvYy5hZGRWYXJpYWJsZShJbnQzMik7CisgICAgVmFyaWFibGUqIHAg
PSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUm9vdF9CbG9jaworICAgIC8vIHIxID0gMAorICAgIC8vIFVwc2lsb24ocjEsIF5yMikKKyAg
ICAvLyBwMSA9IGFkZHIKKyAgICAvLyBVcHNpbG9uKHAxLCBecDIpCisgICAgVmFsdWUqIHIxID0g
cm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCAwKTsKKyAgICBy
b290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIs
IHIxKTsKKyAgICBWYWx1ZSogcDEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9UZXN0X0Jsb2NrCisgICAgLy8gbG9vcDoKKyAgICAvLyBwMiA9IFBoaSgpCisgICAgLy8gcjIg
PSBQaGkoKQorICAgIC8vIGlmIHIyID49IDEwIGdvdG8gZG9uZQorICAgIFZhbHVlKiByMiA9IGxv
b3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OkdldCwgT3JpZ2luKCks
IHIpOworICAgIFZhbHVlKiBwMiA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
cHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHApOworICAgIFZhbHVlKiBjb25kID0gbG9vcFRlc3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIHIyLCBsb29wVGVz
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwKSk7CisgICAgbG9v
cFRlc3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBjb25k
LCBGcmVxdWVudGVkQmxvY2soZG9uZSksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisg
ICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX0JvZHlfQmxvY2sKKyAgICAvLyBwMyA9
IHAyICsgMQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBwMycgPSAmcDMKKyAgICAv
LyBzdG9yZSg1LCBwMycpCisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisgICAgLy8gVXBzaWxv
bihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpKTsKKyAgICBsb29wQm9keS0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBwLCBwMyk7Cisg
ICAgVmFsdWUqIHAzUHJpbWUgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBPcGFx
dWUsIE9yaWdpbigpLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
cHJvYywgU3RvcmUsIE9yaWdpbigpLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDUpLCBwM1ByaW1lKTsKKyAgICBWYWx1ZSogcjMgPSBsb29wQm9keS0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwgbG9vcEJvZHktPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBwMykpOworICAg
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2lu
KCksIHIsIHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3QpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRG9uZV9CbG9jaworICAgIC8vIGRvbmU6CisgICAgLy8gcmV0dXJu
IHIyCisgICAgZG9uZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHIyKTsKKworICAgIHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICB2YWxpZGF0ZShw
cm9jKTsKKyAgICBmaXhTU0EocHJvYyk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQzMl90IHsKKyAgICAgICAgaW50
MzJfdCByID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkgeworICAgICAgICAgICAgKisrcHRy
ID0gNTsKKyAgICAgICAgICAgIHIgKz0gKnB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCiB2b2lkIHRlc3RMb2FkUHJlSW5k
ZXg2NCgpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQpAQCAt
MzQ0LDYgKzQyMSw3IEBAIHZvaWQgdGVzdFN0b3JlUHJlSW5kZXgzMigpCiAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjNF0hIik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZv
a2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAg
IHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzJd
LCAqcHRyKTsKQEAgLTM2OCw2ICs0NDYsOSBAQCB2b2lkIHRlc3RTdG9yZVByZUluZGV4NjQoKQog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBw
cmVJbmNyZW1lbnQpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
aWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjOF0h
Iik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90
Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKQEAgLTM5Niw2ICs0NzcsNyBA
QCB2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDMyKCkKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgIl0sICM0Iik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAgIHB0ciA9IGJpdHdp
c2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzFdLCA0KTsKQEAgLTQy
Myw2ICs1MDUsNyBAQCB2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDY0KCkKICAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7CisKICAgICBpbnRwdHJfdCByZXMgPSBpbnZv
a2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwogICAg
IHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKICAgICBDSEVDS19FUShudW1zWzFd
LCA0KTsKQEAgLTQwOTcsMTcgKzQxODAsMTUgQEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFy
KiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAg
UlVOKHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgMSkpOwogICAgIFJVTih0ZXN0WlNockFy
Z0ltbTMyKDB4ZmZmZmZmZmYsIDYzKSk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlQjNDYW5vbmlj
YWxpemVQcmVQb3N0SW5jcmVtZW50cygpKSB7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFByZUluZGV4
MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7Ci0gICAgICAgIFJVTih0
ZXN0TG9hZFBvc3RJbmRleDMyKCkpOwotICAgICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgp
KTsKKyAgICBSVU4odGVzdExvYWRQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0TG9hZFByZUlu
ZGV4NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RM
b2FkUG9zdEluZGV4NjQoKSk7CiAKLSAgICAgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4MzIoKSk7
Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDY0KCkpOwotICAgICAgICBSVU4odGVzdFN0
b3JlUG9zdEluZGV4MzIoKSk7Ci0gICAgICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpKTsK
LSAgICB9CisgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9y
ZVByZUluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDMyKCkpOworICAgIFJV
Tih0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCAxNzIx
ZTE2NWIxZmZlYmI0YzY2MjI0YjQ4ZTUxM2Q1Yzg2ZjFlM2IwLi4xOWM1ODI3YzMzZDAyODM2ZGYw
NjUxNTRkZDAyYWNiMDllOTVjZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnNMaXN0LmgKQEAgLTQzNyw3ICs0MzcsNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5
RmFzdE1lbW9yeSgpOwogICAgIHYoVW5zaWduZWQsIG1heEIzVGFpbER1cEJsb2NrU2l6ZSwgMywg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4QjNUYWlsRHVwQmxvY2tTdWNj
ZXNzb3JzLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZUIzSG9pc3RMb29w
SW52YXJpYW50VmFsdWVzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihCb29sLCB1
c2VCM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgXAogICAgIHYoQm9vbCwgdXNlRG9sbGFyVk0sIGZhbHNlLCBSZXN0cmljdGVkLCAi
aW5zdGFsbHMgdGhlICR2bSBkZWJ1Z2dpbmcgdG9vbCBpbiBnbG9iYWwgb2JqZWN0cyIpIFwKICAg
ICB2KE9wdGlvblN0cmluZywgZnVuY3Rpb25PdmVycmlkZXMsIG51bGxwdHIsIFJlc3RyaWN0ZWQs
ICJmaWxlIHdpdGggZGVidWdnaW5nIG92ZXJyaWRlcyBmb3IgZnVuY3Rpb24gYm9kaWVzIikgXAo=
</data>
<flag name="commit-queue"
          id="459470"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>