<?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>202503</bug_id>
          
          <creation_ts>2019-10-02 16:57:23 -0700</creation_ts>
          <short_desc>Throw away baseline code if there is an optimized replacement</short_desc>
          <delta_ts>2020-01-22 09:06:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=206244</see_also>
          <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>197993</dependson>
    
    <dependson>206278</dependson>
          <blocked>206094</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1576251</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-10-02 16:57:23 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576267</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-10-02 18:08:39 -0700</bug_when>
    <thetext>Some things to look out for:
- We could do this severing at GC finalization time (or on every Nth GC, or some other heuristic piggy backing on GC timing).
- If it&apos;s on the stack, we can&apos;t throw it away, at least not naively. We could make a GC managed stub. But it might be simplest to just skip tossing it away if it&apos;s on the stack and wait until next GC cycle.
- If an OSR exit has been wired to jump to baseline code, we can&apos;t throw it away, at least not naively. We could toss the OSR exit ramp code and rebuild it. Alternatively, we could just skip throwing away any such baseline code. It might be a good heuristic anyways to keep baseline code that&apos;s been existed to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576268</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-10-02 18:09:21 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #1)
&gt; Some things to look out for:
&gt; - We could do this severing at GC finalization time (or on every Nth GC, or
&gt; some other heuristic piggy backing on GC timing).
&gt; - If it&apos;s on the stack, we can&apos;t throw it away, at least not naively. We
&gt; could make a GC managed stub. But it might be simplest to just skip tossing
&gt; it away if it&apos;s on the stack and wait until next GC cycle.
&gt; - If an OSR exit has been wired to jump to baseline code, we can&apos;t throw it
&gt; away, at least not naively. We could toss the OSR exit ramp code and rebuild
&gt; it. Alternatively, we could just skip throwing away any such baseline code.
&gt; It might be a good heuristic anyways to keep baseline code that&apos;s been
&gt; existed to.

- We also need to unlink any incoming calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577602</commentid>
    <comment_count>3</comment_count>
      <attachid>380382</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-10-07 18:43:40 -0700</bug_when>
    <thetext>Created attachment 380382
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578065</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-10-08 19:57:33 -0700</bug_when>
    <thetext>perf seems neutral on Speedo2 and JS2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578943</commentid>
    <comment_count>5</comment_count>
      <attachid>380710</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-10-10 18:17:26 -0700</bug_when>
    <thetext>Created attachment 380710
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605450</commentid>
    <comment_count>6</comment_count>
      <attachid>387411</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-10 18:15:32 -0800</bug_when>
    <thetext>Created attachment 387411
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605979</commentid>
    <comment_count>7</comment_count>
      <attachid>387554</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-13 12:05:17 -0800</bug_when>
    <thetext>Created attachment 387554
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606036</commentid>
    <comment_count>8</comment_count>
      <attachid>387411</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-01-13 13:41:17 -0800</bug_when>
    <thetext>Comment on attachment 387411
patch

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

This patch looks reasonable to me, but I have no experience modifying the OSR code, so don&apos;t feel comfortable r+-ing it without someone else looking.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1396
&gt; +                if (size_t count = m_unlinkedCode-&gt;numberOfExceptionHandlers()) {

This &quot;if&quot; is not required, I think you can just do count = ...; for (...) {...}

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1620
&gt;          jitData-&gt;m_rareCaseProfiles.clear();

How is the choice of which fields of m_jitData to clear made?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:263
&gt; +    // guaranteed we haven&apos;t finalized a GC between calling this and its last use.

I think I kind of get what you mean, but the phrasing is weird.
In particular, the restriction is less on when you can call the function, and more on when you can last use its result, right?

&gt; Source/JavaScriptCore/heap/Heap.cpp:1523
&gt; +    finalizeUnconditionalFinalizers(); // We rely on this before running clearCurrentlyExecuting since CodeBlock&apos;s finalizer relies on querying currently executing.

&quot;before running&quot; -&gt; &quot;running before&quot;, at least if I understand things correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606072</commentid>
    <comment_count>9</comment_count>
      <attachid>387554</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-13 14:57:13 -0800</bug_when>
    <thetext>Comment on attachment 387554
patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        This patch&apos;s goal is to help us save JIT executable memory by throwing
&gt; +        away baseline code when it has an optimized replacement. To make it
&gt; +        easy to reason about, we do this when finalizing a GC, and when the
&gt; +        CodeBlock is not on the stack. When we do this, we throw away all JIT
&gt; +        data and unlink all incoming calls.

Nice.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1389
&gt; +    if (!Options::forceBaseline() &amp;&amp; jitType() == JITType::BaselineJIT &amp;&amp; !m_vm-&gt;heap.codeBlockSet().isCurrentlyExecuting(this)) {

Adding some comment about what it is doing would be nice, something like,

// If BaselineJIT code is not executed and optimized replacement exists, we attempt to make BaselineJIT CodeBlock back to LLInt CodeBlock to purge unused JIT code.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1390
&gt; +        if (CodeBlock* optimizedCodeBlock = optimizedReplacement()) {

Is it safe to call this in CodeBlock::finalizeUnconditionally while ExecutableToCodeBlockEdge::finalizeUnconditionally is not called yet?
Should we replace the order of finalizeUnconditionally between CodeBlock and ExecutableToCodeBlockEdge?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1391
&gt; +            if (!optimizedCodeBlock-&gt;m_osrExitCounter) {

This is heuristic like, &quot;If DFG / FTL OSR exit happens, we could recompile it so we keep Baseline JIT code&quot;, right?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1622
&gt; +        m_jitData = nullptr;

Nice. We can now purge JITData for CodeBlock by changing BaselineJIT -&gt; LLInt.

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:-2005
&gt; -    auto nextBytecode = codeBlock-&gt;jitCodeMap().find(nextBytecodeIndex);

I wonder if we can remove jitCodeMap completely, or shrink size of it by only recording some part of it (only recording op_loop_hint place). Can you file a bug and put FIXME to JITCodeMap.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606128</commentid>
    <comment_count>10</comment_count>
      <attachid>387411</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-13 16:17:46 -0800</bug_when>
    <thetext>Comment on attachment 387411
patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1396
&gt;&gt; +                if (size_t count = m_unlinkedCode-&gt;numberOfExceptionHandlers()) {
&gt; 
&gt; This &quot;if&quot; is not required, I think you can just do count = ...; for (...) {...}

will fix.

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1620
&gt;&gt;          jitData-&gt;m_rareCaseProfiles.clear();
&gt; 
&gt; How is the choice of which fields of m_jitData to clear made?

good call. I don&apos;t think this is needed anymore now that I&apos;m deleting m_jitData below. I can remove the clears here.

Unfortunately walking the StructureStubInfo is still needed above...

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:263
&gt;&gt; +    // guaranteed we haven&apos;t finalized a GC between calling this and its last use.
&gt; 
&gt; I think I kind of get what you mean, but the phrasing is weird.
&gt; In particular, the restriction is less on when you can call the function, and more on when you can last use its result, right?

Right, it&apos;s the result. I&apos;ll try to make it more clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606130</commentid>
    <comment_count>11</comment_count>
      <attachid>387554</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-13 16:27:08 -0800</bug_when>
    <thetext>Comment on attachment 387554
patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1389
&gt;&gt; +    if (!Options::forceBaseline() &amp;&amp; jitType() == JITType::BaselineJIT &amp;&amp; !m_vm-&gt;heap.codeBlockSet().isCurrentlyExecuting(this)) {
&gt; 
&gt; Adding some comment about what it is doing would be nice, something like,
&gt; 
&gt; // If BaselineJIT code is not executed and optimized replacement exists, we attempt to make BaselineJIT CodeBlock back to LLInt CodeBlock to purge unused JIT code.

will do

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1390
&gt;&gt; +        if (CodeBlock* optimizedCodeBlock = optimizedReplacement()) {
&gt; 
&gt; Is it safe to call this in CodeBlock::finalizeUnconditionally while ExecutableToCodeBlockEdge::finalizeUnconditionally is not called yet?
&gt; Should we replace the order of finalizeUnconditionally between CodeBlock and ExecutableToCodeBlockEdge?

I&apos;ve swapped the order to prevent the pathological perf issue that might happen

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1391
&gt;&gt; +            if (!optimizedCodeBlock-&gt;m_osrExitCounter) {
&gt; 
&gt; This is heuristic like, &quot;If DFG / FTL OSR exit happens, we could recompile it so we keep Baseline JIT code&quot;, right?

yeah, exactly

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1622
&gt;&gt; +        m_jitData = nullptr;
&gt; 
&gt; Nice. We can now purge JITData for CodeBlock by changing BaselineJIT -&gt; LLInt.

Yeah. I&apos;ve also removed a bunch of the clears() above since it&apos;s redundant with running the destructor for JITData

&gt;&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:-2005
&gt;&gt; -    auto nextBytecode = codeBlock-&gt;jitCodeMap().find(nextBytecodeIndex);
&gt; 
&gt; I wonder if we can remove jitCodeMap completely, or shrink size of it by only recording some part of it (only recording op_loop_hint place). Can you file a bug and put FIXME to JITCodeMap.h?

Good point. I&apos;ll add a FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606137</commentid>
    <comment_count>12</comment_count>
      <attachid>387591</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-13 16:39:57 -0800</bug_when>
    <thetext>Created attachment 387591
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606167</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-13 17:44:37 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/254480/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606169</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-13 17:45:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/58552041&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606797</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-14 21:59:18 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 206278</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609404</commentid>
    <comment_count>16</comment_count>
      <attachid>388382</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-21 17:29:35 -0800</bug_when>
    <thetext>Created attachment 388382
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609422</commentid>
    <comment_count>17</comment_count>
      <attachid>388386</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-21 18:15:52 -0800</bug_when>
    <thetext>Created attachment 388386
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609431</commentid>
    <comment_count>18</comment_count>
      <attachid>388386</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-21 19:17:58 -0800</bug_when>
    <thetext>Comment on attachment 388386
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609569</commentid>
    <comment_count>19</comment_count>
      <attachid>388386</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-22 09:06:37 -0800</bug_when>
    <thetext>Comment on attachment 388386
patch

Clearing flags on attachment: 388386

Committed r254926: &lt;https://trac.webkit.org/changeset/254926&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609570</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-22 09:06:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380382</attachid>
            <date>2019-10-07 18:43:40 -0700</date>
            <delta_ts>2019-10-10 18:17:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>70968</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTA3OTkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTEwLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEFsbG93IE9TUiBleGl0IHRvIHRoZSBMTEludAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3OTkzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVGFkZXUgWmFnYWxsby4KKworICAgICAgICAqIHN0cmVzcy9leGl0LWZyb20tZ2V0
dGVyLWJ5LXZhbC5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2V4aXQtZnJvbS1zZXR0ZXIt
YnktdmFsLmpzOiBBZGRlZC4KKwogMjAxOS0xMC0wNyAgTWF0dCBMZXdpcyAgPGpsZXdpczNAYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTA3NTAuCkluZGV4
OiBKU1Rlc3RzL3N0cmVzcy9leGl0LWZyb20tZ2V0dGVyLWJ5LXZhbC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9leGl0LWZyb20tZ2V0dGVyLWJ5LXZhbC5qcwkobm9uZXhpc3RlbnQp
CisrKyBKU1Rlc3RzL3N0cmVzcy9leGl0LWZyb20tZ2V0dGVyLWJ5LXZhbC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBmaWVsZCgpIHsgcmV0dXJuICJmIjsgfQor
bm9JbmxpbmUoZmllbGQpOworCisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7X2Y6NDJ9Owor
ICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZiAq
IDEwMDsgfSk7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSA1MDAwMDsKKyAgICBm
dW5jdGlvbiBmb28obykgeworICAgICAgICByZXR1cm4gb1tmaWVsZCgpXSArIDExOworICAgIH0K
KyAgICBub0lubGluZShmb28pOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgIHJlc3VsdCArPSBmb28obyk7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gbiAqICg0
MiAqIDEwMCArIDExKSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworICAgIG8uX2YgPSAxMDAwMDAwMDAwOworICAgIHJlc3VsdCA9IDA7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ICs9IGZvbyhvKTsKKyAgICB9
CisgICAgaWYgKHJlc3VsdCAhPSBuICogKDEwMDAwMDAwMDAgKiAxMDAgKyAxMSkpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMik6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvZXhpdC1mcm9tLXNldHRlci1ieS12YWwuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9zdHJlc3MvZXhpdC1mcm9tLXNldHRlci1ieS12YWwuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9zdHJlc3MvZXhpdC1mcm9tLXNldHRlci1ieS12YWwuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gZmllbGQoKSB7IHJldHVybiAiZiI7IH0KK25v
SW5saW5lKGZpZWxkKTsKKworKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge19mOjQyfTsKKyAg
ICBvLl9fZGVmaW5lU2V0dGVyX18oImYiLCBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLl9mID0gdmFs
dWUgKiAxMDA7IH0pOworICAgIHZhciBuID0gNTAwMDA7CisgICAgZnVuY3Rpb24gZm9vKG9fLCB2
XykgeworICAgICAgICBsZXQgZiA9IGZpZWxkKCk7CisgICAgICAgIHZhciBvID0gb19bZl07Cisg
ICAgICAgIHZhciB2ID0gdl9bZl07CisgICAgICAgIG9bZl0gPSB2OworICAgICAgICBvW2ZdID0g
diArIDE7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBuOyArK2kpIHsKKyAgICAgICAgZm9vKHtmOm99LCB7ZjoxMX0pOworICAgIH0KKyAgICBpZiAo
by5fZiAhPSAoMTEgKyAxKSAqIDEwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgby5fZjog
IiArIG8uX2Y7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZm9v
KHtmOm99LCB7ZjoxMDAwMDAwMDAwfSk7CisgICAgfQorICAgIGlmIChvLl9mICE9IDEwMCAqICgx
MDAwMDAwMDAwICsgMSkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIG8uX2YgKDIpOiAiICsg
by5fZjsKK30pKCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUw
Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDc1IEBACisyMDE5LTEwLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEFsbG93IE9TUiBleGl0IHRvIHRoZSBMTEludAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3OTkzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVGFkZXUgWmFnYWxsby4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IHNv
IHdlIGNhbiBPU1IgZXhpdCB0byB0aGUgTExJbnQuCisgICAgICAgIEhlcmUgYXJlIHRoZSBpbnRl
cmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzOgorICAgICAgICAKKyAgICAgICAgMS4gV2Ug
bm8gbG9uZ2VyIGJhc2VsaW5lIGNvbXBpbGUgZXZlcnl0aGluZyBpbiB0aGUgaW5saW5lIHN0YWNr
LgorICAgICAgICAKKyAgICAgICAgMi4gV2hlbiB0aGUgdG9wIGZyYW1lIGlzIGEgTExJbnQgZnJh
bWUsIHdlIGV4aXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgTExJbnQgYnl0ZWNvZGUu
IEhvd2V2ZXIsIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUgdGhlIExMSW50IHJlZ2lzdGVycworICAg
ICAgICBmb3IgUEMsIFBCLCBhbmQgbWV0YWRhdGEuCisgICAgICAgIAorICAgICAgICAzLiBXaGVu
IGRlYWxpbmcgd2l0aCBpbmxpbmUgY2FsbCBmcmFtZXMgd2hlcmUgdGhlIGNhbGxlciBpcyBMTElu
dCwgd2UKKyAgICAgICAgbmVlZCB0byByZXR1cm4gdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlLiBM
ZXQncyBjb25zaWRlciB3ZSdyZSBleGl0aW5nCisgICAgICAgIGF0IGEgcGxhY2UgQS0+QiAoQSBj
YWxscyBCKSwgd2hlcmUgQSBpcyBMTEludC4gSWYgQSBpcyBhIG5vcm1hbCBjYWxsLAorICAgICAg
ICB3ZSBwbGFjZSB0aGUgcmV0dXJuIFBDIGluIHRoZSBmcmFtZSB3ZSBtYXRlcmlhbGl6ZSB0byBC
IHRvIGJlIHJpZ2h0CisgICAgICAgIGFmdGVyIHRoZSBMTEludCdzIGlubGluZSBjYWNoZSBmb3Ig
Y2FsbHMuIElmIEEgaXMgYSB2YXJhcmdzIGNhbGwsIHdlIHBsYWNlCisgICAgICAgIGl0IGF0IHRo
ZSByZXR1cm4gbG9jYXRpb24gZm9yIHZhcmFyZyBjYWxscy4gVGhlIGludGVyZXN0aW5nIHNjZW5h
cmlvIGhlcmUKKyAgICAgICAgaXMgd2hlcmUgQSBpcyBhIGdldHRlci9zZXR0ZXIuIFRoaXMgbWVh
bnMgdGhhdCBBIG1pZ2h0IGJlIGdldF9ieV9pZCwKKyAgICAgICAgZ2V0X2J5X3ZhbCwgcHV0X2J5
X2lkLCBvciBwdXRfYnlfdmFsLiBTaW5jZSB0aGUgTExJbnQgZG9lcyBub3QgaGF2ZSBhbnkKKyAg
ICAgICAgZm9ybSBvZiBJQyBmb3IgZ2V0dGVycy9zZXR0ZXJzLCB3ZSBtYWtlIHRoaXMgd29yayBi
eSBjcmVhdGluZyBuZXcgTExJbnQKKyAgICAgICAgInJldHVybiBsb2NhdGlvbiIgc3R1YnMgZm9y
IHRoZXNlIG9wY29kZXMuCisgICAgICAgIAorICAgICAgICA0LiBXZSBuZWVkIHRvIHVwZGF0ZSB3
aGF0IGNhbGxlZSBzYXZlcyB3ZSBzdG9yZSBpbiB0aGUgY2FsbGVlIGlmIHRoZSBjYWxsZXIgZnJh
bWUKKyAgICAgICAgaXMgYSBMTEludCBmcmFtZS4gTGV0J3MgY29uc2lkZXIgYW4gaW5saW5lIHN0
YWNrIEEtPkItPkMsIHdoZXJlIEEgaXMgYSBMTEludCBmcmFtZS4KKyAgICAgICAgV2hlbiB3ZSBt
YXRlcmlhbGl6ZSB0aGUgc3RhY2sgZnJhbWUgZm9yIEIsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQg
dGhlIExMSW50IGNhbGxlZQorICAgICAgICBzYXZlcyB0aGF0IEEgdXNlcyBpcyBzdG9yZWQgaW50
byBCJ3MgcHJlc2VydmVkIGNhbGxlZSBzYXZlcy4gU3BlY2lmaWNhbGx5LCB0aGlzCisgICAgICAg
IGlzIGp1c3QgdGhlIFBCL21ldGFkYXRhIHJlZ2lzdGVycy4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBmaXhlcyBvZmZsaW5lYXNtJ3MgbWFjcm8gZXhwYW5zaW9uIHRvIGFsbG93
IHVzIHRvCisgICAgICAgIHVzZSBjb21wdXRlZCBsYWJlbCBuYW1lcyBmb3IgZ2xvYmFsIGxhYmVs
cy4KKyAgICAgICAgCisgICAgICAgIEluIGEgZnV0dXJlIGJ1ZywgSSdtIGdvaW5nIHRvIGludmVz
dGlnYXRlIHNvbWUga2luZCBvZiBjb250cm9sIHN5c3RlbSBmb3IKKyAgICAgICAgdGhyb3dpbmcg
YXdheSBiYXNlbGluZSBjb2RlIHdoZW4gd2UgdGllciB1cDoKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjUwMworCisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjptZXRhZGF0YVRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnN0cnVjdGlvbnNS
YXdQb2ludGVyKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5
SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rh
cmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdFN0YXRl
OjpPU1JFeGl0U3RhdGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6
REZHOjpjYWxsZWVTYXZlU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2Fs
bEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXRQcmVwYXJhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNvZGVP
cmlnaW5Gb3JPU1JFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdFByZXBh
cmF0aW9uLmg6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0
YS5oOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVB0cik6CisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
OgorICAgICAgICAqIG9mZmxpbmVhc20vYXNtLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vdHJh
bnNmb3JtLnJiOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKwogMjAxOS0xMC0w
NyAgTWF0dCBMZXdpcyAgPGpsZXdpczNAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyNTA3NTAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyNTA3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTM4Miw3ICszODIsNiBAQCBkZmcvREZHT1NSRXhpdEJhc2UuY3BwCiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAogZGZnL0RGR09TUkV4aXRGdXp6LmNwcAog
ZGZnL0RGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwCi1kZmcvREZHT1NSRXhpdFByZXBhcmF0
aW9uLmNwcAogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCiBkZmcvREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAKIGRmZy9ERkdPcGVyYXRpb25zLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAKIAkJMEYyMzVCRTAxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4
aXRDb21waWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMjM1QkUyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNDMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU4
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oICovOyB9OwotCQkwRjIzNUJFRTE3
MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi87IH07CiAJCTBGMjRFNTQxMTdFQTlGNTkwMEFC
QjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBl
cnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjI0RTU0MjE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcg
LyogQ0NhbGxIZWxwZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYyNEU1NDMxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNFMTdFQTlGNTkw
MEFCQjIxNyAvKiBGUFJJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTIyOTYsOCArMjI5NSw2IEBACiAJCTBGMjM1QkNDMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
VGh1bmtzLmg7IHBhdGggPSBmdGwvRlRMVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0QmFzZS5jcHA7IHBh
dGggPSBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjIzNUJFODE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdEJhc2UuaDsgcGF0aCA9IGRmZy9ERkdP
U1JFeGl0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjIzNUJFOTE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHA7IHBhdGggPSBk
ZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0UHJlcGFyYXRpb24uaDsg
cGF0aCA9IGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyNEU1M0IxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVycy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBc3NlbWJseUhlbHBlcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTUzQzE3RUE5RjU5MDBBQkIyMTcg
LyogQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFz
c2VtYmx5SGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTUzRDE3
RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Nzg3Miw4ICs3ODY5LDYgQEAKIAkJCQkwRjM5MkM4ODFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NS
RXhpdEZ1enouaCAqLywKIAkJCQkwRkVGQzlBNzE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhp
dEp1bXBQbGFjZWhvbGRlci5jcHAgKi8sCiAJCQkJMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8q
IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLywKLQkJCQkwRjIzNUJFOTE3MTc4RTczMDA2
OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCAqLywKLQkJCQkwRjIzNUJFQTE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8sCiAJCQkJMEY2MjM3OTUx
QUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgKi8sCiAJCQkJ
MEY2MjM3OTYxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oICov
LAogCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgKi8sCkBAIC05
MjM5LDcgKzkyMzQsNiBAQAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzkyQzhBMUI0NjE4ODQw
MDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIx
NjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkw
QUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgkocmV2aXNp
b24gMjUwNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5yYgkod29ya2luZyBjb3B5KQpAQCAtMTIzOCw1ICsxMjM4LDEzIEBAIG9wIDpsbGludF9uYXRp
dmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxs
X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBv
bGluZQogb3AgOmhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uCitvcCA6b3BfY2FsbF9yZXR1cm5fbG9j
YXRpb24KK29wIDpvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY2FsbF92YXJh
cmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19y
ZXR1cm5fbG9jYXRpb24KK29wIDpvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uCitvcCA6b3Bf
Z2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0
aW9uCitvcCA6b3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb24KIAogZW5kX3NlY3Rpb24gOk5h
dGl2ZUhlbHBlcnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAyNTA3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDYgKzI5Miw3IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJ
VENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2Up
CiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2lzUmVhY2hh
YmxlRnJvbU9TUkV4aXQoZmFsc2UpCiAgICAgLCBtX251bUNhbGxlZUxvY2FscyhvdGhlci5tX251
bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBt
X251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
CkBAIC0zNTEsNiArMzUyLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1
cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChm
YWxzZSkKKyAgICAsIG1faXNSZWFjaGFibGVGcm9tT1NSRXhpdChmYWxzZSkKICAgICAsIG1fbnVt
Q2FsbGVlTG9jYWxzKHVubGlua2VkQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKICAgICAs
IG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpKQogICAgICwgbV9oYXNEZWJ1
Z2dlclN0YXRlbWVudChmYWxzZSkKQEAgLTEzNzcsNiArMTM3OSw0NiBAQCB2b2lkIENvZGVCbG9j
azo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKIAogICAg
IHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmICghbV9p
c1JlYWNoYWJsZUZyb21PU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlz
KSkgeworICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6
ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+
bV9vc3JFeGl0Q291bnRlcikgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiVGhyb3dpbmcg
YXdheSBjb2RlYmxvY2s6ICIsIFJhd1BvaW50ZXIodGhpcykpOworICAgICAgICAgICAgICAgIHVu
bGlua0luY29taW5nQ2FsbHMoKTsKKworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5hYm91dFRvRGllKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby0+ZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1faml0RGF0YSA9IG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgICAgIGlmIChzaXpl
X3QgY291bnQgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7
CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5s
aW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdldCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+
IGNvZGVQdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPmlzV2lk
ZTMyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVB0ciA9IExMSW50OjpnZXRX
aWRlMzJDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcF9jYXRjaCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+aXNXaWRlMTYoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlUHRyID0gTExJbnQ6OmdldFdpZGUxNkNvZGVQdHI8Qnl0ZWNvZGVQ
dHJUYWc+KG9wX2NhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlUHRyID0gTExJbnQ6OmdldENvZGVQdHI8Qnl0ZWNvZGVQ
dHJUYWc+KG9wX2NhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlh
bGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KGNvZGVQdHIucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKSkpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
TExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7CisgICAgICAgICAgICAgICAgLy8gT09QUzogZml4
IHJlc2V0SklURGF0YT8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgog
ICAgIAogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAg
ICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwpAQCAtMTcyMCwxMCArMTc2MiwyNCBA
QCBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKIH0KIAogI2lmIEVOQUJM
RShKSVQpCi1ib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoSklUVHlwZSB0
eXBlVG9SZXBsYWNlKQorQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om9wdGltaXplZFJlcGxhY2VtZW50
KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSkKIHsKICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0g
dGhpcy0+cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gcmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6
aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50LT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOworICAg
IGlmICghcmVwbGFjZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChKSVRD
b2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQtPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSkp
CisgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Q29kZUJsb2NrKiBDb2RlQmxvY2s6Om9wdGltaXplZFJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1
cm4gb3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgpKTsKK30KKworYm9vbCBDb2RlQmxvY2s6
Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSkKK3sKKyAgICBy
ZXR1cm4gISFvcHRpbWl6ZWRSZXBsYWNlbWVudCh0eXBlVG9SZXBsYWNlKTsKIH0KIAogYm9vbCBD
b2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NDI2LDYgKzQyNiw4IEBAIHB1YmxpYzoKICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoKTsKICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxTdGF0
ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6Q2FwYWJpbGl0eUxldmVsPihtX2NhcGFiaWxp
dHlMZXZlbFN0YXRlKTsgfQogCisgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudChK
SVRUeXBlIHR5cGVUb1JlcGxhY2UpOworICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1l
bnQoKTsgLy8gdGhlIHR5cGVUb1JlcGxhY2UgaXMgbXkgSklUVHlwZQogICAgIGJvb2wgaGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoSklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKICAgICBib29sIGhhc09w
dGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15IEpJVFR5cGUK
ICNlbmRpZgpAQCAtODQzLDYgKzg0NSw4IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7
CiAKKyAgICBib29sIG1faXNSZWFjaGFibGVGcm9tT1NSRXhpdCA6IDE7CisKICAgICAvLyBJbnRl
cm5hbCBtZXRob2RzIGZvciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2
YXRlIGlmIGl0IHdhc24ndAogICAgIC8vIGZvciB0aGUgZmFjdCB0aGF0IHdlIHVzZSBpdCBmcm9t
IGFub255bW91cyBuYW1lc3BhY2VzLgogICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgp
OwpAQCAtODkyLDYgKzg5Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5tZXRhZGF0YVNpemVJbkJ5dGVzKCk7CiAgICAgfQogCisgICAgTWV0YWRhdGFUYWJsZSog
bWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KKyAgICBjb25zdCB2
b2lkKiBpbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnNSYXdQ
b2ludGVyOyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNo
ZXMoKTsKICNpZiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkocmV2aXNpb24gMjUwNzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDAsNyArMjQwLDcgQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JJbgogCiBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2spCiB7Ci0gICAgQVNTRVJUKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0Jh
c2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgYXV0byogaW5s
aW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA2LDYgKzMwNiwxNCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlE
CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CiAgICAg
Y2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBj
YXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3Ry
dWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0
X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwog
ICAgIH0KICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjUwNzk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NiBAQAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2lu
Y2x1ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgotI2luY2x1ZGUgIkRGR09TUkV4aXRQ
cmVwYXJhdGlvbi5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdT
cGVjdWxhdGl2ZUpJVC5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMzcyLDEx
ICszNzEsOCBAQCB2b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvCiAgICAg
ICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBjYWNoZWQgaW4gdGhlIE9TUkV4aXRTdGF0ZSByZWNvcmQg
Zm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0aGUKICAgICAgICAgLy8gZXhpdCByYW1wIGNvZGUuCiAK
LSAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYmFzZWxpbmUgY29kZUJsb2NrcyB0byBPU1IgZXhp
dCB0by4KLSAgICAgICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9j
b2RlT3JpZ2luKTsKLQogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAgICAgIEFTU0VSVChiYXNlbGluZUNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgQVNT
RVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KTsKIAogICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7CiAg
ICAgICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkgewpAQCAtNDA2LDEx
ICs0MDIsMTkgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjbwogICAg
ICAgICBhZGp1c3RlZFRocmVzaG9sZCA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7
CiAKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxp
bmVDb2RlQmxvY2spOwotICAgICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJs
b2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpOwotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7Ci0KLSAgICAg
ICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgp
IHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOworICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0OworICAgICAgICBpZiAoZXhpdFRvTExJbnQp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJl
bnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRl
Y29kZU9mZnNldCkucHRyKCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFn
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVN
YXAoKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVM
b2NhdGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkp
OworICAgICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CisgICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIH0KIAogICAg
ICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgogICAgICAgICBPcGVyYW5kczxW
YWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKQEAgLTQxOCw3ICs0MjIsNyBAQCB2b2lkIE9TUkV4aXQ6
OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvCiAgICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxl
RXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZn
SklUQ29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1bmRl
ZmluZWRPcGVyYW5kU3BhbnMpOwogICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0
ID0gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1v
bigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7CiAK
LSAgICAgICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4aXQs
IGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVmaW5l
ZE9wZXJhbmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRocmVz
aG9sZCwgYWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSkpOworICAg
ICAgICBleGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JFeGl0U3RhdGUoZXhpdCwgY29k
ZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdURk1vdmUodW5kZWZpbmVkT3Bl
cmFuZFNwYW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNldCwgYWN0aXZlVGhyZXNob2xk
LCBhZGp1c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQcm9maWxlLCBleGl0VG9MTElu
dCkpOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYg
Y29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikpIHsKICAgICAg
ICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0ubV9wZXJCeXRlY29kZVBy
b2ZpbGVyOwpAQCAtNDQ2LDcgKzQ1MCw3IEBAIHZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQo
Q29udGV4dCYgY28KIAogICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0
YXRlLmdldCgpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0U3RhdGUu
YmFzZWxpbmVDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBPcGVyYW5kczxW
YWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0U3RhdGUub3BlcmFuZHM7CiAgICAgVmVjdG9y
PFVuZGVmaW5lZE9wZXJhbmRTcGFuPiYgdW5kZWZpbmVkT3BlcmFuZFNwYW5zID0gZXhpdFN0YXRl
LnVuZGVmaW5lZE9wZXJhbmRTcGFuczsKQEAgLTc1Nyw3ICs3NjEsNyBAQCBzdGF0aWMgdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRlCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBs
ZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0CiAgICAg
Ly8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQob3V0ZXJtb3N0
QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Cisg
ICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG91dGVybW9zdEJhc2VsaW5lQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKICAgICBmcmFtZS5zZXRPcGVyYW5kPENvZGVCbG9jayo+KENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwogCiAgICAg
Y29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKQEAgLTc2OCw2ICs3NzIsOCBAQCBzdGF0aWMg
dm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRlCiAgICAgICAgIENvZGVPcmlnaW4qIHRy
dWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCZ0
cnVlQ2FsbGVyQ2FsbEtpbmQpOwogICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5mcCgp
OwogCisgICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZhbHNlOworCiAgICAgICAgIGlmICgh
dHJ1ZUNhbGxlcikgewogICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWls
KCkpOwogICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxG
cmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7CkBAIC03ODEsNDYgKzc4NywxNiBAQCBzdGF0aWMgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRlCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0
QmFzZWxpbmVDb2RlQmxvY2spOwogICAgICAgICAgICAgdW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5k
ZXggPSB0cnVlQ2FsbGVyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4ganVtcFRhcmdldDsKLQotICAgICAgICAgICAg
c3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2Fs
bEZyYW1lOjpDYWxsOgotICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVj
dDoKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKLSAgICAg
ICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOgotICAgICAgICAg
ICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlRhaWxDYWxsOgotICAgICAgICAgICAgY2FzZSBJbmxp
bmVDYWxsRnJhbWU6OlRhaWxDYWxsVmFyYXJnczogewotICAgICAgICAgICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2Rl
SW5kZXgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7Ci0K
LSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24oKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6Ci0gICAgICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDogewotICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkp
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKLQotICAgICAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwg
Y2FsbGVySXNMTEludCk7CiAKICAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxs
RnJhbWUoKSkKICAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGNwdS5mcDx1aW50OF90Kj4o
KSArIHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpLT5zdGFja09mZnNldCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CiAKLSAgICAgICAgICAgIHZvaWQqIHRhcmdldEFkZHJlc3MgPSBqdW1w
VGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAjaWYgQ1BVKEFSTTY0RSkKICAgICAgICAgICAg
IHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUt
PnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgdGFyZ2V0QWRk
cmVzcyA9IHJldGFnQ29kZVB0cih0YXJnZXRBZGRyZXNzLCBKU0ludGVybmFsUHRyVGFnLCBiaXR3
aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0g
dGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7
CiAjZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5y
ZXR1cm5QQ09mZnNldCgpLCB0YXJnZXRBZGRyZXNzKTsKKyAgICAgICAgICAgIGZyYW1lLnNldDx2
b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dm9pZCo+KGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJs
b2NrKTsKQEAgLTgzMCw2ICs4MDYsMTQgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDb250ZQogICAgICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFn
IHJlZ2lzdGVycyBhbHJlYWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFt
ZS4KICAgICAgICAgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29k
ZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0
cnVlQ2FsbGVyKTsKIAorICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgeworICAgICAgICAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2Vs
aW5lQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVl
U2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lz
dGVyczo6bWV0YWRhdGFUYWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+bWV0YWRhdGFUYWJsZSgpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgZnJh
bWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2Vs
aW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKKyNlbmRpZgorICAg
ICAgICB9CisKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQogICAg
ICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBBU1NF
UlQoY2FsbGVyRnJhbWUpOwpAQCAtODk0LDYgKzg3OCwyNCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoQ29udGV4CiAgICAgfQogCiAgICAgdm0udG9wQ2FsbEZyYW1lID0gY29u
dGV4dC5mcDxFeGVjU3RhdGUqPigpOworCisgICAgaWYgKGV4aXRTdGF0ZS0+aXNKdW1wVG9MTElu
dCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVC
bG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNl
bGluZUNvZGVCbG9jayk7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5t
X2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYg
Y3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0
KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKKworICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVn
aXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVC
bG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKKyAg
ICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGljX2Nhc3Q8
dWludHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworI2Vsc2UKKyAg
ICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oJmN1cnJlbnRJbnN0cnVjdGlvbik7CisjZW5kaWYKKworICAgICAgICBpZiAo
ZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKKyAgICAgICAgICAgIHZtLnRhcmdldEludGVycHJl
dGVyUENGb3JUaHJvdyA9ICZjdXJyZW50SW5zdHJ1Y3Rpb247CisgICAgfQorCiAgICAgY29udGV4
dC5wYygpID0gdW50YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGp1bXBUYXJnZXQpOwogfQogCkBA
IC0xMDUyLDggKzEwNTQsNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGlsZU9T
UkV4CiAgICAgQVNTRVJUKCF2bS5jYWxsRnJhbWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBH
ZW5lcmljVW53aW5kKTsKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29w
ZS5leGNlcHRpb24oKSB8fCAhZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSk7CiAgICAgCi0gICAg
cHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKLQog
ICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCiAgICAgT3BlcmFuZHM8VmFsdWVS
ZWNvdmVyeT4gb3BlcmFuZHM7CiAgICAgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT52YXJp
YWJsZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4s
IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1J
bmRleCwgb3BlcmFuZHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmgJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKIGVudW0g
Y2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOwogCiBzdHJ1Y3QgT1NSRXhpdFN0YXRlIDog
UmVmQ291bnRlZDxPU1JFeGl0U3RhdGU+IHsKLSAgICBPU1JFeGl0U3RhdGUoT1NSRXhpdEJhc2Um
IGV4aXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMsIFZlY3RvcjxVbmRlZmluZWRPcGVy
YW5kU3Bhbj4mJiB1bmRlZmluZWRPcGVyYW5kU3BhbnMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJl
Y292ZXJ5LCBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0LCBpbnQzMl90IGFjdGl2ZVRocmVz
aG9sZCwgZG91YmxlIG1lbW9yeVVzYWdlQWRqdXN0ZWRUaHJlc2hvbGQsIHZvaWQqIGp1bXBUYXJn
ZXQsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQorICAgIE9TUkV4aXRTdGF0ZShPU1JFeGl0
QmFzZSYgZXhpdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2ssIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgVmVjdG9yPFVuZGVmaW5l
ZE9wZXJhbmRTcGFuPiYmIHVuZGVmaW5lZE9wZXJhbmRTcGFucywgU3BlY3VsYXRpb25SZWNvdmVy
eSogcmVjb3ZlcnksIHB0cmRpZmZfdCBzdGFja1BvaW50ZXJPZmZzZXQsIGludDMyX3QgYWN0aXZl
VGhyZXNob2xkLCBkb3VibGUgbWVtb3J5VXNhZ2VBZGp1c3RlZFRocmVzaG9sZCwgdm9pZCoganVt
cFRhcmdldCwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIGJvb2wgaXNKdW1wVG9MTEludCkK
ICAgICAgICAgOiBleGl0KGV4aXQpCiAgICAgICAgICwgY29kZUJsb2NrKGNvZGVCbG9jaykKICAg
ICAgICAgLCBiYXNlbGluZUNvZGVCbG9jayhiYXNlbGluZUNvZGVCbG9jaykKQEAgLTExOCw2ICsx
MTgsNyBAQCBzdHJ1Y3QgT1NSRXhpdFN0YXRlIDogUmVmQ291bnRlZDxPU1JFeGl0CiAgICAgICAg
ICwgbWVtb3J5VXNhZ2VBZGp1c3RlZFRocmVzaG9sZChtZW1vcnlVc2FnZUFkanVzdGVkVGhyZXNo
b2xkKQogICAgICAgICAsIGp1bXBUYXJnZXQoanVtcFRhcmdldCkKICAgICAgICAgLCBhcnJheVBy
b2ZpbGUoYXJyYXlQcm9maWxlKQorICAgICAgICAsIGlzSnVtcFRvTExJbnQoaXNKdW1wVG9MTElu
dCkKICAgICB7IH0KIAogICAgIE9TUkV4aXRCYXNlJiBleGl0OwpAQCAtMTMxLDYgKzEzMiw3IEBA
IHN0cnVjdCBPU1JFeGl0U3RhdGUgOiBSZWZDb3VudGVkPE9TUkV4aXQKICAgICBkb3VibGUgbWVt
b3J5VXNhZ2VBZGp1c3RlZFRocmVzaG9sZDsKICAgICB2b2lkKiBqdW1wVGFyZ2V0OwogICAgIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlOworICAgIGJvb2wgaXNKdW1wVG9MTEludDsKIAogICAg
IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWw7CiAgICAg
UHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCB7IG51bGxwdHIgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDEz
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgogI2lu
Y2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTM2LDEyICsx
MzgsMTA1IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwKICAgICBk
b25lQWRqdXN0aW5nLmxpbmsoJmppdCk7CiB9CiAKK3ZvaWQqIGNhbGxlclJldHVyblBDKENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIHVuc2lnbmVkIGNhbGxCeXRlY29kZUlu
ZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kLCBib29sJiBjYWxs
ZXJJc0xMSW50KQoreworICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRU
b0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rOworCisgICAgdm9pZCoganVtcFRhcmdldDsKKworICAgIGlm
IChjYWxsZXJJc0xMSW50KSB7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjYWxsSW5zdHJ1
Y3Rpb24gPSAqYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9ucygpLmF0KGNh
bGxCeXRlY29kZUluZGV4KS5wdHIoKTsKKyNkZWZpbmUgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG5h
bWUpIChjYWxsSW5zdHJ1Y3Rpb24uaXNXaWRlMTYoKSA/IExMSW50OjpnZXRXaWRlMTZDb2RlUHRy
PE5vUHRyVGFnPihuYW1lIyNfcmV0dXJuX2xvY2F0aW9uKSA6IChjYWxsSW5zdHJ1Y3Rpb24uaXNX
aWRlMzIoKSA/IExMSW50OjpnZXRXaWRlMzJDb2RlUHRyPE5vUHRyVGFnPihuYW1lIyNfcmV0dXJu
X2xvY2F0aW9uKSA6IExMSW50OjpnZXRDb2RlUHRyPE5vUHRyVGFnPihuYW1lIyNfcmV0dXJuX2xv
Y2F0aW9uKSkpLmV4ZWN1dGFibGVBZGRyZXNzKCkKKworICAgICAgICBzd2l0Y2ggKHRydWVDYWxs
ZXJDYWxsS2luZCkgeworICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKKyAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoK
KyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3Ry
dWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6
Q2FsbFZhcmFyZ3M6CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRl
ckNhbGw6IHsKKyAgICAgICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBv
cF9nZXRfYnlfaWQpCisgICAgICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9M
T0NBVElPTihvcF9nZXRfYnlfaWQpOworICAgICAgICAgICAgZWxzZSBpZiAoY2FsbEluc3RydWN0
aW9uLm9wY29kZUlEKCkgPT0gb3BfZ2V0X2J5X3ZhbCkKKyAgICAgICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV92YWwpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6
U2V0dGVyQ2FsbDogeworICAgICAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgp
ID09IG9wX3B1dF9ieV9pZCkKKyAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVU
VVJOX0xPQ0FUSU9OKG9wX3B1dF9ieV9pZCk7CisgICAgICAgICAgICBlbHNlIGlmIChjYWxsSW5z
dHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKQorICAgICAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfcHV0X2J5X3ZhbCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyN1bmRlZiBM
TElOVF9SRVRVUk5fTE9DQVRJT04KKworICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAodHJ1
ZUNhbGxlckNhbGxLaW5kKSB7CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgor
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgorICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1l
OjpDb25zdHJ1Y3RWYXJhcmdzOiB7CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9CisgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKKworICAgICAgICAgICAganVtcFRhcmdl
dCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OlNldHRlckNhbGw6IHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9CisgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHVi
SW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mbyk7CisKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+
ZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBq
dW1wVGFyZ2V0OworfQorCitDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlU2F2ZVNsb3QoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2ssIEdQUlJlZyBjYWxsZWVTYXZlKQoreworICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBjYWxsZWVTYXZlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxlZVNhdmVzLT5zaXplKCk7IGkrKykg
eworICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwor
ICAgICAgICBpZiAoZW50cnkucmVnKCkgIT0gY2FsbGVlU2F2ZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCkub2Zmc2V0SW5CeXRlcygpICsgZW50cnkub2Zmc2V0KCkp
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
KTsKK30KKwogdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGxl
YXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVuIHBlcmZvcm1pbmcgYW4gT1NSIGV4aXQKICAgICAv
LyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUxMQotICAgIEFTU0VSVChqaXQuYmFzZWxp
bmVDb2RlQmxvY2soKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBB
U1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmpp
dFR5cGUoKSkpOwogICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcilDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAogICAgIGNvbnN0
IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CkBAIC0xNTIsNiArMjQ3LDggQEAgdm9pZCByZWlmeUlu
bGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBDb2RlT3JpZ2luKiB0cnVlQ2Fs
bGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygmdHJ1ZUNh
bGxlckNhbGxLaW5kKTsKICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXI7CiAKKyAgICAgICAgYm9vbCBjYWxsZXJJc0xMSW50ID0gZmFsc2U7
CisKICAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7CiAgICAgICAgICAgICBBU1NFUlQoaW5saW5l
Q2FsbEZyYW1lLT5pc1RhaWwoKSk7CiAgICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0
dXJuUENPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKQEAgLTE2NywzNiArMjY0LDcgQEAgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5i
YXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICB1bnNpZ25lZCBj
YWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAg
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBudWxscHRyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRy
dWVDYWxsZXJDYWxsS2luZCkgewotICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNh
bGw6Ci0gICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgotICAgICAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgotICAgICAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6VGFpbENhbGw6Ci0gICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFt
ZTo6VGFpbENhbGxWYXJhcmdzOiB7Ci0gICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gPQotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKLQotICAgICAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLnVu
dGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
Ci0gICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDogewotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9Ci0gICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8oQ29kZU9yaWdpbihj
YWxsQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvKTsKLQotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0
aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJ
bnQpOwogCiAgICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpIHsK
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKApAQCAtMjI3LDYgKzI5NSwxNCBAQCB2b2lkIHJl
aWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVy
ID8gQXNzZW1ibHlIZWxwZXJzOjpVc2VFeGlzdGluZ1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3Nl
bWJseUhlbHBlcnM6OkNvcHlCYXNlbGluZUNhbGxlZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFt
ZSwKICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKIAorICAgICAgICBpZiAoY2FsbGVySXNM
TEludCkgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJh
bWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BS
KSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxp
bmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSk7CisjZW5kaWYKKyAgICAgICAg
fQorCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAg
ICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTMw
MSwxMSArMzc3LDM1IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwK
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0g
Y29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgIEFTU0VSVChjb2RlQmxv
Y2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwotICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4
aXQtPmppdENvZGVNYXAoKS5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7
Ci0gICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOworCisgICAgdm9pZCoganVtcFRh
cmdldDsKKyAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTElu
dCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rOworICAgIGlmIChleGl0VG9MTEludCkgeworICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgaWYgKGV4
aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QyLCAmdm0udGFyZ2V0SW50
ZXJwcmV0ZXJQQ0ZvclRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkp
LCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2Nr
Rm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyNlbHNlCisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworI2VuZGlmCisgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0
aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29k
ZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7
CisKKyAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQogCi0gICAgdm9pZCoganVtcFRhcmdl
dCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6
OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAg
ICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQg
Y2FsbEZyYW1lRm9yQ2F0Y2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNl
Jik7CiB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NS
RXhpdEJhc2UmKTsKIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiwgQ0NhbGxIZWxwZXJz
JiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKK3ZvaWQqIGNhbGxlclJldHVyblBDKENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIHVuc2lnbmVkIGNhbGxCeXRlY29kZU9mZnNldCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kIGNhbGxlcktpbmQsIGJvb2wmIGNhbGxlcklzTExJbnQpOwor
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZVNhdmVTbG90KElubGluZUNhbGxGcmFtZSosIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIEdQUlJlZyBjYWxsZWVTYXZlKTsKIAogdGVtcGxh
dGUgPHR5cGVuYW1lIEpJVENvZGVUeXBlPgogdm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JF
eGl0Q29tcGlsZXJUaHVuayhNYWNyb0Fzc2VtYmxlciYgaml0LCBWTSYgdm0sIEpJVFR5cGUgaml0
VHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRQcmVwYXJhdGlvbi5jcHAJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDUz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlv
bi5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNp
bmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJKSVRDb2RlLmgiCi0jaW5jbHVkZSAiSklUV29ya2xp
c3QuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKLQotdm9pZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoRXhlY1N0YXRlKiBl
eGVjLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgCi0gICAgZm9yICg7IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSgpLT5kaXJlY3RDYWxsZXIpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKLSAg
ICAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGlsZU5vdyhjb2Rl
QmxvY2spOwotICAgIH0KLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdFByZXBhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaAkocmV2aXNpb24gMjUwNzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi0vLyBNYWtlIHN1cmUgYWxsIGNvZGUgb24gb3VyIGlubGluZSBz
dGFjayBpcyBKSVQgY29tcGlsZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IHNpbmNlCi0vLyB3ZSBtYXkg
b3B0IHRvIGlubGluZSBhIGNvZGUgYmxvY2sgZXZlbiBiZWZvcmUgaXQgaGFkIGV2ZXIgYmVlbiBj
b21waWxlZCBieSB0aGUKLS8vIEpJVCwgYnV0IG91ciBPU1IgZXhpdCBpbmZyYXN0cnVjdHVyZSBj
dXJyZW50bHkgb25seSB3b3JrcyBpZiB0aGUgdGFyZ2V0IG9mIHRoZQotLy8gT1NSIGV4aXQgaXMg
SklUIGNvZGUuIFRoaXMgY291bGQgYmUgY2hhbmdlZCBzaW5jZSB0aGVyZSBpcyBub3RoaW5nIHBh
cnRpY3VsYXJseQotLy8gaGFyZCBhYm91dCBkb2luZyBhbiBPU1IgZXhpdCBpbnRvIHRoZSBpbnRl
cnByZXRlciwgYnV0IGZvciBub3cgdGhpcyBzZWVtcyB0byBtYWtlCi0vLyBzZW5zZSBpbiB0aGF0
IGlmIHdlJ3JlIE9TUiBleGl0aW5nIGZyb20gaW5saW5lZCBjb2RlIG9mIGEgREZHIGNvZGUgYmxv
Y2ssIHRoZW4KLS8vIHByb2JhYmx5IGl0J3MgYSBnb29kIHNpZ24gdGhhdCB0aGUgdGhpbmcgd2Un
cmUgZXhpdGluZyBpbnRvIGlzIGhvdC4gRXZlbiBtb3JlCi0vLyBpbnRlcmVzdGluZ2x5LCBzaW5j
ZSB0aGUgY29kZSB3YXMgaW5saW5lZCwgaXQgbWF5IG5ldmVyIG90aGVyd2lzZSBnZXQgSklUCi0v
LyBjb21waWxlZCBzaW5jZSB0aGUgYWN0IG9mIGlubGluaW5nIGl0IG1heSBlbnN1cmUgdGhhdCBp
dCBvdGhlcndpc2UgbmV2ZXIgcnVucy4KLXZvaWQgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0
KEV4ZWNTdGF0ZSosIENvZGVPcmlnaW4pOwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0K
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAj
aW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhp
dFByZXBhcmF0aW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgog
I2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExMb2NhdGlvbi5oIgpAQCAtNTQ0
LDggKzU0Myw2IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBl
eGl0Lm1fY29kZU9yaWdpbik7Ci0KICAgICBjb21waWxlU3R1YihleGl0SUQsIGppdENvZGUsIGV4
aXQsICZ2bSwgY29kZUJsb2NrKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2
aXNpb24gMjUwNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTYgQEAgYm9vbCBDb2RlQmxvY2tTZXQ6
OmNvbnRhaW5zKGNvbnN0IEFic3RyYQogCiB2b2lkIENvZGVCbG9ja1NldDo6Y2xlYXJDdXJyZW50
bHlFeGVjdXRpbmcoKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAg
ICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwogfQogCitib29sIENvZGVCbG9ja1NldDo6
aXNDdXJyZW50bHlFeGVjdXRpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIHJldHVybiBtX2N1cnJlbnRseUV4ZWN1dGlu
Zy5jb250YWlucyhjb2RlQmxvY2spOworfQorCiB2b2lkIENvZGVCbG9ja1NldDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAyNTA3OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBB
YnN0cmFjdExvY2tlciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CiAgICAgTG9jayYgZ2V0
TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogCisgICAgYm9vbCBpc0N1cnJlbnRseUV4ZWN1dGlu
ZyhDb2RlQmxvY2sqKTsKKwogICAgIC8vIFZpc2l0cyBlYWNoIENvZGVCbG9jayBpbiB0aGUgaGVh
cCB1bnRpbCB0aGUgdmlzaXRvciBmdW5jdGlvbiByZXR1cm5zIHRydWUKICAgICAvLyB0byBpbmRp
Y2F0ZSB0aGF0IGl0IGlzIGRvbmUgaXRlcmF0aW5nLCBvciB1bnRpbCBldmVyeSBDb2RlQmxvY2sg
aGFzIGJlZW4KICAgICAvLyB2aXNpdGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE5LDcgKzE1MTksNyBAQCBORVZFUl9JTkxJTkUg
Ym9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vh
a0dDTWFwcygpOwogICAgIHN3ZWVwQXJyYXlCdWZmZXJzKCk7CiAgICAgc25hcHNob3RVbnN3ZXB0
KCk7Ci0gICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIGZpbmFsaXpl
VW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsgLy8gV2UgcmVseSBvbiB0aGlzIGJlZm9yZSBydW5u
aW5nIGNsZWFyQ3VycmVudGx5RXhlY3V0aW5nIHNpbmNlIENvZGVCbG9jaydzIGZpbmFsaXplciBy
ZWxpZXMgb24gcXVlcnlpbmcgY3VycmVudGx5IGV4ZWN1dGluZy4KICAgICByZW1vdmVEZWFkQ29t
cGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAgICBub3RpZnlJbmNyZW1lbnRhbFN3ZWVwZXIoKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDI1MDc5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
Mzk4LDYgKzM5OCw3IEBAIHB1YmxpYzoKIAogICAgIEhhc2hNYXA8SlNJbW11dGFibGVCdXR0ZXJm
bHkqLCBKU1N0cmluZyo+IGltbXV0YWJsZUJ1dHRlcmZseVRvU3RyaW5nQ2FjaGU7CiAKKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwogICAgIGZyaWVuZCBjbGFz
cyBDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
Niw2ICs2MzYsMTQgQEAgdm9pZCBkdW1wSklUTWVtb3J5KGNvbnN0IHZvaWQqIGRzdCwgY29ucwog
I2VuZGlmCiB9CiAKKy8vRXhlY3V0YWJsZU1lbW9yeUhhbmRsZTo6fkV4ZWN1dGFibGVNZW1vcnlI
YW5kbGUoKQorLy97CisvLyAgICAgICAgLy9PUF9JTlQzICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHhDQywKKy8vICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZUluQnl0ZXMoKTsgKytp
KSB7CisvLyAgICAgICAgc3RhcnQoKS51bnRhZ2dlZFB0cjxjaGFyKj4oKVtpXSA9IDB4Q0M7Cisv
LyAgICB9CisvL30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBqaXRBbGxvY2F0aW9uR3Jh
bnVsZSA9IDMyOwogCi10eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlOwordXNpbmcgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSA9IFdURjo6TWV0YUFs
bG9jYXRvckhhbmRsZTsKKy8vY2xhc3MgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSA6IHB1YmxpYyBX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGUgeworLy8gICAgfkV4ZWN1dGFibGVNZW1vcnlIYW5kbGUo
KTsKKy8vfTsKIAogY2xhc3MgRXhlY3V0YWJsZUFsbG9jYXRvckJhc2UgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuaAkocmV2aXNpb24gMjUwNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25j
ZQogCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgog
I2luY2x1ZGUgIk9wY29kZS5oIgpAQCAtMzIsNyArMzQsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIFZNOwotc3RydWN0IEluc3RydWN0aW9uOwogCiAjaWYgRU5BQkxFKENfTE9PUCkKIHR5
cGVkZWYgT3Bjb2RlSUQgTExJbnRDb2RlOwpAQCAtMTQ1LDYgKzE0NiwxNiBAQCBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+CiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+
CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldENvZGVQdHIoY29u
c3QgSW5zdHJ1Y3Rpb24mIGluc3RydWN0aW9uKQoreworICAgIGlmIChpbnN0cnVjdGlvbi5pc1dp
ZGUxNigpKQorICAgICAgICByZXR1cm4gZ2V0V2lkZTE2Q29kZVB0cjx0YWc+KGluc3RydWN0aW9u
Lm9wY29kZUlEKCkpOworICAgIGlmIChpbnN0cnVjdGlvbi5pc1dpZGUzMigpKQorICAgICAgICBy
ZXR1cm4gZ2V0V2lkZTMyQ29kZVB0cjx0YWc+KGluc3RydWN0aW9uLm9wY29kZUlEKCkpOworICAg
IHJldHVybiBnZXRDb2RlUHRyPHRhZz4oaW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSk7Cit9CisKK3Rl
bXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0
YWc+IGdldENvZGVSZWYoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2V0Q29kZVB0cjx0
YWc+KG9wY29kZUlEKSk7CkBAIC0xODQsNCArMTk1LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCog
Z2V0Q29kZVB0cihKU0M6OkVuY28KICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihnbHVl
SGVscGVyKTsKIH0KIAorI2lmIEVOQUJMRShKSVQpCitzdHJ1Y3QgUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIHBjR1BSID0gR1BSSW5mbzo6cmVnVDQ7CisKKyNpZiBDUFUoWDg2
XzY0KSAmJiAhT1MoV0lORE9XUykKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG1ldGFkYXRhVGFi
bGVHUFIgPSBHUFJJbmZvOjpyZWdDUzE7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYkdQUiA9
IEdQUkluZm86OnJlZ0NTMjsKKyNlbGlmIENQVShYODZfNjQpICYmIE9TKFdJTkRPV1MpCisgICAg
c3RhdGljIGNvbnN0IEdQUlJlZyBtZXRhZGF0YVRhYmxlR1BSID0gR1BSSW5mbzo6cmVnQ1MzOwor
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcGJHUFIgPSBHUFJJbmZvOjpyZWdDUzQ7CisjZWxpZiBD
UFUoQVJNNjQpCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBtZXRhZGF0YVRhYmxlR1BSID0gR1BS
SW5mbzo6cmVnQ1M2OworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcGJHUFIgPSBHUFJJbmZvOjpy
ZWdDUzc7CisjZWxpZiBDUFUoTUlQUykgfHwgQ1BVKEFSTV9USFVNQjIpCisgICAgc3RhdGljIGNv
bnN0IEdQUlJlZyBtZXRhZGF0YVRhYmxlR1BSID0gR1BSSW5mbzo6cmVnQ1MwOworI2VuZGlmCit9
OworI2VuZGlmCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20JKHJldmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzk4LDYgKzEz
OTgsMTMgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QgogLm9wR2V0
QnlJZFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2J5X2lkKQog
ICAgIGRpc3BhdGNoKCkKKworLm9zclJldHVyblBvaW50OgorICAgIGdldHRlclNldHRlck9TUkV4
aXRSZXR1cm5Qb2ludChvcF9nZXRfYnlfaWQsIHNpemUpCisgICAgbWV0YWRhdGEodDIsIHQzKQor
ICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWQsIHQyLCByMSwgcjApCisgICAgcmV0dXJuKHIxLCBy
MCkKKwogZW5kKQogCiAKQEAgLTE0NjAsNiArMTQ2NywxMSBAQCBsbGludE9wV2l0aE1ldGFkYXRh
KG9wX3B1dF9ieV9pZCwgT3BQdXRCCiAub3BQdXRCeUlkU2xvdzoKICAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfaWQpCiAgICAgZGlzcGF0Y2goKQorCisub3NyUmV0dXJu
UG9pbnQ6CisgICAgZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX3B1dF9ieV9pZCwg
c2l6ZSkKKyAgICBkaXNwYXRjaCgpCisKIGVuZCkKIAogCkBAIC0xNTExLDEwICsxNTIzLDE3IEBA
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKIC5vcEdldEJ5VmFsU2xv
dzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfYnlfdmFsKQogICAgIGRp
c3BhdGNoKCkKKworLm9zclJldHVyblBvaW50OgorICAgIGdldHRlclNldHRlck9TUkV4aXRSZXR1
cm5Qb2ludChvcF9nZXRfYnlfdmFsLCBzaXplKQorICAgIG1ldGFkYXRhKHQyLCB0MykKKyAgICB2
YWx1ZVByb2ZpbGUoT3BHZXRCeVZhbCwgdDIsIHIxLCByMCkKKyAgICByZXR1cm4ocjEsIHIwKQor
CiBlbmQpCiAKIAotbWFjcm8gcHV0QnlWYWxPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QpCitt
YWNybyBwdXRCeVZhbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgb3NyRXhpdFBvaW50KQog
ICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtYWNy
byBjb250aWd1b3VzUHV0QnlWYWwoc3RvcmVDYWxsYmFjaykKICAgICAgICAgICAgIGJpYWVxIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJs
aWNMZW5ndGhbdDBdLCAub3V0T2ZCb3VuZHMKQEAgLTE2MDIsMTMgKzE2MjEsMjAgQEAgbWFjcm8g
cHV0QnlWYWxPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1YwogICAgIC5vcFB1dEJ5VmFsU2xvdzoK
ICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfJW9wY29kZU5hbWUlKQogICAg
ICAgICBkaXNwYXRjaCgpCisKKyAgICAub3NyRXhpdFBvaW50OgorICAgICAgICBvc3JFeGl0UG9p
bnQoc2l6ZSwgZGlzcGF0Y2gpCiAgICAgZW5kKQogZW5kCiAKIAotcHV0QnlWYWxPcChwdXRfYnlf
dmFsLCBPcFB1dEJ5VmFsKQorcHV0QnlWYWxPcChwdXRfYnlfdmFsLCBPcFB1dEJ5VmFsLCBtYWNy
byAoc2l6ZSwgZGlzcGF0Y2gpCisub3NyUmV0dXJuUG9pbnQ6CisgICAgZ2V0dGVyU2V0dGVyT1NS
RXhpdFJldHVyblBvaW50KG9wX3B1dF9ieV92YWwsIHNpemUpCisgICAgZGlzcGF0Y2goKQorZW5k
KQogCi1wdXRCeVZhbE9wKHB1dF9ieV92YWxfZGlyZWN0LCBPcFB1dEJ5VmFsRGlyZWN0KQorcHV0
QnlWYWxPcChwdXRfYnlfdmFsX2RpcmVjdCwgT3BQdXRCeVZhbERpcmVjdCwgbWFjcm8gKGEsIGIp
IGVuZCkKIAogCiBtYWNybyBsbGludEp1bXBUcnVlT3JGYWxzZU9wKG9wY29kZU5hbWUsIG9wY29k
ZVN0cnVjdCwgY29uZGl0aW9uT3ApCkBAIC0xODc1LDEwICsxOTAxLDEwIEBAIG1hY3JvIGNvbW1v
bkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwKICAgICAgICAgc3RvcmVpIENlbGxUYWcsIENh
bGxlZSArIFRhZ09mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKICAgICAgICAgcHJlcGFy
ZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVD
b2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgY2FsbFRh
cmdldEZ1bmN0aW9uKHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50
cnlQdHJUYWcpCisgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBv
cGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExp
bmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQogCiAgICAgLm9w
Q2FsbFNsb3c6Ci0gICAgICAgIHNsb3dQYXRoRm9yQ2FsbChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRp
c3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgICAgIHNsb3dQYXRoRm9yQ2FsbChv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFy
ZUNhbGwpCiAgICAgZW5kKQogZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyNTA3OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMTMyNSw3ICsxMzI1LDYgQEAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9nZXRfYnlfaWRfZGlyZWN0LAogICAgIGRpc3BhdGNoKCkKIGVuZCkKIAotCiBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBtZXRhZGF0YSh0MiwgdDEpCiAgICAgbG9h
ZGIgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEubW9kZVt0Ml0sIHQxCkBAIC0x
Mzc2LDYgKzEzNzUsMTMgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0
QgogLm9wR2V0QnlJZFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0
X2J5X2lkKQogICAgIGRpc3BhdGNoKCkKKworLm9zclJldHVyblBvaW50OgorICAgIGdldHRlclNl
dHRlck9TUkV4aXRSZXR1cm5Qb2ludChvcF9nZXRfYnlfaWQsIHNpemUpCisgICAgbWV0YWRhdGEo
dDIsIHQzKQorICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWQsIHQyLCByMCkKKyAgICByZXR1cm4o
cjApCisKIGVuZCkKIAogCkBAIC0xNDQ4LDYgKzE0NTQsMTEgQEAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9wdXRfYnlfaWQsIE9wUHV0QgogLm9wUHV0QnlJZFNsb3c6CiAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfcHV0X2J5X2lkKQogICAgIGRpc3BhdGNoKCkKKworLm9zclJldHVy
blBvaW50OgorICAgIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChvcF9wdXRfYnlfaWQs
IHNpemUpCisgICAgZGlzcGF0Y2goKQorCiBlbmQpCiAKIApAQCAtMTYxOSwxMCArMTYzMCwxNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAub3BHZXRCeVZhbFNs
b3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2J5X3ZhbCkKICAgICBk
aXNwYXRjaCgpCisKKy5vc3JSZXR1cm5Qb2ludDoKKyAgICBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0
dXJuUG9pbnQob3BfZ2V0X2J5X3ZhbCwgc2l6ZSkKKyAgICBtZXRhZGF0YSh0NSwgdDIpCisgICAg
dmFsdWVQcm9maWxlKE9wR2V0QnlWYWwsIHQ1LCByMCkKKyAgICByZXR1cm4ocjApCisKIGVuZCkK
IAogCi1tYWNybyBwdXRCeVZhbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCkKK21hY3JvIHB1
dEJ5VmFsT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBvc3JFeGl0UG9pbnQpCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1hY3JvIGNvbnRp
Z3VvdXNQdXRCeVZhbChzdG9yZUNhbGxiYWNrKQogICAgICAgICAgICAgYmlhZXEgdDMsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0
aFt0MF0sIC5vdXRPZkJvdW5kcwpAQCAtMTcxMCwxMiArMTcyOCwxOSBAQCBtYWNybyBwdXRCeVZh
bE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjCiAgICAgLm9wUHV0QnlWYWxTbG93OgogICAgICAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUpCiAgICAgICAgIGRp
c3BhdGNoKCkKKworICAgICAgICBvc3JFeGl0UG9pbnQoc2l6ZSwgZGlzcGF0Y2gpCisgICAgICAg
IAogICAgIGVuZCkKIGVuZAogCi1wdXRCeVZhbE9wKHB1dF9ieV92YWwsIE9wUHV0QnlWYWwpCitw
dXRCeVZhbE9wKHB1dF9ieV92YWwsIE9wUHV0QnlWYWwsIG1hY3JvIChzaXplLCBkaXNwYXRjaCkK
Ky5vc3JSZXR1cm5Qb2ludDoKKyAgICBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3Bf
cHV0X2J5X3ZhbCwgc2l6ZSkKKyAgICBkaXNwYXRjaCgpCitlbmQpCiAKLXB1dEJ5VmFsT3AocHV0
X2J5X3ZhbF9kaXJlY3QsIE9wUHV0QnlWYWxEaXJlY3QpCitwdXRCeVZhbE9wKHB1dF9ieV92YWxf
ZGlyZWN0LCBPcFB1dEJ5VmFsRGlyZWN0LCBtYWNybyAoYSwgYikgZW5kKQogCiAKIG1hY3JvIGxs
aW50SnVtcFRydWVPckZhbHNlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBjb25kaXRpb25P
cCkKQEAgLTIwMDQsMTAgKzIwMjksMTAgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUs
IHNsb3dQYXRoLAogICAgICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zm
c2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVd
LCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24o
c2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNFbnRyeVB0clRhZykKKyAg
ICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwg
ZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNo
aW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQdHJUYWcpCiAKICAgICAub3BDYWxsU2xvdzoKLSAg
ICAgICAgc2xvd1BhdGhGb3JDYWxsKHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCkKKyAgICAgICAgc2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBl
bmQpCiBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjUwNzk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC05MjksMTIgKzkyOSwzMCBAQCBtYWNybyB0cmFjZUV4ZWN1dGlvbigpCiAgICAgZW5kCiBlbmQK
IAotbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gs
IGNhbGxlZSwgY2FsbFB0clRhZykKK21hY3JvIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcGNv
ZGVOYW1lLCBzaXplKQorICAgIG1hY3JvIGRlZmluZU5hcnJvdygpCisgICAgICAgIF8lb3Bjb2Rl
TmFtZSVfcmV0dXJuX2xvY2F0aW9uOgorICAgIGVuZAorCisgICAgbWFjcm8gZGVmaW5lV2lkZTE2
KCkKKyAgICAgICAgXyVvcGNvZGVOYW1lJV9yZXR1cm5fbG9jYXRpb25fd2lkZTE2OgorICAgIGVu
ZAorCisgICAgbWFjcm8gZGVmaW5lV2lkZTMyKCkKKyAgICAgICAgXyVvcGNvZGVOYW1lJV9yZXR1
cm5fbG9jYXRpb25fd2lkZTMyOgorICAgIGVuZAorCisgICAgc2l6ZShkZWZpbmVOYXJyb3csIGRl
ZmluZVdpZGUxNiwgZGVmaW5lV2lkZTMyLCBtYWNybyAoZikgZigpIGVuZCkKK2VuZAorCittYWNy
byBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNw
YXRjaCwgY2FsbGVlLCBjYWxsUHRyVGFnKQogICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCiAg
ICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gY2FsbGVlCiAgICAgZWxzZQogICAgICAgICBjYWxs
IGNhbGxlZSwgY2FsbFB0clRhZwogICAgIGVuZAorCisgICAgZGVmaW5lT1NSRXhpdFJldHVybkxh
YmVsKG9wY29kZU5hbWUsIHNpemUpCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgp
CiAgICAgZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKIGVu
ZApAQCAtMTAwNCw3ICsxMDIyLDcgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwg
dGVtcDEsIAogICAgIGptcCBjYWxsZWUsIGNhbGxQdHJUYWcKIGVuZAogCi1tYWNybyBzbG93UGF0
aEZvckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVD
YWxsKQorbWFjcm8gc2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVj
dCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBjYWxsQ2FsbFNsb3dQYXRo
KAogICAgICAgICBzbG93UGF0aCwKICAgICAgICAgIyBUaG9zZSBhcmUgcjAgYW5kIHIxCkBAIC0x
MDEzLDEwICsxMDMxLDE5IEBAIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChzaXplLCBvcGNvZGVTdHJ1
Y3QKICAgICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCiAgICAgICAgICAgICBwcmVw
YXJlQ2FsbChjYWxsZWUsIHQyLCB0MywgdDQsIFNsb3dQYXRoUHRyVGFnKQogICAgICAgICAuZG9u
dFVwZGF0ZVNQOgotICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHNpemUsIG9wY29kZVN0
cnVjdCwgZGlzcGF0Y2gsIGNhbGxlZSwgU2xvd1BhdGhQdHJUYWcpCisgICAgICAgICAgICBjYWxs
VGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgZGlz
cGF0Y2gsIGNhbGxlZSwgU2xvd1BhdGhQdHJUYWcpCiAgICAgICAgIGVuZCkKIGVuZAogCittYWNy
byBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXplKQorICAgIGNyYXNo
KCkgIyBXZSBkb24ndCByZWFjaCB0aGlzIGluIHN0cmFpZ2h0IGxpbmUgY29kZS4gV2Ugb25seSBy
ZWFjaCBpdCB2aWEgcmV0dXJuaW5nIHRvIHRoZSBjb2RlIGJlbG93IHdoZW4gcmVjb25zdHJ1Y3Rp
bmcgc3RhY2sgZnJhbWVzIGR1cmluZyBPU1IgZXhpdC4KKworICAgIGRlZmluZU9TUkV4aXRSZXR1
cm5MYWJlbChvcE5hbWUsIHNpemUpCisKKyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxs
KCkKKyAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCitlbmQKKwog
bWFjcm8gYXJyYXlQcm9maWxlKG9mZnNldCwgY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEs
IHNjcmF0Y2gpCiAgICAgY29uc3QgY2VsbCA9IGNlbGxBbmRJbmRleGluZ1R5cGUKICAgICBjb25z
dCBpbmRleGluZ1R5cGUgPSBjZWxsQW5kSW5kZXhpbmdUeXBlIApAQCAtMTc0MSw3ICsxNzY4LDcg
QEAgZW5kKQogY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFy
Q2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAotbWFjcm8gZG9DYWxsVmFyYXJn
cyhzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwg
cHJlcGFyZUNhbGwpCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
ICAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKICAgICBicmFuY2hJZkV4Y2VwdGlvbihf
bGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1l
IGluIHIxCkBAIC0xNzU2LDE5ICsxNzgzLDE5IEBAIG1hY3JvIGRvQ2FsbFZhcmFyZ3Moc2l6ZSwg
b3Bjb2RlU3RydWN0LCAKICAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXpl
LCBzcAogICAgICAgICBlbmQKICAgICBlbmQKLSAgICBzbG93UGF0aEZvckNhbGwoc2l6ZSwgb3Bj
b2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorICAgIHNsb3dQYXRo
Rm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBzbG93UGF0
aCwgcHJlcGFyZUNhbGwpCiBlbmQKIAogCiBsbGludE9wKG9wX2NhbGxfdmFyYXJncywgT3BDYWxs
VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZG9DYWxsVmFyYXJncyhz
aXplLCBPcENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1l
X2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclJl
Z3VsYXJDYWxsKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBzaXplLCBPcENh
bGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJh
cmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxs
KQogZW5kKQogCiBsbGludE9wKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJn
cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVw
aWxvZ3VlKCkKICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQg
b2YgcHJlcGFyaW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBm
b3IgYSBjYWxsIG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Moc2l6ZSwgT3BUYWlsQ2FsbFZhcmFy
Z3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9s
bGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCkKKyAg
ICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBzaXplLCBPcFRhaWxDYWxsVmFy
YXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywg
X2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclRhaWxDYWxsKQog
ZW5kKQogCiAKQEAgLTE3NzYsMTIgKzE4MDMsMTIgQEAgbGxpbnRPcChvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMsIAogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAg
IyBXZSBsaWUgYW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmluZyBp
dCBzaW5jZSB3ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBvcGNv
ZGUKLSAgICBkb0NhbGxWYXJhcmdzKHNpemUsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBk
aXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJkX2FyZ3VtZW50
cywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHByZXBhcmVG
b3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cywgc2l6ZSwgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIGRpc3BhdGNoLCBfbGxpbnRf
c2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19w
YXRoX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsKQogZW5k
KQogCiAKIGxsaW50T3Aob3BfY29uc3RydWN0X3ZhcmFyZ3MsIE9wQ29uc3RydWN0VmFyYXJncywg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZG9DYWxsVmFyYXJncyhzaXplLCBPcENv
bnN0cnVjdFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9y
X3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXpl
LCBPcENvbnN0cnVjdFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJh
bWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCkKIGVuZCkKIAogCkBAIC0xODIwLDYgKzE4NDcsNyBAQCBlbmQpCiAK
IF9sbGludF9vcF9jYWxsX2V2YWw6CiAgICAgc2xvd1BhdGhGb3JDYWxsKAorICAgICAgICBvcF9j
YWxsX2V2YWxfbmFycm93LAogICAgICAgICBuYXJyb3csCiAgICAgICAgIE9wQ2FsbEV2YWwsCiAg
ICAgICAgIG1hY3JvICgpIGRpc3BhdGNoT3AobmFycm93LCBvcF9jYWxsX2V2YWwpIGVuZCwKQEAg
LTE4MjgsNiArMTg1Niw3IEBAIF9sbGludF9vcF9jYWxsX2V2YWw6CiAKIF9sbGludF9vcF9jYWxs
X2V2YWxfd2lkZTE2OgogICAgIHNsb3dQYXRoRm9yQ2FsbCgKKyAgICAgICAgb3BfY2FsbF9ldmFs
X3dpZGUxNiwKICAgICAgICAgd2lkZTE2LAogICAgICAgICBPcENhbGxFdmFsLAogICAgICAgICBt
YWNybyAoKSBkaXNwYXRjaE9wKHdpZGUxNiwgb3BfY2FsbF9ldmFsKSBlbmQsCkBAIC0xODM2LDYg
KzE4NjUsNyBAQCBfbGxpbnRfb3BfY2FsbF9ldmFsX3dpZGUxNjoKIAogX2xsaW50X29wX2NhbGxf
ZXZhbF93aWRlMzI6CiAgICAgc2xvd1BhdGhGb3JDYWxsKAorICAgICAgICBvcF9jYWxsX2V2YWxf
d2lkZTMyLAogICAgICAgICB3aWRlMzIsCiAgICAgICAgIE9wQ2FsbEV2YWwsCiAgICAgICAgIG1h
Y3JvICgpIGRpc3BhdGNoT3Aod2lkZTMyLCBvcF9jYWxsX2V2YWwpIGVuZCwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FzbS5yYgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hc20ucmIJKHJldmlzaW9uIDI1MDc5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FzbS5yYgkod29ya2luZyBjb3B5KQpAQCAt
NDAxLDcgKzQwMSw3IEBAIEZpbGUub3BlbihvdXRwdXRGbG5tLCAidyIpIHsKICAgICAgICAgICAg
IGxvd0xldmVsQVNUID0gbG93TGV2ZWxBU1QucmVzb2x2ZShidWlsZE9mZnNldHNNYXAobG93TGV2
ZWxBU1QsIG9mZnNldHNMaXN0KSkKICAgICAgICAgICAgIGxvd0xldmVsQVNULnZhbGlkYXRlCiAg
ICAgICAgICAgICBlbWl0Q29kZUluQ29uZmlndXJhdGlvbihjb25jcmV0ZVNldHRpbmdzLCBsb3dM
ZXZlbEFTVCwgYmFja2VuZCkgewotICAgICAgICAgICAgICAgICAkY3VycmVudFNldHRpbmdzID0g
Y29uY3JldGVTZXR0aW5ncworICAgICAgICAgICAgICAgICRjdXJyZW50U2V0dGluZ3MgPSBjb25j
cmV0ZVNldHRpbmdzCiAgICAgICAgICAgICAgICAgJGFzbS5pbkFzbSB7CiAgICAgICAgICAgICAg
ICAgICAgIGxvd0xldmVsQVNULmxvd2VyKGJhY2tlbmQpCiAgICAgICAgICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vdHJhbnNmb3JtLnJiCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3RyYW5zZm9ybS5yYgkocmV2
aXNpb24gMjUwNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vdHJhbnNm
b3JtLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNyArMjU5LDEwIEBAIGNsYXNzIExhYmVsCiAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBMYWJlbC5mb3JOYW1lKGNvZGVPcmlnaW4sIG5hbWUsIEBkZWZpbmVk
SW5GaWxlKQorICAgICAgICAgICAgcmVzdWx0ID0gTGFiZWwuZm9yTmFtZShjb2RlT3JpZ2luLCBu
YW1lLCBAZGVmaW5lZEluRmlsZSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXRHbG9iYWwoKSBpZiBn
bG9iYWw/CisgICAgICAgICAgICByZXN1bHQuY2xlYXJFeHRlcm4gdW5sZXNzIGV4dGVybj8KKyAg
ICAgICAgICAgIHJlc3VsdAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZWxmCiAgICAgICAg
IGVuZApAQCAtMjcyLDcgKzI3NSwxMCBAQCBjbGFzcyBMYWJlbAogICAgICAgICAgICAgICAgIHJh
aXNlICJVbmtub3duIHZhcmlhYmxlIGAje3Zhci5vcmlnaW5hbE5hbWV9YCBpbiBzdWJzdGl0dXRp
b24gYXQgI3tjb2RlT3JpZ2lufSIgdW5sZXNzIG1hcHBpbmdbdmFyXQogICAgICAgICAgICAgICAg
IG1hcHBpbmdbdmFyXS5uYW1lCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBMYWJlbC5mb3JO
YW1lKGNvZGVPcmlnaW4sIG5hbWUsIEBkZWZpbmVkSW5GaWxlKQorICAgICAgICAgICAgcmVzdWx0
ID0gTGFiZWwuZm9yTmFtZShjb2RlT3JpZ2luLCBuYW1lLCBAZGVmaW5lZEluRmlsZSkKKyAgICAg
ICAgICAgIHJlc3VsdC5zZXRHbG9iYWwoKSBpZiBnbG9iYWw/CisgICAgICAgICAgICByZXN1bHQu
Y2xlYXJFeHRlcm4gdW5sZXNzIGV4dGVybj8KKyAgICAgICAgICAgIHJlc3VsdAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBzZWxmCiAgICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNTA3OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NjQsNiArNDY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihPcHRpb25TdHJpbmcsIGR1
bXBKSVRNZW1vcnlQYXRoLCBudWxscHRyLCBSZXN0cmljdGVkLCBudWxscHRyKSBcCiAgICAgdihE
b3VibGUsIGR1bXBKSVRNZW1vcnlGbHVzaEludGVydmFsLCAxMCwgUmVzdHJpY3RlZCwgIk1heGlt
dW0gdGltZSBpbiBiZXR3ZWVuIGZsdXNoZXMgb2YgdGhlIEpJVCBtZW1vcnkgZHVtcCBpbiBzZWNv
bmRzLiIpIFwKICAgICB2KEJvb2wsIHVzZVVubGlua2VkQ29kZUJsb2NrSmV0dGlzb25pbmcsIGZh
bHNlLCBOb3JtYWwsICJJZiB0cnVlLCBVbmxpbmtlZENvZGVCbG9jayBjYW4gYmUgamV0dGlzb25l
ZC4iKSBcCisgICAgdihCb29sLCBmb3JjZU9TUkV4aXRUb0xMSW50LCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgd2UgYWx3YXlzIGV4aXQgdG8gdGhlIExMSW50LiBJZiBmYWxzZSwgd2UgZXhpdCB0
byB3aGF0ZXZlciBpcyBtb3N0IGNvbnZlbmllbnQuIikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxl
bmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDI1MDc5OSkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw3ICs4NiwxMSBAQCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxs
b2NhdG9ySGFuZGxlCiBNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgp
CiB7CiAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKLSAgICBtX2FsbG9jYXRvci0+cmVsZWFzZSh0
aGlzKTsKKyAgICAvL21fYWxsb2NhdG9yLT5yZWxlYXNlKHRoaXMpOworICAgIC8vT1BfSU5UMyAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4Q0MsCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplSW5CeXRlcygpOyArK2kpIHsKKyAgICAgICAgc3RhcnQoKS51bnRhZ2dlZFB0cjxjaGFy
Kj4oKVtpXSA9IDB4Q0M7CisgICAgfQogfQogCiB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNo
cmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTA3OTkpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxOS0xMC0wNyAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBPU1IgZXhpdCB0byB0
aGUgTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5Nzk5MworCisgICAgICAgIFJldmlld2VkIGJ5IFRhZGV1IFphZ2FsbG8uCisKKyAgICAgICAg
KiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAyMDE5LTEwLTA3ICBNYXR0IExld2lz
ICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAgICAgICAgQnJpbmcgdXAgcXVldWVzIGZvciBDYXRh
bGluYQpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyNTA3OTkp
CisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBA
IC00OTUsNiArNDk1LDcgQEAgQjNPMV9PUFRJT05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEi
XQogQjNPMF9PUFRJT05TID0gWyItLW1heERGR05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFu
YWx5c2lzPTEwMCIsICItLWRlZmF1bHRCM09wdExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0t
dXNlRlRMSklUPXRydWUiXQogUFJPQkVfT1NSX0VYSVRfT1BUSU9OID0gWyItLXVzZVByb2JlT1NS
RXhpdD10cnVlIl0KK0ZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRU
b0xMSW50PXRydWUiXQogCiByZXF1aXJlX3JlbGF0aXZlICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3Mt
dGVzdC13cml0ZXItI3skdGVzdFdyaXRlcn0iCiAKQEAgLTcwOCw3ICs3MDksNyBAQCBkZWYgcnVu
RlRMTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJ
VEIzTzAoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0
LWIzbzAiLCAiLS11c2VBcnJheUFsbG9jYXRpb25Qcm9maWxpbmc9ZmFsc2UiLCAiLS1mb3JjZVBv
bHlQcm90bz10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIEIzTzBfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2pp
dC1iM28wIiwgIi0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZhbHNlIiwgIi0tZm9yY2VQ
b2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBCM08wX09Q
VElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKQpAQCAtNzI4LDcgKzcyOSw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JWYWxp
ZGF0aW9uKCpvcHRpb25hbFQKIGVuZAogCiBkZWYgcnVuREZHRWFnZXIoKm9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykKLSAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENP
TExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9P
UFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIFBST0JFX09TUl9FWElUX09Q
VElPTiArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykKQEAgLTc0NSw3ICs3NDYsNyBAQCBkZWYgcnVuRlRMRWFnZXJXYXRj
aGRvZygqb3B0aW9uYWxUZXN0U3BlCiBlbmQKIAogZGVmIHJ1bkZUTEVhZ2VyTm9DSklUVmFsaWRh
dGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1lYWdlci1uby1j
aml0IiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09M
TEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CisgICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdCIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICIt
LWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJ
T05TICsgRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBGT1JD
RV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5k
CiAKIGRlZiBydW5GVExFYWdlck5vQ0pJVEIzTzEoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380710</attachid>
            <date>2019-10-10 18:17:26 -0700</date>
            <delta_ts>2020-01-10 18:15:32 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>98813</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAyNTA4NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDYgKzI5Miw3IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9u
KGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hh
c0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2lzUmVhY2hhYmxlRnJvbU9TUkV4
aXQoZmFsc2UpCiAgICAgLCBtX251bUNhbGxlZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2Fs
cykKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCkBAIC0zNTEsNiAr
MzUyLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwg
bV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxh
dGlvbihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAs
IG1faXNSZWFjaGFibGVGcm9tT1NSRXhpdChmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxz
KHVubGlua2VkQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKICAgICAsIG1fbnVtVmFycyh1
bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpKQogICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVu
dChmYWxzZSkKQEAgLTQ0NSwxNCArNDQ3LDggQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8m
IHVubGlua2VkSGFuZGxlciA9IHVubGlua2VkQ29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkp
OwogICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVyc1tpXTsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0
KTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+
IGNvZGVQdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5pc1dpZGUzMigpKQot
ICAgICAgICAgICAgICAgICAgICBjb2RlUHRyID0gTExJbnQ6OmdldFdpZGUzMkNvZGVQdHI8Qnl0
ZWNvZGVQdHJUYWc+KG9wX2NhdGNoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVj
dGlvbi0+aXNXaWRlMTYoKSkKLSAgICAgICAgICAgICAgICAgICAgY29kZVB0ciA9IExMSW50Ojpn
ZXRXaWRlMTZDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcF9jYXRjaCk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjb2RlUHRyID0gTExJbnQ6OmdldENvZGVQdHI8
Qnl0ZWNvZGVQdHJUYWc+KG9wX2NhdGNoKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVj
dGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+IGNv
ZGVQdHIgPSBMTEludDo6Z2V0Q29kZVB0cjxCeXRlY29kZVB0clRhZz4oaW5zdHJ1Y3Rpb24pOwog
ICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVM
b2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGNvZGVQdHIucmV0YWdnZWQ8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4oKSkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBoYW5kbGVy
LmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyKTsKQEAgLTEzNzcsNiArMTM3Myw0MiBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgVU5VU0VEX1BBUkFNKHZt
KTsKIAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisKKyNpZiBFTkFCTEUoSklUKQorICAg
IGlmICghbV9pc1JlYWNoYWJsZUZyb21PU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1
dGluZyh0aGlzKSkgeworICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sg
PSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoIW9wdGltaXplZENv
ZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgeworICAgICAgICAgICAgICAgIC8vZGF0YUxvZ0xu
KCJUaHJvd2luZyBhd2F5IGNvZGVibG9jazogIiwgUmF3UG9pbnRlcih0aGlzKSk7CisgICAgICAg
ICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOworCisgICAgICAgICAgICAgICAgaWYgKGF1
dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPmFib3V0VG9EaWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gT09QUzogZml4IHJlc2V0
SklURGF0YT8KKworICAgICAgICAgICAgICAgIG1faml0RGF0YSA9IG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgICAgIGlmIChzaXpl
X3QgY291bnQgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7
CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5s
aW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0
cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCeXRlY29k
ZVB0clRhZz4gY29kZVB0ciA9IExMSW50OjpnZXRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihpbnN0
cnVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5s
aW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihj
b2RlUHRyLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIExMSW50Ojpz
ZXRFbnRyeXBvaW50KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisj
ZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUo
KSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTE3MjAsMTAgKzE3
NTIsMjQgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB9CiAKICNp
ZiBFTkFCTEUoSklUKQotYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJ
VFR5cGUgdHlwZVRvUmVwbGFjZSkKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpvcHRpbWl6ZWRSZXBs
YWNlbWVudChKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCiB7CiAgICAgQ29kZUJsb2NrKiByZXBsYWNl
bWVudCA9IHRoaXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuIHJlcGxhY2VtZW50ICYmIEpJ
VENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudC0+aml0VHlwZSgpLCB0eXBlVG9SZXBsYWNl
KTsKKyAgICBpZiAoIXJlcGxhY2VtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50LT5qaXRUeXBlKCksIHR5cGVUb1Jl
cGxhY2UpKQorICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpvcHRpbWl6ZWRSZXBsYWNlbWVudCgpCit7Cisg
ICAgcmV0dXJuIG9wdGltaXplZFJlcGxhY2VtZW50KGppdFR5cGUoKSk7Cit9CisKK2Jvb2wgQ29k
ZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7
CisgICAgcmV0dXJuICEhb3B0aW1pemVkUmVwbGFjZW1lbnQodHlwZVRvUmVwbGFjZSk7CiB9CiAK
IGJvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNTA4NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiw2ICs0MjYsOCBAQCBwdWJsaWM6CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwg
Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxl
dmVsU3RhdGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkNhcGFiaWxpdHlMZXZlbD4obV9j
YXBhYmlsaXR5TGV2ZWxTdGF0ZSk7IH0KIAorICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFj
ZW1lbnQoSklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKKyAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJl
cGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15IEpJVFR5cGUKICAgICBib29s
IGhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CiAgICAgYm9v
bCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBK
SVRUeXBlCiAjZW5kaWYKQEAgLTg0Myw2ICs4NDUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2Rp
ZEZhaWxGVExDb21waWxhdGlvbiA6IDE7CiAgICAgYm9vbCBtX2hhc0JlZW5Db21waWxlZFdpdGhG
VEwgOiAxOwogCisgICAgYm9vbCBtX2lzUmVhY2hhYmxlRnJvbU9TUkV4aXQgOiAxOworCiAgICAg
Ly8gSW50ZXJuYWwgbWV0aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQg
YmUgcHJpdmF0ZSBpZiBpdCB3YXNuJ3QKICAgICAvLyBmb3IgdGhlIGZhY3QgdGhhdCB3ZSB1c2Ug
aXQgZnJvbSBhbm9ueW1vdXMgbmFtZXNwYWNlcy4KICAgICB2b2lkIGJlZ2luVmFsaWRhdGlvbkRp
ZEZhaWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHJldmlzaW9uIDI1MDg1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1Miw5ICsyMDUyLDkgQEAg
cHJpdmF0ZToKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdDsKICAgICAgICAgaWYg
KG1fbm9kZS0+b3AoKSA9PSBUb09iamVjdCkgewogICAgICAgICAgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwot
ICAgICAgICAgICAgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJh
dGlvblRvT2JqZWN0LCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFs
dWUsIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKV0pKSk7CisgICAgICAgICAgICBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRvT2JqZWN0KSwgbV9jYWxs
RnJhbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlLCBtX291dC5jb25zdEludFB0
cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKSkpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1D
YWxsKEludDY0LCBvcGVyYXRpb25DYWxsT2JqZWN0Q29uc3RydWN0b3IsIG1fY2FsbEZyYW1lLCBm
cm96ZW5Qb2ludGVyKG1fbm9kZS0+Y2VsbE9wZXJhbmQoKSksIHZhbHVlKSk7CisgICAgICAgICAg
ICBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbkNhbGxPYmplY3RDb25zdHJ1Y3RvciksIG1fY2FsbEZyYW1lLCBmcm96ZW5Qb2lu
dGVyKG1fbm9kZS0+Y2VsbE9wZXJhbmQoKSksIHZhbHVlKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKQEAgLTIwODcsNyArMjA4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzOwogICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgdm1DYWxsKEludDY0
LCBmdW5jdGlvbiwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CisgICAgICAgICAgICB2bUNhbGwoSW50
NjQsIG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOwogICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTIxMDAsNyArMjEwMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0JpZ0ludChtX25vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0JpZ0ludChtX25vZGUtPmNoaWxk
MigpKTsKIAotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgp
LCBvcGVyYXRpb25BZGRCaWdJbnQsIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCk7CisgICAgICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25BZGRCaWdJbnQpLCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOwogICAgICAg
ICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC0yMTE5LDcgKzIxMTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQg
PSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQg
PSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uU3ViQmlnSW50
LCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3ViQmlnSW50
KSwgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjEzOCw3ICsyMTM4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93QmlnSW50KG1fbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93QmlnSW50KG1fbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1D
YWxsKEludDY0LCBvcGVyYXRpb25NdWxCaWdJbnQsIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uTXVsQmlnSW50KSwgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKICAgICAg
ICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMjMzOCwxMyArMjMzOCwxMyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgcmVzdWx0
OwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDMoKSkgewogICAgICAgICAgICAgcmVzdWx0ID0g
dm1DYWxsKAotICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25TdHJDYXQzLCBtX2NhbGxG
cmFtZSwKKyAgICAgICAgICAgICAgICBJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0
ckNhdDMpLCBtX2NhbGxGcmFtZSwKICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCiAgICAgICAgICAgICAgICAgbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pLAogICAg
ICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSB2bUNh
bGwoCi0gICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvblN0ckNhdDIsIG1fY2FsbEZyYW1l
LAorICAgICAgICAgICAgICAgIEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0
MiksIG1fY2FsbEZyYW1lLAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKICAgICAgICAgICAgICAgICBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOwogICAgICAg
ICB9CkBAIC0yNDI4LDcgKzI0MjgsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlLCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAgICAgICAgIExWYWx1ZSBh
cmd1bWVudCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSB2bUNhbGwoSW50MzIsIG9wZXJhdGlvbkFyaXRoQ2x6MzIsIG1fY2FsbEZyYW1lLCBh
cmd1bWVudCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoSW50MzIsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25Bcml0aENsejMyKSwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50KTsKICAg
ICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAgICB9CiAgICAgCkBAIC0yNTExLDcgKzI1MTEsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dCaWdJbnQobV9ub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dCaWdJbnQobV9ub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNh
bGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uRGl2QmlnSW50LCBtX2NhbGxGcmFtZSwgbGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgp
LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRGl2QmlnSW50KSwgbV9jYWxsRnJhbWUsIGxlZnQs
IHJpZ2h0KTsKICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMjU4OSw3ICsyNTg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIExWYWx1ZSBsZWZ0ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgTFZhbHVlIHJpZ2h0ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hpbGQyKCkpOwogCi0gICAgICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbk1vZEJp
Z0ludCwgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1
bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk1vZEJp
Z0ludCksIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1OTcsNyArMjU5
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX25v
ZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBtX25vZGUtPmJpbmFyeVVzZUtpbmQo
KSk7CiAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKLSAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVmFsdWVNb2QsIG1f
Y2FsbEZyYW1lLCBsZWZ0LCByaWdodCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwo
SW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZU1vZCksIG1fY2FsbEZyYW1lLCBs
ZWZ0LCByaWdodCk7CiAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CiAKQEAgLTI3
MzgsNyArMjczOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBVbnR5cGVkVXNlLCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAgICAgICAgICAgICBM
VmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChEb3VibGUsIG9wZXJhdGlvbkFyaXRoQWJzLCBtX2Nh
bGxGcmFtZSwgYXJndW1lbnQpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChE
b3VibGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Bcml0aEFicyksIG1fY2FsbEZyYW1lLCBh
cmd1bWVudCk7CiAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0yNzUyLDcgKzI3NTIsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoRG91
YmxlLCBERkc6OmFyaXRoVW5hcnlPcGVyYXRpb24obV9ub2RlLT5hcml0aFVuYXJ5VHlwZSgpKSwg
bV9jYWxsRnJhbWUsIGFyZ3VtZW50KTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChE
b3VibGUsIG1fb3V0Lm9wZXJhdGlvbihERkc6OmFyaXRoVW5hcnlPcGVyYXRpb24obV9ub2RlLT5h
cml0aFVuYXJ5VHlwZSgpKSksIG1fY2FsbEZyYW1lLCBhcmd1bWVudCk7CiAgICAgICAgIHNldERv
dWJsZShyZXN1bHQpOwogICAgIH0KIApAQCAtMjc2MiwxNCArMjc2MiwxNCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBMVmFsdWUgZXhwb25lbnQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRl
clR5cGUoKSwgb3BlcmF0aW9uUG93QmlnSW50LCBtX2NhbGxGcmFtZSwgYmFzZSwgZXhwb25lbnQp
OworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uUG93QmlnSW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGV4cG9u
ZW50KTsKICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIGV4cG9uZW50ID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMigpKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0
aW9uVmFsdWVQb3csIG1fY2FsbEZyYW1lLCBiYXNlLCBleHBvbmVudCk7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZVBv
dyksIG1fY2FsbEZyYW1lLCBiYXNlLCBleHBvbmVudCk7CiAgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0KTsKICAgICB9CiAKQEAgLTI5OTQsNyArMjk5NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFVudHlwZWRVc2UsIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKICAgICAgICAgTFZhbHVl
IGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SlNW
YWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkFyaXRoUm91bmQsIG1fY2FsbEZyYW1lLCBhcmd1
bWVudCkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbkFyaXRoUm91bmQpLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsKICAgICB9CiAK
ICAgICB2b2lkIGNvbXBpbGVBcml0aEZsb29yKCkKQEAgLTMwMTAsNyArMzAxMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKTsKICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkFyaXRo
Rmxvb3IsIG1fY2FsbEZyYW1lLCBhcmd1bWVudCkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoRmxvb3IpLCBtX2NhbGxGcmFt
ZSwgYXJndW1lbnQpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aENlaWwoKQpAQCAt
MzAyNiw3ICszMDI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwogICAgICAgICBMVmFsdWUgYXJndW1lbnQg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uQXJpdGhDZWlsLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25B
cml0aENlaWwpLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsKICAgICB9CiAKICAgICB2b2lkIGNv
bXBpbGVBcml0aFRydW5jKCkKQEAgLTMwNDIsNyArMzA0Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKICAg
ICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkFyaXRoVHJ1bmMsIG1fY2Fs
bEZyYW1lLCBhcmd1bWVudCkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoVHJ1bmMpLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQp
KTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoKQpAQCAtMzA1Miw3ICszMDUy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBM
VmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gdm1DYWxsKERvdWJsZSwgb3BlcmF0aW9uQXJpdGhTcXJ0LCBtX2NhbGxG
cmFtZSwgYXJndW1lbnQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKERvdWJsZSwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoU3FydCksIG1fY2FsbEZyYW1lLCBhcmd1bWVu
dCk7CiAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwogICAgIH0KIApAQCAtMzA2Myw3ICszMDYz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBM
VmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gdm1DYWxsKERvdWJsZSwgb3BlcmF0aW9uQXJpdGhGUm91bmQsIG1fY2Fs
bEZyYW1lLCBhcmd1bWVudCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoRG91Ymxl
LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJpdGhGUm91bmQpLCBtX2NhbGxGcmFtZSwgYXJn
dW1lbnQpOwogICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKICAgICB9CiAKQEAgLTMxMzUsMTMg
KzMxMzUsMTMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBCaWdJbnRVc2UpIHsKICAgICAgICAgICAgIExWYWx1ZSBvcGVyYW5kID0g
bG93QmlnSW50KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25CaXROb3RCaWdJbnQsIG1fY2FsbEZyYW1l
LCBvcGVyYW5kKTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5
cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkJpdE5vdEJpZ0ludCksIG1fY2FsbEZyYW1l
LCBvcGVyYW5kKTsKICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIExWYWx1ZSBvcGVyYW5kID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uVmFsdWVCaXROb3QsIG1fY2FsbEZyYW1lLCBvcGVyYW5kKTsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblZh
bHVlQml0Tm90KSwgbV9jYWxsRnJhbWUsIG9wZXJhbmQpOwogICAgICAgICBzZXRKU1ZhbHVlKHJl
c3VsdCk7CiAgICAgfQogCkBAIC0zMTU2LDcgKzMxNTYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgTFZhbHVlIGxlZnQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBMVmFsdWUgcmlnaHQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3Bl
cmF0aW9uQml0QW5kQmlnSW50LCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uQml0QW5kQmlnSW50KSwgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKICAgICAg
ICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMzE3NSw3ICszMTc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0
ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hpbGQyKCkpOwogCi0gICAgICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbkJpdE9yQmlnSW50LCBtX2NhbGxG
cmFtZSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChw
b2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQml0T3JCaWdJbnQpLCBtX2Nh
bGxGcmFtZSwgbGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zMTk0LDcgKzMxOTQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDIo
KSk7CiAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwg
b3BlcmF0aW9uQml0WG9yQmlnSW50LCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOworICAgICAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uQml0WG9yQmlnSW50KSwgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKICAg
ICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMzIxMyw3ICszMjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBs
ZWZ0ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIHJp
Z2h0ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hpbGQyKCkpOwogCi0gICAgICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbkJpdFJTaGlmdEJpZ0ludCwg
bV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2
bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkJpdFJTaGlmdEJp
Z0ludCksIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTMyNDEsNyArMzI0
MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0JpZ0ludChtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0JpZ0ludChtX25v
ZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25CaXRMU2hpZnRCaWdJbnQsIG1fY2FsbEZy
YW1lLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBv
aW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25CaXRMU2hpZnRCaWdJbnQpLCBt
X2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zNDQ5LDE3ICszNDQ5LDE3IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgdm1DYWxs
KFZvaWQsIG9wZXJhdGlvbkVuc3VyZUludDMyLCBtX2NhbGxGcmFtZSwgY2VsbCk7CisgICAgICAg
ICAgICB2bUNhbGwoVm9pZCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUludDMyKSwg
bV9jYWxsRnJhbWUsIGNlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKLSAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25FbnN1cmVEb3Vi
bGUsIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlRG91YmxlKSwgbV9jYWxsRnJhbWUsIGNlbGwpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgICAg
ICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cywgbV9jYWxsRnJhbWUs
IGNlbGwpOworICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25FbnN1cmVDb250aWd1b3VzKSwgbV9jYWxsRnJhbWUsIGNlbGwpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJh
eTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRp
b25FbnN1cmVBcnJheVN0b3JhZ2UsIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAgICAgICAgICAgIHZt
Q2FsbChWb2lkLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKSwg
bV9jYWxsRnJhbWUsIGNlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUi
KTsKQEAgLTM1MTgsNyArMzUxOCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICAg
ICAgSW50NjQsIGdldEJ5SWRGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICBJbnQ2NCwgbV9vdXQu
b3BlcmF0aW9uKGdldEJ5SWRGdW5jdGlvbiksCiAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUs
IHZhbHVlLAogICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pKSk7CiAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBAIC0zNTYxLDcgKzM1NjEsNyBAQCBwcml2YXRlOgogCiAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3Iodm1D
YWxsKAotICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNHZW5l
cmljLAorICAgICAgICAgICAgICAgIEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzR2VuZXJpYyksCiAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2Us
IHRoaXNWYWx1ZSwKICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmlk
ZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKSkpOwogICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMzU3OCw3ICszNTc4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgTFZhbHVlIHRoaXNWYWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgIExWYWx1ZSBzdWJzY3JpcHQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkp
OwogCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldEJ5
VmFsV2l0aFRoaXMsIG1fY2FsbEZyYW1lLCBiYXNlLCB0aGlzVmFsdWUsIHN1YnNjcmlwdCk7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25HZXRCeVZhbFdpdGhUaGlzKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHRoaXNWYWx1ZSwgc3Vi
c2NyaXB0KTsKICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KIApAQCAtMzU4OCw3
ICszNTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHRoaXNWYWx1ZSA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDMoKSk7CiAKLSAgICAgICAgdm1DYWxsKFZvaWQsIG1fZ3JhcGguaXNTdHJp
Y3RNb2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9wZXJhdGlvblB1dEJ5SWRXaXRo
VGhpc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5SWRXaXRoVGhpcywKKyAgICAgICAgdm1DYWxsKFZv
aWQsIG1fb3V0Lm9wZXJhdGlvbihtX2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeUlkV2l0aFRoaXNTdHJpY3QgOiBvcGVyYXRpb25Q
dXRCeUlkV2l0aFRoaXMpLAogICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIHRoaXNWYWx1
ZSwgdmFsdWUsIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKV0pKTsKICAgICB9CiAKQEAgLTM1OTksNyArMzU5OSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwogCi0gICAgICAgIHZtQ2FsbChWb2lkLCBt
X2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRp
b25QdXRCeVZhbFdpdGhUaGlzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxXaXRoVGhpcywKKyAg
ICAgICAgdm1DYWxsKFZvaWQsIG1fb3V0Lm9wZXJhdGlvbihtX2dyYXBoLmlzU3RyaWN0TW9kZUZv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeVZhbFdpdGhUaGlzU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxXaXRoVGhpcyksCiAgICAgICAgICAgICBtX2NhbGxGcmFt
ZSwgYmFzZSwgdGhpc1ZhbHVlLCBwcm9wZXJ0eSwgdmFsdWUpOwogICAgIH0KICAgICAKQEAgLTM2
MTQsNTQgKzM2MTQsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFyZ0VkZ2VzW2ldID0gbV9n
cmFwaC5jaGlsZChtX25vZGUsIDIgKyBpKTsKICAgICAgICAgRWRnZSBzdG9yYWdlRWRnZSA9IG1f
Z3JhcGguY2hpbGQobV9ub2RlLCAyICsgbnVtRXh0cmFBcmdzKTsKICAgICAgICAgCi0gICAgICAg
IGlmICghc3RvcmFnZUVkZ2UpIHsKLSAgICAgICAgICAgIGF1dG8gY2FsbFdpdGgwID0gWyZdIChh
dXRvKiBvcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobnVtRXh0cmFBcmdzID09
IDApOwotICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbiwgbV9j
YWxsRnJhbWUsIGxvd0pTVmFsdWUoYmFzZUVkZ2UpLCBsb3dKU1ZhbHVlKGluZGV4RWRnZSkpOwot
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYXV0byBjYWxsV2l0aDEgPSBbJl0gKGF1dG8q
IG9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgIEFTU0VSVChudW1FeHRyYUFyZ3MgPT0gMSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uLCBtX2NhbGxG
cmFtZSwgbG93SlNWYWx1ZShiYXNlRWRnZSksIGxvd0pTVmFsdWUoaW5kZXhFZGdlKSwgbG93SlNW
YWx1ZShhcmdFZGdlc1swXSkpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYXV0byBj
YWxsV2l0aDIgPSBbJl0gKGF1dG8qIG9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgIEFTU0VS
VChudW1FeHRyYUFyZ3MgPT0gMik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShiYXNlRWRnZSksIGxvd0pTVmFs
dWUoaW5kZXhFZGdlKSwgbG93SlNWYWx1ZShhcmdFZGdlc1swXSksIGxvd0pTVmFsdWUoYXJnRWRn
ZXNbMV0pKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Cisg
ICAgICAgIGF1dG8gb3BlcmF0aW9uID0gWyZdICgpIC0+IExWYWx1ZSB7CiAgICAgICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBBdG9taWNzQWRkOgotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxXaXRoMShvcGVyYXRpb25BdG9taWNzQWRkKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkF0b21pY3NBZGQpOwogICAgICAgICAgICAgY2FzZSBBdG9taWNzQW5kOgot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxXaXRoMShvcGVyYXRpb25BdG9taWNzQW5kKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkF0b21pY3NBbmQpOwogICAgICAgICAgICAgY2FzZSBBdG9taWNzQ29t
cGFyZUV4Y2hhbmdlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxXaXRoMihvcGVyYXRp
b25BdG9taWNzQ29tcGFyZUV4Y2hhbmdlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NDb21wYXJl
RXhjaGFuZ2UpOwogICAgICAgICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY2FsbFdpdGgxKG9wZXJhdGlvbkF0b21pY3NFeGNoYW5nZSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25BdG9taWNzRXhjaGFuZ2UpOwogICAgICAgICAgICAgY2FzZSBBdG9taWNzTG9h
ZDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjYWxsV2l0aDAob3BlcmF0aW9uQXRvbWljc0xv
YWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uQXRvbWljc0xvYWQpOwogICAgICAgICAgICAgY2FzZSBBdG9t
aWNzT3I6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FsbFdpdGgxKG9wZXJhdGlvbkF0b21p
Y3NPcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BdG9taWNzT3IpOwogICAgICAgICAgICAgY2FzZSBBdG9t
aWNzU3RvcmU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FsbFdpdGgxKG9wZXJhdGlvbkF0
b21pY3NTdG9yZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BdG9taWNzU3RvcmUpOwogICAgICAgICAgICAg
Y2FzZSBBdG9taWNzU3ViOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxXaXRoMShvcGVy
YXRpb25BdG9taWNzU3ViKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NTdWIpOwogICAgICAgICAg
ICAgY2FzZSBBdG9taWNzWG9yOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxXaXRoMShv
cGVyYXRpb25BdG9taWNzWG9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NYb3IpOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICB9Owor
ICAgICAgICAKKyAgICAgICAgaWYgKCFzdG9yYWdlRWRnZSkgeworICAgICAgICAgICAgVmVjdG9y
PExWYWx1ZT4gYXJnczsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fY2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgIGFyZ3MuYXBwZW5kKGxvd0pTVmFsdWUoYmFzZUVkZ2UpKTsKKyAgICAgICAgICAg
IGFyZ3MuYXBwZW5kKGxvd0pTVmFsdWUoaW5kZXhFZGdlKSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFBcmdzOyArK2kpCisgICAgICAgICAgICAgICAgYXJn
cy5hcHBlbmQobG93SlNWYWx1ZShhcmdFZGdlc1tpXSkpOworICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uKCksIGFyZ3MpOwogICAgICAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zNzQ5
LDcgKzM3MzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUF0b21pY3NJc0xvY2tGcmVl
KCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBJbnQz
MlVzZSkgewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkF0
b21pY3NJc0xvY2tGcmVlLCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25BdG9taWNzSXNMb2NrRnJlZSksIG1fY2FsbEZyYW1lLCBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC0zNzg3LDIyICszNzczLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAocHJv
cGVydHlFZGdlLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIFN0cmluZ1VzZTogewogICAgICAg
ICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nKHByb3BlcnR5RWRnZSk7Ci0gICAgICAg
ICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nLCBtX2Nh
bGxGcmFtZSwgYmFzZSwgcHJvcGVydHksIHZhbHVlLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAg
IHZtQ2FsbChWb2lkLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5
U3RyaW5nKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSwgYXR0cmlidXRlcyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN0cmluZ0lkZW50
VXNlOiB7CiAgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dTdHJpbmdJZGVudChwcm9w
ZXJ0eUVkZ2UpOwotICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbkRlZmluZURhdGFQ
cm9wZXJ0eVN0cmluZ0lkZW50LCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHksIHZhbHVlLCBh
dHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nSWRlbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwg
cHJvcGVydHksIHZhbHVlLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgU3ltYm9sVXNlOiB7CiAgICAgICAgICAgICBMVmFsdWUgcHJvcGVy
dHkgPSBsb3dTeW1ib2wocHJvcGVydHlFZGdlKTsKLSAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBv
cGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTeW1ib2wsIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9w
ZXJ0eSwgdmFsdWUsIGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTeW1ib2wpLCBtX2NhbGxGcmFt
ZSwgYmFzZSwgcHJvcGVydHksIHZhbHVlLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewogICAgICAgICAgICAgTFZh
bHVlIHByb3BlcnR5ID0gbG93SlNWYWx1ZShwcm9wZXJ0eUVkZ2UpOwotICAgICAgICAgICAgdm1D
YWxsKFZvaWQsIG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eSwgbV9jYWxsRnJhbWUsIGJhc2Us
IHByb3BlcnR5LCB2YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICB2bUNhbGwoVm9pZCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eSksIG1fY2FsbEZyYW1l
LCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKQEAgLTM4MjAsMjIgKzM4MDYsMjIgQEAgcHJp
dmF0ZToKICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eUVkZ2UudXNlS2luZCgpKSB7CiAgICAgICAg
IGNhc2UgU3RyaW5nVXNlOiB7CiAgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dTdHJp
bmcocHJvcGVydHlFZGdlKTsKLSAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25EZWZp
bmVBY2Nlc3NvclByb3BlcnR5U3RyaW5nLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHksIGdl
dHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eVN0cmluZyksIG1fY2Fs
bEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIsIGF0dHJpYnV0ZXMpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZTog
ewogICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nSWRlbnQocHJvcGVydHlF
ZGdlKTsKLSAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclBy
b3BlcnR5U3RyaW5nSWRlbnQsIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSwgZ2V0dGVyLCBz
ZXR0ZXIsIGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3RyaW5nSWRlbnQpLCBtX2NhbGxG
cmFtZSwgYmFzZSwgcHJvcGVydHksIGdldHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3ltYm9sVXNlOiB7CiAgICAg
ICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dTeW1ib2wocHJvcGVydHlFZGdlKTsKLSAgICAg
ICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3ltYm9s
LCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHksIGdldHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVz
KTsKKyAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRGVm
aW5lQWNjZXNzb3JQcm9wZXJ0eVN5bWJvbCksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSwg
Z2V0dGVyLCBzZXR0ZXIsIGF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CiAgICAgICAgICAgICBMVmFsdWUgcHJvcGVy
dHkgPSBsb3dKU1ZhbHVlKHByb3BlcnR5RWRnZSk7Ci0gICAgICAgICAgICB2bUNhbGwoVm9pZCwg
b3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eSwgbV9jYWxsRnJhbWUsIGJhc2UsIHByb3Bl
cnR5LCBnZXR0ZXIsIHNldHRlciwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICB2bUNhbGwoVm9p
ZCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHkpLCBtX2Nh
bGxGcmFtZSwgYmFzZSwgcHJvcGVydHksIGdldHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0zOTM5LDcg
KzM5MjUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25SZXNvbHZlUm9wZSwgbV9jYWxs
RnJhbWUsIGNlbGwpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKHBvaW50ZXJUeXBlKCksIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlUm9wZSksIG1fY2FsbEZyYW1lLCBjZWxsKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgICAgIApAQCAtNDA3NiwxMSArNDA2MywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT2JqZWN0VXNlOiB7Ci0gICAgICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvdG90eXBlT2ZPYmplY3QsIG1f
Y2FsbEZyYW1lLCBsb3dPYmplY3QobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvdG90
eXBlT2ZPYmplY3QpLCBtX2NhbGxGcmFtZSwgbG93T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDogewotICAg
ICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9m
LCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRQ
cm90b3R5cGVPZiksIG1fY2FsbEZyYW1lLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDIyNSw3ICs0
MjEyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5pc1plcm82NChmYXN0UmVz
dWx0VmFsdWUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgbV9jYWxsRnJhbWUs
IGJhc2UsIGluZGV4KSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4
KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAt
NDI3NSw3ICs0MjYzLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
IG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICB2bUNhbGwoSW50NjQs
IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCksIG1fY2FsbEZyYW1l
LCBiYXNlLCBpbmRleCkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKQEAgLTQzMjQsNyArNDMxMyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dD
YXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50
LCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKEludDY0
LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQpLCBtX2NhbGxGcmFt
ZSwgYmFzZSwgaW5kZXgpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBA
IC00Mzk0LDIwICs0Mzg0LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBT
dHJpbmdVc2UpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcs
IG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZyksIG1fY2FsbEZyYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIG1fY2Fs
bEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25HZXRCeVZhbE9iamVjdFN5bWJvbCksIG1fY2FsbEZyYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxv
d1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9u
R2V0QnlWYWwsIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgICAgIEludDY0LCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwKICAgICAgICAgICAgICAgICBs
b3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC00NDQ0LDcgKzQ0MzQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAgdm1DYWxs
KEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgbV9jYWxsRnJhbWUsIGJhc2UsIGlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uR2V0QnlWYWxPYmplY3RJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgpKTsKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC00NjAzLDcgKzQ1OTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmlj
dDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9p
ZCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgbG93Q2VsbChjaGlsZDEpLCBsb3dTdHJpbmcoY2hp
bGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKyAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZv
aWQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb24pLCBtX2NhbGxGcmFtZSwgbG93Q2VsbChjaGls
ZDEpLCBsb3dTdHJpbmcoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIApAQCAtNDYxOSw3ICs0NjA5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25T
dHJpY3Q7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdm1DYWxs
KFZvaWQsIG9wZXJhdGlvbiwgbV9jYWxsRnJhbWUsIGxvd0NlbGwoY2hpbGQxKSwgbG93U3ltYm9s
KGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7CisgICAgICAgICAgICAgICAgICAgIHZtQ2Fs
bChWb2lkLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uKSwgbV9jYWxsRnJhbWUsIGxvd0NlbGwo
Y2hpbGQxKSwgbG93U3ltYm9sKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC00NjM4LDcgKzQ2MjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlv
biwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAgVm9pZCwgbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbiksIG1fY2FsbEZyYW1lLAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoY2hpbGQx
KSwgbG93SlNWYWx1ZShjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC00NzYyLDcgKzQ3NTIsNyBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBp
bkJvdW5kQ2FzZSk7CiAgICAgICAgICAgICB2bUNhbGwoCi0gICAgICAgICAgICAgICAgVm9pZCwg
c2xvd1BhdGhGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICBWb2lkLCBtX291dC5vcGVyYXRpb24o
c2xvd1BhdGhGdW5jdGlvbiksCiAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIGlu
ZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKQEAg
LTQ4ODcsNyArNDg3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gdWlkID0gbV9ncmFwaC5p
ZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKICAgICAgICAgdm1DYWxs
KAogICAgICAgICAgICAgVm9pZCwKLSAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBQdXRHZXR0
ZXJCeUlkID8gb3BlcmF0aW9uUHV0R2V0dGVyQnlJZCA6IG9wZXJhdGlvblB1dFNldHRlckJ5SWQs
CisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24obV9ub2RlLT5vcCgpID09IFB1dEdldHRlckJ5
SWQgPyBvcGVyYXRpb25QdXRHZXR0ZXJCeUlkIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlJZCksCiAg
ICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSwgbV9v
dXQuY29uc3RJbnQzMihtX25vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpKSwgYWNjZXNzb3IpOwog
ICAgIH0KIApAQCAtNDg5OCw3ICs0ODg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHNl
dHRlciA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIGF1dG8gdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKICAgICAg
ICAgdm1DYWxsKAotICAgICAgICAgICAgVm9pZCwgb3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLAor
ICAgICAgICAgICAgVm9pZCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRl
ciksCiAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlk
KSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpKSwgZ2V0dGVy
LCBzZXR0ZXIpOwogCiAgICAgfQpAQCAtNDkxMCw3ICs0OTAwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgTFZhbHVlIGFjY2Vzc29yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKICAgICAgICAg
dm1DYWxsKAogICAgICAgICAgICAgVm9pZCwKLSAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBQ
dXRHZXR0ZXJCeVZhbCA/IG9wZXJhdGlvblB1dEdldHRlckJ5VmFsIDogb3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24obV9ub2RlLT5vcCgpID09IFB1
dEdldHRlckJ5VmFsID8gb3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwgOiBvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCksCiAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgc3Vic2NyaXB0LCBtX291
dC5jb25zdEludDMyKG1fbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCkpLCBhY2Nlc3Nvcik7CiAg
ICAgfQogCkBAIC00OTE4LDE0ICs0OTA4LDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBM
VmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGF1dG8g
dWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsK
LSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBvcGVyYXRp
b25EZWxldGVCeUlkLCBtX2NhbGxGcmFtZSwgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkp
KTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZCksIG1fY2FsbEZyYW1lLCBiYXNlLCBtX291
dC5jb25zdEludFB0cih1aWQpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZURlbGV0ZUJ5
VmFsKCkKICAgICB7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgTFZhbHVlIHN1YnNjcmlwdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDIoKSk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uRGVsZXRlQnlWYWwsIG1fY2FsbEZyYW1lLCBiYXNlLCBzdWJzY3JpcHQpKSk7
CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHN1YnNj
cmlwdCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQXJyYXlQdXNoKCkKQEAgLTQ5
NzYsMTIgKzQ5NjYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICBMVmFsdWUgb3BlcmF0aW9uOwogICAgICAgICAgICAgICAg
IGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkFycmF5UHVzaCwg
bV9jYWxsRnJhbWUsIHZhbHVlLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5UHVzaCk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG9wZXJhdGlv
bkFycmF5UHVzaERvdWJsZSwgbV9jYWxsRnJhbWUsIHZhbHVlLCBiYXNlKTsKLSAgICAgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25B
cnJheVB1c2hEb3VibGUpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgb3Bl
cmF0aW9uLCBtX2NhbGxGcmFtZSwgdmFsdWUsIGJhc2UpKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC01MDQzLDkgKzUwMzQs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChiZXlvbmRWZWN0b3JMZW5n
dGgsIHVuc3VyZShzbG93Q2FsbFBhdGgpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CiAKICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYWxsUGF0aCwgY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgIGF1dG8qIG9wZXJhdGlvbiA9ICZvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZTsKLSAg
ICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6RG91Ymxl
KQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICZvcGVyYXRpb25BcnJheVB1c2hEb3VibGVN
dWx0aXBsZTsKKyAgICAgICAgICAgIExWYWx1ZSBvcGVyYXRpb247CisgICAgICAgICAgICBpZiAo
bV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkRvdWJsZSkKKyAgICAgICAgICAg
ICAgICBvcGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQdXNoTXVsdGlw
bGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2hEb3VibGVNdWx0aXBsZSk7CiAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwg
b3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgYmFzZSwgYnVmZmVyLCBtX291dC5jb25zdEludDMyKGVs
ZW1lbnRDb3VudCkpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50
UHRyKDApLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5n
dGgoKSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtNTA5MSw3
ICs1MDg0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dQYXRoLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uQXJyYXlQdXNoLCBtX2NhbGxGcmFtZSwgdmFsdWUsIGJhc2UpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJy
YXlQdXNoKSwgbV9jYWxsRnJhbWUsIHZhbHVlLCBiYXNlKSk7CiAgICAgICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC01MTQwLDcgKzUxMzMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGJleW9uZFZlY3Rvckxlbmd0aCwgcmFyZWx5KHNsb3dD
YWxsUGF0aCksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CiAKICAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dDYWxsUGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25B
cnJheVB1c2hNdWx0aXBsZSwgbV9jYWxsRnJhbWUsIGJhc2UsIGJ1ZmZlciwgbV9vdXQuY29uc3RJ
bnQzMihlbGVtZW50Q291bnQpKSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkFycmF5UHVzaE11bHRpcGxlKSwgbV9jYWxsRnJhbWUsIGJhc2UsIGJ1ZmZlciwgbV9vdXQuY29u
c3RJbnQzMihlbGVtZW50Q291bnQpKSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5jb25zdEludFB0cigwKSwgbV9vdXQuYWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09m
QWN0aXZlTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
IApAQCAtNTM1OSwxNyArNTM1MiwxNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgU3RyaW5n
VXNlOgogICAgICAgICAgICAgQVNTRVJUKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFy
cmF5OjpDb250aWd1b3VzKTsKLSAgICAgICAgICAgIHNldEludDMyKHZtQ2FsbChJbnQzMiwgb3Bl
cmF0aW9uQXJyYXlJbmRleE9mU3RyaW5nLCBtX2NhbGxGcmFtZSwgc3RvcmFnZSwgbG93U3RyaW5n
KHNlYXJjaEVsZW1lbnRFZGdlKSwgc3RhcnRJbmRleCkpOworICAgICAgICAgICAgc2V0SW50MzIo
dm1DYWxsKEludDMyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlJbmRleE9mU3RyaW5n
KSwgbV9jYWxsRnJhbWUsIHN0b3JhZ2UsIGxvd1N0cmluZyhzZWFyY2hFbGVtZW50RWRnZSksIHN0
YXJ0SW5kZXgpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgVW50eXBlZFVz
ZToKICAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICBzZXRJbnQzMih2
bUNhbGwoSW50MzIsIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlLCBtX2NhbGxGcmFt
ZSwgc3RvcmFnZSwgbG93SlNWYWx1ZShzZWFyY2hFbGVtZW50RWRnZSksIHN0YXJ0SW5kZXgpKTsK
KyAgICAgICAgICAgICAgICBzZXRJbnQzMih2bUNhbGwoSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZSksIG1fY2FsbEZyYW1lLCBzdG9yYWdlLCBs
b3dKU1ZhbHVlKHNlYXJjaEVsZW1lbnRFZGdlKSwgc3RhcnRJbmRleCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAgICAgIHNldEludDMyKHZtQ2FsbChJ
bnQzMiwgb3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVJbnQzMk9yQ29udGlndW91cywgbV9jYWxs
RnJhbWUsIHN0b3JhZ2UsIGxvd0pTVmFsdWUoc2VhcmNoRWxlbWVudEVkZ2UpLCBzdGFydEluZGV4
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIodm1DYWxsKEludDMyLCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVJbnQzMk9yQ29udGlndW91cyksIG1fY2FsbEZy
YW1lLCBzdG9yYWdlLCBsb3dKU1ZhbHVlKHNlYXJjaEVsZW1lbnRFZGdlKSwgc3RhcnRJbmRleCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTQyNyw3ICs1NDIwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5h
bmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25BcnJheVBvcEFu
ZFJlY292ZXJMZW5ndGgsIG1fY2FsbEZyYW1lLCBiYXNlKSkpOworICAgICAgICAgICAgICAgIElu
dDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKSwg
bV9jYWxsRnJhbWUsIGJhc2UpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwpAQCAtNTQ2OSw3ICs1NDYyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291
dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25BcnJheVBvcCwgbV9jYWxsRnJhbWUsIGJh
c2UpKSk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKAor
ICAgICAgICAgICAgICAgIEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQb3Ap
LCBtX2NhbGxGcmFtZSwgYmFzZSkpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CkBAIC01NDg5LDEyICs1NDgzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gb2JqZWN0
RWRnZSA9IG1fbm9kZS0+Y2hpbGQyKCk7CiAgICAgICAgIGlmIChvYmplY3RFZGdlLnVzZUtpbmQo
KSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dOb25OdWxs
T2JqZWN0KG9iamVjdEVkZ2UpOwotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uUHVzaFdpdGhTY29wZU9iamVjdCwgbV9jYWxsRnJhbWUsIHBhcmVudFNj
b3BlLCBvYmplY3QpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblB1c2hXaXRoU2NvcGVPYmplY3QpLCBtX2NhbGxGcmFt
ZSwgcGFyZW50U2NvcGUsIG9iamVjdCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQob2JqZWN0RWRnZS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwo
SW50NjQsIG9wZXJhdGlvblB1c2hXaXRoU2NvcGUsIG1fY2FsbEZyYW1lLCBwYXJlbnRTY29wZSwg
b2JqZWN0KTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25QdXNoV2l0aFNjb3BlKSwgbV9jYWxsRnJhbWUsIHBhcmVudFNj
b3BlLCBvYmplY3QpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICB9
CiAgICAgfQpAQCAtNTUwOSw3ICs1NTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHRhYmxl
LT5zaW5nbGV0b24oKS5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgTFZhbHVlIGNhbGxS
ZXN1bHQgPSB2bUNhbGwoCiAgICAgICAgICAgICAgICAgSW50NjQsCi0gICAgICAgICAgICAgICAg
b3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbV9jYWxsRnJhbWUsIHdlYWtTdHJ1Y3R1
cmUoc3RydWN0dXJlKSwKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
Q3JlYXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2FsbEZyYW1lLCB3ZWFrU3RydWN0dXJlKHN0cnVj
dHVyZSksCiAgICAgICAgICAgICAgICAgc2NvcGUsIHdlYWtQb2ludGVyKHRhYmxlKSwgbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKICAgICAg
ICAgICAgIHNldEpTVmFsdWUoY2FsbFJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01
NTY5LDEwICs1NTYzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IG1fbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsK
ICAgICAgICAgaWYgKGV4ZWN1dGFibGUtPnNpbmdsZXRvbigpLmlzU3RpbGxWYWxpZCgpKSB7CiAg
ICAgICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmF0
b3JGdW5jdGlvbiA/IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24s
IG1fY2FsbEZyYW1lLCBzY29wZSwgd2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpIDoKLSAgICAgICAg
ICAgICAgICBpc0FzeW5jRnVuY3Rpb24gPyB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIG1fY2FsbEZyYW1lLCBzY29wZSwgd2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpIDoK
LSAgICAgICAgICAgICAgICBpc0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24gPyB2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIG1fY2FsbEZyYW1lLCBzY29wZSwg
d2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpIDoKLSAgICAgICAgICAgICAgICB2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBtX2NhbGxGcmFtZSwgc2NvcGUsIHdlYWtQb2ludGVyKGV4
ZWN1dGFibGUpKTsKKyAgICAgICAgICAgICAgICBpc0dlbmVyYXRvckZ1bmN0aW9uID8gdm1DYWxs
KEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24pLCBt
X2NhbGxGcmFtZSwgc2NvcGUsIHdlYWtQb2ludGVyKGV4ZWN1dGFibGUpKSA6CisgICAgICAgICAg
ICAgICAgaXNBc3luY0Z1bmN0aW9uID8gdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCBzY29wZSwgd2Vha1BvaW50ZXIo
ZXhlY3V0YWJsZSkpIDoKKyAgICAgICAgICAgICAgICBpc0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24g
PyB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSkg
OgorICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxl
KSk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGxSZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC01NzU2LDcgKzU3NTAsNyBAQCBwcml2YXRlOgogICAgICAgICBM
VmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25D
cmVhdGVTY29wZWRBcmd1bWVudHMsIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgSW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMpLCBtX2NhbGxGcmFt
ZSwKICAgICAgICAgICAgIHdlYWtQb2ludGVyKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c2NvcGVkQXJndW1lbnRzU3Ry
dWN0dXJlKCkpLAogICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgZ2V0QXJndW1lbnRz
TGVuZ3RoKCkudmFsdWUsIGdldEN1cnJlbnRDYWxsZWUoKSwgc2NvcGUpOwpAQCAtNTc2Nyw3ICs1
NzYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMo
KQogICAgIHsKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIElu
dDY0LCBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMsIG1fY2FsbEZyYW1lLAorICAgICAg
ICAgICAgSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVu
dHMpLCBtX2NhbGxGcmFtZSwKICAgICAgICAgICAgIHdlYWtQb2ludGVyKAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+Y2xv
bmVkQXJndW1lbnRzU3RydWN0dXJlKCkpLAogICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQo
KSwgZ2V0QXJndW1lbnRzTGVuZ3RoKCkudmFsdWUsIGdldEN1cnJlbnRDYWxsZWUoKSk7CkBAIC01
ODEwLDcgKzU4MDQsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgYXJndW1lbnRTdGFydCA9
IGdldEFyZ3VtZW50c1N0YXJ0KCk7CiAgICAgICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgp
KTsKICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAgICBJbnQ2NCwgb3BlcmF0
aW9uQ3JlYXRlUmVzdCwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50U3RhcnQsIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwLCBhcnJheUxlbmd0aCkpOworICAgICAgICAgICAgSW50NjQsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25DcmVhdGVSZXN0KSwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50U3RhcnQsIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCkpOwogICAgIH0KIAogICAgIHZvaWQg
Y29tcGlsZUdldFJlc3RMZW5ndGgoKQpAQCAtNTg2OCw3ICs1ODYyLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhzbG93QnV0QXJyYXlCdWZmZXJDYXNlLCBzbG93Q2FzZSk7Ci0gICAg
ICAgICAgICAgICAgTFZhbHVlIHNsb3dBcnJheSA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTmV3
QXJyYXlCdWZmZXIsIG1fY2FsbEZyYW1lLCB3ZWFrU3RydWN0dXJlKGFycmF5U3RydWN0dXJlKSwg
Y2FjaGVkT3duS2V5cyk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHNsb3dBcnJheSA9IHZtQ2Fs
bChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKSwgbV9jYWxs
RnJhbWUsIHdlYWtTdHJ1Y3R1cmUoYXJyYXlTdHJ1Y3R1cmUpLCBjYWNoZWRPd25LZXlzKTsKICAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0QXJyYXlCdWZmZXJSZXN1bHQgPSBt
X291dC5hbmNob3Ioc2xvd0FycmF5KTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKQEAgLTU4ODcsMTEgKzU4ODEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0UmVzdWx0LCBzbG93
QnV0QXJyYXlCdWZmZXJSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBv
cGVyYXRpb25PYmplY3RLZXlzT2JqZWN0LCBtX2NhbGxGcmFtZSwgbG93T2JqZWN0KG1fbm9kZS0+
Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbk9iamVjdEtleXNPYmplY3QpLCBtX2NhbGxGcmFtZSwgbG93T2Jq
ZWN0KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uT2JqZWN0S2V5cywgbV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0S2V5cyksIG1fY2FsbEZyYW1lLCBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01OTAzLDEw
ICs1ODk3LDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk9iamVjdENyZWF0ZU9iamVjdCwgbV9j
YWxsRnJhbWUsIGxvd09iamVjdChtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25PYmplY3RDcmVh
dGVPYmplY3QpLCBtX2NhbGxGcmFtZSwgbG93T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk9iamVjdENyZWF0ZSwgbV9jYWxsRnJh
bWUsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0Q3JlYXRlKSwg
bV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTU5MzksNyArNTkzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgbV9ub2RlLT5pc0ludGVybmFsUHJvbWlzZSgp
ID8gb3BlcmF0aW9uTmV3SW50ZXJuYWxQcm9taXNlIDogb3BlcmF0aW9uTmV3UHJvbWlzZSwgbV9j
YWxsRnJhbWUsIGZyb3plblBvaW50ZXIobV9ncmFwaC5mcmVlemVTdHJvbmcobV9ub2RlLT5zdHJ1
Y3R1cmUoKS5nZXQoKSkpKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUt
PmlzSW50ZXJuYWxQcm9taXNlKCkgPyBvcGVyYXRpb25OZXdJbnRlcm5hbFByb21pc2UgOiBvcGVy
YXRpb25OZXdQcm9taXNlKSwgbV9jYWxsRnJhbWUsIGZyb3plblBvaW50ZXIobV9ncmFwaC5mcmVl
emVTdHJvbmcobV9ub2RlLT5zdHJ1Y3R1cmUoKS5nZXQoKSkpKSk7CiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKQEAgLTU5NjQsNyArNTk1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgZnJv
emVuUG9pbnRlcihtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX25vZGUtPnN0cnVjdHVyZSgpLmdldCgp
KSkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2
bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbiksIG1fY2FsbEZy
YW1lLCBmcm96ZW5Qb2ludGVyKG1fZ3JhcGguZnJlZXplU3Ryb25nKG1fbm9kZS0+c3RydWN0dXJl
KCkuZ2V0KCkpKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC02MDE3LDExICs2
MDExLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlTmV3U3ltYm9sKCkKICAgICB7CiAg
ICAgICAgIGlmICghbV9ub2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uTmV3U3ltYm9sLCBtX2NhbGxGcmFtZSkpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbk5ld1N5bWJvbCksIG1fY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IEtub3duU3RyaW5nVXNlKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5
cGUoKSwgb3BlcmF0aW9uTmV3U3ltYm9sV2l0aERlc2NyaXB0aW9uLCBtX2NhbGxGcmFtZSwgbG93
U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKHBv
aW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdTeW1ib2xXaXRoRGVzY3Jp
cHRpb24pLCBtX2NhbGxGcmFtZSwgbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAg
fQogCiAgICAgdm9pZCBjb21waWxlTmV3QXJyYXkoKQpAQCAtNjA4Miw3ICs2MDc2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmICghbV9ub2RlLT5udW1DaGlsZHJlbigpKSB7CiAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBJbnQ2NCwgb3Bl
cmF0aW9uTmV3RW1wdHlBcnJheSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAgSW50NjQs
IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdFbXB0eUFycmF5KSwgbV9jYWxsRnJhbWUsCiAg
ICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZShzdHJ1Y3R1cmUpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KQEAgLTYxMTAsNyArNjEwNCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihzY3JhdGNoU2l6ZSksIG1fb3V0LmFic29sdXRlKHNjcmF0
Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSk7CiAgICAgICAgIAogICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbk5ld0Fy
cmF5LCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgIEludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXkpLCBtX2NhbGxGcmFtZSwKICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmUo
c3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIoYnVmZmVyKSwKICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSkpOwogICAgICAgICAKQEAgLTYyOTks
NyArNjI5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBtX291dC5zdG9yZVB0
cihtX291dC5jb25zdEludFB0cihzY3JhdGNoU2l6ZSksIG1fb3V0LmFic29sdXRlKHNjcmF0Y2hC
dWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQg
PSB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNwcmVhZFNsb3csIG1fY2FsbEZy
YW1lLCBtX291dC5jb25zdEludFB0cihidWZmZXIpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+
bnVtQ2hpbGRyZW4oKSkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU3ByZWFkU2xvdyksIG1fY2FsbEZy
YW1lLCBtX291dC5jb25zdEludFB0cihidWZmZXIpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+
bnVtQ2hpbGRyZW4oKSkpOwogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0
cigwKSwgbV9vdXQuYWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3Ro
KCkpKTsKIAogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CkBAIC02MzI5LDcgKzYzMjMsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbCgKLSAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25DcmVhdGVUaGlzLCBtX2NhbGxGcmFt
ZSwgY2FsbGVlLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpKTsK
KyAgICAgICAgICAgIEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpcyks
IG1fY2FsbEZyYW1lLCBjYWxsZWUsIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5pbmxpbmVDYXBh
Y2l0eSgpKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC02Mzg4LDcgKzYzODIs
NyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBtX25vZGUt
PmlzSW50ZXJuYWxQcm9taXNlKCkgPyBvcGVyYXRpb25DcmVhdGVJbnRlcm5hbFByb21pc2UgOiBv
cGVyYXRpb25DcmVhdGVQcm9taXNlLCBtX2NhbGxGcmFtZSwgY2FsbGVlLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3Iodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24obV9ub2RlLT5pc0ludGVybmFs
UHJvbWlzZSgpID8gb3BlcmF0aW9uQ3JlYXRlSW50ZXJuYWxQcm9taXNlIDogb3BlcmF0aW9uQ3Jl
YXRlUHJvbWlzZSksIG1fY2FsbEZyYW1lLCBjYWxsZWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVj
dCkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNjQzOSw3ICs2NDMzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uLCBt
X2NhbGxGcmFtZSwgY2FsbGVlLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpKSk7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uKSwgbV9jYWxsRnJhbWUsIGNhbGxlZSwgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC02NDc0
LDcgKzY0NjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KHNsb3dBbGxvY2F0aW9uLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd0ZpeGVkQXJyYXkgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9w
ZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludDMyKGlt
bXV0YWJsZUJ1dHRlcmZseS0+bGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93Rml4ZWRBcnJheSA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXkpLCBtX2NhbGxGcmFtZSwgbV9v
dXQuY29uc3RJbnQzMihpbW11dGFibGVCdXR0ZXJmbHktPmxlbmd0aCgpKSkpOwogICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTY1MTksNyArNjUxMyw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBtX291dC5qdW1wKGxvb3BIZWFkZXIpOwogCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhzbG93QWxsb2NhdGlvbiwgbG9vcEhlYWRlcik7Ci0gICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBzbG93QXJyYXkgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCks
IG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXksIG1fY2FsbEZyYW1lLCBsZW5ndGgpKTsKKyAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dBcnJheSA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9p
bnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXkpLCBt
X2NhbGxGcmFtZSwgbGVuZ3RoKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGxvb3BIZWFkZXIp
OwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhsb29wSGVhZGVyLCBsb29wQm9keSk7CkBA
IC02NjIxLDE0ICs2NjE1LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5
cGUoKSwgb3BlcmF0aW9uU3ByZWFkRmFzdEFycmF5LCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1D
YWxsKHBvaW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TcHJlYWRGYXN0QXJy
YXkpLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CiAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwg
b3BlcmF0aW9uU3ByZWFkR2VuZXJpYywgbV9jYWxsRnJhbWUsIGFyZ3VtZW50KTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uU3ByZWFkR2VuZXJpYyksIG1fY2FsbEZyYW1lLCBhcmd1bWVudCk7CiAKICAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KQEAgLTY2NDksNyArNjY0Myw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgTFZhbHVlIHNs
b3dBcnJheSA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIG1fY2FsbEZy
YW1lLCB3ZWFrU3RydWN0dXJlKHN0cnVjdHVyZSksIGZyb3plblBvaW50ZXIobV9ub2RlLT5jZWxs
T3BlcmFuZCgpKSk7CisgICAgICAgICAgICBMVmFsdWUgc2xvd0FycmF5ID0gdm1DYWxsKEludDY0
LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIpLCBtX2NhbGxGcmFtZSwg
d2Vha1N0cnVjdHVyZShzdHJ1Y3R1cmUpLCBmcm96ZW5Qb2ludGVyKG1fbm9kZS0+Y2VsbE9wZXJh
bmQoKSkpOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcihzbG93QXJyYXkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
CkBAIC02NjYxLDcgKzY2NTUsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKLSAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25OZXdB
cnJheUJ1ZmZlciwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICBJbnQ2NCwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKSwgbV9jYWxsRnJhbWUsCiAgICAgICAgICAgICB3
ZWFrU3RydWN0dXJlKHN0cnVjdHVyZSksIGZyb3plblBvaW50ZXIobV9ub2RlLT5jZWxsT3BlcmFu
ZCgpKSkpOwogICAgIH0KIApAQCAtNjY4Niw3ICs2NjgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fb3V0LmFib3ZlT3JFcXVhbChwdWJsaWNMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoTUlO
X0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpLAogICAgICAgICAgICAgd2Vha1N0
cnVjdHVyZShtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkpKSwKICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmUoc3RydWN0dXJlKSk7Ci0gICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBtX2NhbGxG
cmFtZSwgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCwgbV9vdXQuaW50UHRyWmVybykpOwor
ICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemUpLCBtX2NhbGxGcmFtZSwgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xl
bmd0aCwgbV9vdXQuaW50UHRyWmVybykpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZU5ld1R5
cGVkQXJyYXkoKQpAQCAtNjc4MSw3ICs2Nzc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExW
YWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICAgICAgcG9pbnRlclR5cGUo
KSwgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUodHlwZWRBcnJh
eVR5cGUpLAorICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZSh0eXBlZEFycmF5VHlw
ZSkpLAogICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHkodHlwZWRBcnJheVR5cGUpKSwgYXJn
dW1lbnQpOwogCiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CkBAIC02ODIxLDcgKzY4
MTUsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIGlmICghKGFic3RyYWN0VmFsdWUobV9ub2RlLT5jaGls
ZDEoKSkubV90eXBlICYgU3BlY0J5dGVjb2RlTnVtYmVyKSkKLSAgICAgICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25Ub051bWJlciwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvblRvTnVtYmVyKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90TnVtYmVyID0gbV9vdXQubmV3QmxvY2soKTsKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBA
IC02ODM0LDcgKzY4MjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gV2UgaGF2ZSBzZXZl
cmFsIGF0dGVtcHRzIHRvIHJlbW92ZSBUb051bWJlci4gQnV0IFRvTnVtYmVyIHN0aWxsIGV4aXN0
cy4KICAgICAgICAgICAgIC8vIEl0IG1lYW5zIHRoYXQgY29udmVydGluZyBub24tbnVtYmVycyB0
byBudW1iZXJzIGJ5IHRoaXMgVG9OdW1iZXIgaXMgbm90IHJhcmUuCiAgICAgICAgICAgICAvLyBJ
bnN0ZWFkIG9mIHRoZSBsYXp5IHNsb3cgcGF0aCBnZW5lcmF0b3IsIHdlIGNhbGwgdGhlIG9wZXJh
dGlvbiBoZXJlLgotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvblRvTnVtYmVyLCBtX2NhbGxGcmFtZSwgdmFs
dWUpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3Iodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uVG9OdW1iZXIpLCBtX2Nh
bGxGcmFtZSwgdmFsdWUpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
IAogICAgICAgICAgICAgLy8gY29udGludWF0aW9uIGNhc2UuCkBAIC02OTE1LDE3ICs2OTA5LDE2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmdQcmVkaWNhdGUs
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90U3RyaW5nKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGludWF0aW9uKTsKLSAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAgICAgICBMVmFsdWUgb3BlcmF0aW9uOwog
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9ub2RlLT5vcCgpICE9IFN0cmluZ1ZhbHVlT2YpOwot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgbV9ub2RlLT5vcCgpID09IFRv
U3RyaW5nID8gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwgOiBvcGVyYXRpb25DYWxsU3RyaW5nQ29u
c3RydWN0b3JPbkNlbGwsIG1fY2FsbEZyYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBUb1N0cmluZyA/IG9wZXJh
dGlvblRvU3RyaW5nT25DZWxsIDogb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yT25DZWxs
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXV0byogb3BlcmF0aW9u
ID0gbV9ub2RlLT5vcCgpID09IFRvU3RyaW5nCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0g
bV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBUb1N0cmluZwogICAgICAgICAgICAgICAg
ICAgICA/IG9wZXJhdGlvblRvU3RyaW5nIDogbV9ub2RlLT5vcCgpID09IFN0cmluZ1ZhbHVlT2YK
LSAgICAgICAgICAgICAgICAgICAgPyBvcGVyYXRpb25TdHJpbmdWYWx1ZU9mIDogb3BlcmF0aW9u
Q2FsbFN0cmluZ0NvbnN0cnVjdG9yOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICA/IG9wZXJhdGlvblN0cmluZ1ZhbHVlT2YgOiBvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0
b3IpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVk
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHJlc3VsdCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjb252ZXJ0ZWRSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb24s
IG1fY2FsbEZyYW1lLCB2YWx1ZSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKQEAgLTY5MzQsMTUgKzY5MjcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uSW50MzJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4LCBtX2NhbGxGcmFt
ZSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50MzIoMTApKSk7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkludDMyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCksIG1fY2FsbEZyYW1lLCBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnQzMigxMCkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgotICAgICAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkludDUyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCwgbV9j
YWxsRnJhbWUsIGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdElu
dDMyKDEwKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25JbnQ1MlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgpLCBtX2NhbGxGcmFt
ZSwgbG93U3RyaWN0SW50NTIobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50MzIoMTAp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0g
ICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRG91YmxlVG9TdHJp
bmdXaXRoVmFsaWRSYWRpeCwgbV9jYWxsRnJhbWUsIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSwgbV9vdXQuY29uc3RJbnQzMigxMCkpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxs
KEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRG91YmxlVG9TdHJpbmdXaXRoVmFsaWRS
YWRpeCksIG1fY2FsbEZyYW1lLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNv
bnN0SW50MzIoMTApKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDoKQEAgLTY5NzMsNyArNjk2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBtX291dC5hcHBlbmRUbyhpc09iamVjdENhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBJbnQ2NCwg
b3BlcmF0aW9uVG9QcmltaXRpdmUsIG1fY2FsbEZyYW1lLCB2YWx1ZSkpKTsKKyAgICAgICAgICAg
IEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uVG9QcmltaXRpdmUpLCBtX2NhbGxGcmFt
ZSwgdmFsdWUpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNzE2
OSw3ICs3MTYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBWZWN0b3I8VmFs
dWVGcm9tQmxvY2ssIDQ+IHJlc3VsdHM7CiAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcih2bUNhbGwoCi0gICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nLAorICAgICAgICAgICAgSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TaW5n
bGVDaGFyYWN0ZXJTdHJpbmcpLAogICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGNoYXIxNkJpdFZh
bHVlKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAK
QEAgLTcyMTQsNyArNzIwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKAot
ICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludCwgbV9jYWxs
RnJhbWUsIGJhc2UsIGluZGV4KSkpOworICAgICAgICAgICAgICAgIEludDY0LCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5k
ZXgpKSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CkBAIC03MzMzLDcgKzczMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAg
ICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9u
U3RyaW5nRnJvbUNoYXJDb2RlVW50eXBlZCwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAg
SW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGVVbnR5cGVk
KSwgbV9jYWxsRnJhbWUsCiAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShjaGlsZEVkZ2UpKTsK
ICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTczNjIsNyArNzM1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dD
YXNlLCBjb250aW51YXRpb24pOwogCiAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSB2
bUNhbGwoCi0gICAgICAgICAgICBwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25TdHJpbmdGcm9tQ2hh
ckNvZGUsIG1fY2FsbEZyYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICBwb2ludGVyVHlwZSgpLCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKSwgbV9jYWxsRnJhbWUs
IHZhbHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cihzbG93UmVzdWx0VmFsdWUpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAK
QEAgLTc4ODYsNyArNzg3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFRyaXZpYWxseUVxdWFsQ2FzZSwgY29udGludWF0
aW9uKTsKIAogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcihtX291dC5ub3ROdWxsKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgp
LCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCkpKTsK
KyAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxKSwgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KSkpOwogICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTgxMTgsNyArODExMSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50
eXBlZFVzZSkpOwotICAgICAgICBzZXRCb29sZWFuKHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uU2Ft
ZVZhbHVlLCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRCb29sZWFuKHZtQ2FsbChJbnQz
MiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblNhbWVWYWx1ZSksIG1fY2FsbEZyYW1lLCBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoKQpAQCAtOTIzMCw3ICs5
MjIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2
bUNhbGwoCi0gICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgbV9jYWxs
RnJhbWUsIGpzQXJndW1lbnRzLAorICAgICAgICAgICAgSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25TaXplT2ZWYXJhcmdzKSwgbV9jYWxsRnJhbWUsIGpzQXJndW1lbnRzLAogICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKICAgICAgICAgCiAgICAgICAg
IC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3Rm
dWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKQEAgLTkyNTksNyArOTI1Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigzKSk7CiAgICAgICAg
IAogICAgICAgICB2bUNhbGwoCi0gICAgICAgICAgICBWb2lkLCBvcGVyYXRpb25Mb2FkVmFyYXJn
cywgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICBWb2lkLCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKICAgICAgICAgICAgIG1fb3V0LmNhc3RUb0lu
dDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9m
ZnNldCksCiAgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0
b3J5TWluaW11bSkpOwogICAgIH0KQEAgLTk2NTcsNyArOTY1MCw3IEBAIHByaXZhdGU6CiAKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obmVlZFJlc29s
dXRpb24sIHJlc29sdmVkKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dWYWx1ZSA9
IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3Bl
cmF0aW9uUmVzb2x2ZVJvcGUsIG1fY2FsbEZyYW1lLCBzdHJpbmdWYWx1ZSkpOworICAgICAgICAg
ICAgICAgIHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVz
b2x2ZVJvcGUpLCBtX2NhbGxGcmFtZSwgc3RyaW5nVmFsdWUpKTsKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAocmVzb2x2ZWQpOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhyZXNvbHZlZCwg
bGVuZ3RoSXMxKTsKQEAgLTk4NDUsNyArOTgzOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21w
aWxlVGhyb3coKQogICAgIHsKICAgICAgICAgTFZhbHVlIGVycm9yID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvblRocm93REZHLCBt
X2NhbGxGcmFtZSwgZXJyb3IpOyAKKyAgICAgICAgdm1DYWxsKFZvaWQsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25UaHJvd0RGRyksIG1fY2FsbEZyYW1lLCBlcnJvcik7IAogICAgICAgICAvLyB2
bUNhbGwoKSBkb2VzIGFuIGV4Y2VwdGlvbiBjaGVjayBzbyB3ZSBzaG91bGQgbmV2ZXIgcmVhY2gg
dGhpcy4KICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAgICB9CkBAIC05ODU0LDcgKzk4
NDcsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTFZhbHVlIGVycm9yTWVzc2FnZSA9IGxv
d1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIGVycm9yVHlwZSA9IG1f
b3V0LmNvbnN0SW50MzIobV9ub2RlLT5lcnJvclR5cGUoKSk7Ci0gICAgICAgIHZtQ2FsbChWb2lk
LCBvcGVyYXRpb25UaHJvd1N0YXRpY0Vycm9yLCBtX2NhbGxGcmFtZSwgZXJyb3JNZXNzYWdlLCBl
cnJvclR5cGUpOworICAgICAgICB2bUNhbGwoVm9pZCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
blRocm93U3RhdGljRXJyb3IpLCBtX2NhbGxGcmFtZSwgZXJyb3JNZXNzYWdlLCBlcnJvclR5cGUp
OwogICAgICAgICAvLyB2bUNhbGwoKSBkb2VzIGFuIGV4Y2VwdGlvbiBjaGVjayBzbyB3ZSBzaG91
bGQgbmV2ZXIgcmVhY2ggdGhpcy4KICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAgICB9
CkBAIC0xMDA4Nyw3ICsxMDA4MCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICB2bUNhbGwoSW50MzIsIG9wZXJhdGlv
bk1hcEhhc2gsIG1fY2FsbEZyYW1lLCBzdHJpbmcpKTsKKyAgICAgICAgICAgIHZtQ2FsbChJbnQz
MiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gpLCBtX2NhbGxGcmFtZSwgc3RyaW5n
KSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTEwMTc0LDcgKzEwMTY3LDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9u
KTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgIHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uTWFwSGFzaCwgbV9jYWxsRnJhbWUsIHZh
bHVlKSk7CisgICAgICAgICAgICB2bUNhbGwoSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25NYXBIYXNoKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKQEAgLTEwMzUxLDcgKzEwMzQ0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgbm90UHJlc2VudEluVGFibGUpOwogICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwK
LSAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSA/
IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCwgbV9j
YWxsRnJhbWUsIG1hcCwga2V5LCBoYXNoKSk7CisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24o
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlID8gb3BlcmF0aW9uSlNN
YXBGaW5kQnVja2V0IDogb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0KSwgbV9jYWxsRnJhbWUsIG1h
cCwga2V5LCBoYXNoKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAg
ICAgICBtX291dC5hcHBlbmRUbyhub3RQcmVzZW50SW5UYWJsZSwgY29udGludWF0aW9uKTsKQEAg
LTEwNDUwLDcgKzEwNDQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGtleSA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIExWYWx1ZSBoYXNoID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDMoKSk7CiAKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5
cGUoKSwgb3BlcmF0aW9uU2V0QWRkLCBtX2NhbGxGcmFtZSwgc2V0LCBrZXksIGhhc2gpKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvblNldEFkZCksIG1fY2FsbEZyYW1lLCBzZXQsIGtleSwgaGFzaCkpOwogICAgIH0KIAog
ICAgIHZvaWQgY29tcGlsZU1hcFNldCgpCkBAIC0xMDQ2MCw3ICsxMDQ1Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDIpKTsKICAgICAgICAgTFZhbHVlIGhhc2ggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMykpOwogCi0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKHBvaW50ZXJU
eXBlKCksIG9wZXJhdGlvbk1hcFNldCwgbV9jYWxsRnJhbWUsIG1hcCwga2V5LCB2YWx1ZSwgaGFz
aCkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uTWFwU2V0KSwgbV9jYWxsRnJhbWUsIG1hcCwga2V5LCB2YWx1ZSwgaGFz
aCkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVdlYWtNYXBHZXQoKQpAQCAtMTA1MjcsNyAr
MTA1MjAsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUga2V5ID0gbG93T2JqZWN0KG1fbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICBMVmFsdWUgaGFzaCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQzKCkpOwogCi0gICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25XZWFrU2V0QWRkLCBtX2Nh
bGxGcmFtZSwgc2V0LCBrZXksIGhhc2gpOworICAgICAgICB2bUNhbGwoVm9pZCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbldlYWtTZXRBZGQpLCBtX2NhbGxGcmFtZSwgc2V0LCBrZXksIGhhc2gp
OwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVdlYWtNYXBTZXQoKQpAQCAtMTA1MzcsNyArMTA1
MzAsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgIExWYWx1ZSBoYXNoID0gbG93SW50
MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKIAotICAgICAgICB2bUNhbGwoVm9p
ZCwgb3BlcmF0aW9uV2Vha01hcFNldCwgbV9jYWxsRnJhbWUsIG1hcCwga2V5LCB2YWx1ZSwgaGFz
aCk7CisgICAgICAgIHZtQ2FsbChWb2lkLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uV2Vha01h
cFNldCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSwgdmFsdWUsIGhhc2gpOwogICAgIH0KIAogICAg
IHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCkKQEAgLTEwNjgzLDcgKzEwNjc2LDcgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVJbkJ5VmFsKCkKICAgICB7Ci0gICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25JbkJ5VmFsLCBtX2NhbGxGcmFtZSwgbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOwor
ICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlWYWwpLCBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUluQnlJ
ZCgpCkBAIC0xMDg0Miw3ICsxMDgzNSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQ7Ci0gICAgICAgIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDMy
LCBvcGVyYXRpb25IYXNPd25Qcm9wZXJ0eSwgbV9jYWxsRnJhbWUsIG9iamVjdCwga2V5QXNWYWx1
ZSkpOworICAgICAgICBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQzMiwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc093blByb3BlcnR5KSwgbV9jYWxsRnJhbWUsIG9iamVj
dCwga2V5QXNWYWx1ZSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMDg1Niwx
NCArMTA4NDksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCkpIHsK
ICAgICAgICAgICAgIExWYWx1ZSByYWRpeCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwog
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2Up
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25QYXJzZUlu
dEdlbmVyaWMsIG1fY2FsbEZyYW1lLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCByYWRp
eCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uUGFyc2VJbnRHZW5lcmljKSwgbV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSksIHJhZGl4KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG9wZXJhdGlvblBhcnNlSW50U3RyaW5nLCBtX2NhbGxG
cmFtZSwgbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpLCByYWRpeCk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUGFyc2VJ
bnRTdHJpbmcpLCBtX2NhbGxGcmFtZSwgbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpLCByYWRp
eCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwo
SW50NjQsIG9wZXJhdGlvblBhcnNlSW50Tm9SYWRpeEdlbmVyaWMsIG1fY2FsbEZyYW1lLCBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB2bUNh
bGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25QYXJzZUludE5vUmFkaXhHZW5lcmlj
KSwgbV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9u
UGFyc2VJbnRTdHJpbmdOb1JhZGl4LCBtX2NhbGxGcmFtZSwgbG93U3RyaW5nKG1fbm9kZS0+Y2hp
bGQxKCkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25QYXJzZUludFN0cmluZ05vUmFkaXgpLCBtX2NhbGxGcmFtZSwgbG93
U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgfQogICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCk7CiAgICAgfQpAQCAtMTEwMTcsNyArMTEwMTAsNyBAQCBwcml2YXRlOgogICAgICAg
ICBMVmFsdWUgY29uc3RydWN0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICBMVmFsdWUgaGFzSW5zdGFuY2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOwogCi0g
ICAgICAgIHNldEJvb2xlYW4obV9vdXQubG9naWNhbE5vdChtX291dC5lcXVhbChtX291dC5jb25z
dEludDMyKDApLCB2bUNhbGwoSW50MzIsIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fY2Fs
bEZyYW1lLCB2YWx1ZSwgY29uc3RydWN0b3IsIGhhc0luc3RhbmNlKSkpKTsKKyAgICAgICAgc2V0
Qm9vbGVhbihtX291dC5sb2dpY2FsTm90KG1fb3V0LmVxdWFsKG1fb3V0LmNvbnN0SW50MzIoMCks
IHZtQ2FsbChJbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20p
LCBtX2NhbGxGcmFtZSwgdmFsdWUsIGNvbnN0cnVjdG9yLCBoYXNJbnN0YW5jZSkpKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUNvdW50RXhlY3V0aW9uKCkKQEAgLTExMDc4LDcgKzEx
MDcxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2Us
IGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBtX2NhbGxGcmFtZSwgYmFzZSwg
aW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5ub3Ra
ZXJvNjQodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5QnlJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlw
ZSkpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMTExMiw3ICsx
MTEwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJv
NjQodm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgbV9jYWxs
RnJhbWUsIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCBpbnRl
cm5hbE1ldGhvZFR5cGUpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwpAQCAtMTExNDUsNyArMTExMzgsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAg
bV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
QnlJbnQsIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwor
ICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCksIG1fY2FsbEZyYW1lLCBiYXNl
LCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKQEAgLTExMTU1LDcgKzExMTQ4LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBk
ZWZhdWx0OiB7CiAgICAgICAgICAgICBMVmFsdWUgaW50ZXJuYWxNZXRob2RUeXBlID0gbV9vdXQu
Y29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX25vZGUtPmludGVybmFsTWV0aG9kVHlw
ZSgpKSk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBtX2NhbGxGcmFtZSwgYmFzZSwg
aW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9v
dXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eUJ5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1l
dGhvZFR5cGUpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xMTE2NSw3ICsxMTE1OCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBMVmFsdWUgYmFz
ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIExWYWx1ZSBwcm9wZXJ0
eSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxs
KEludDY0LCBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIG1fY2FsbEZyYW1lLCBiYXNlLCBw
cm9wZXJ0eSkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9w
ZXJ0eSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KCkK
QEAgLTExMTkxLDcgKzExMTg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
d3JvbmdTdHJ1Y3R1cmVSZXN1bHQgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5l
cXVhbCgKICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRp
b25IYXNHZW5lcmljUHJvcGVydHksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSkpKTsKKyAg
ICAgICAgICAgICAgICB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNH
ZW5lcmljUHJvcGVydHkpLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHkpKSk7CiAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTExMjM3LDcgKzExMjMwLDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd0Nhc2VSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAg
ICB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJv
cGVydHkpKTsKKyAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHByb3BlcnR5KSk7CiAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKQEAgLTExMjUzLDkgKzExMjQ2LDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKQogICAgIHsKICAgICAgICAgaWYgKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCi0gICAgICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgbV9j
YWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlF
bnVtZXJhdG9yQ2VsbCksIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVy
YXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIG1fY2FsbEZyYW1lLCBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciksIG1fY2FsbEZyYW1l
LCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21w
aWxlR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKCkKQEAgLTExMzEzLDcgKzExMzA2LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkKICAgICB7CiAgICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywgbV9jYWxsRnJhbWUs
IGluZGV4KSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uVG9JbmRleFN0cmluZyksIG1fY2FsbEZyYW1lLCBpbmRleCkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCkBAIC0xMTcz
MCw3ICsxMTcyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDMo
KS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIGFyZ3Vt
ZW50ID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgICAgIExWYWx1
ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25S
ZWdFeHBFeGVjU3RyaW5nLCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAgICAg
ICAgICAgICBJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cEV4ZWNTdHJpbmcp
LCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICBiYXNlLCBh
cmd1bWVudCk7CiAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTExNzM4LDcgKzExNzMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMygpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAg
ICAgICAgSW50NjQsIG9wZXJhdGlvblJlZ0V4cEV4ZWMsIG1fY2FsbEZyYW1lLCBnbG9iYWxPYmpl
Y3QsIGJhc2UsCisgICAgICAgICAgICAgICAgSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25SZWdFeHBFeGVjKSwgbV9jYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgYmFzZSwKICAgICAgICAg
ICAgICAgICBhcmd1bWVudCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMTc0Nyw3ICsxMTc0MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgTFZh
bHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25SZWdFeHBF
eGVjR2VuZXJpYywgbV9jYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgYmFzZSwKKyAgICAgICAgICAg
IEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVnRXhwRXhlY0dlbmVyaWMpLCBtX2Nh
bGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBiYXNlLAogICAgICAgICAgICAgYXJndW1lbnQpOwogICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQpAQCAtMTE3NTcsNyArMTE3NTAsNyBAQCBw
cml2YXRlOgogICAgICAgICBMVmFsdWUgZ2xvYmFsT2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgSW50
NjQsIG9wZXJhdGlvblJlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreSwgbV9jYWxsRnJhbWUsIGds
b2JhbE9iamVjdCwgZnJvemVuUG9pbnRlcihtX25vZGUtPmNlbGxPcGVyYW5kKCkpLCBhcmd1bWVu
dCk7CisgICAgICAgICAgICBJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cEV4
ZWNOb25HbG9iYWxPclN0aWNreSksIG1fY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGZyb3plblBv
aW50ZXIobV9ub2RlLT5jZWxsT3BlcmFuZCgpKSwgYXJndW1lbnQpOwogICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CiAgICAgfQogCkBAIC0xMTc2Niw3ICsxMTc1OSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIExWYWx1ZSBnbG9iYWxPYmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBJbnQ2NCwgb3BlcmF0
aW9uUmVnRXhwTWF0Y2hGYXN0R2xvYmFsU3RyaW5nLCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0
LCBmcm96ZW5Qb2ludGVyKG1fbm9kZS0+Y2VsbE9wZXJhbmQoKSksIGFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVnRXhwTWF0Y2hGYXN0R2xv
YmFsU3RyaW5nKSwgbV9jYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgZnJvemVuUG9pbnRlcihtX25v
ZGUtPmNlbGxPcGVyYW5kKCkpLCBhcmd1bWVudCk7CiAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0
KTsKICAgICB9CiAKQEAgLTExNzgwLDcgKzExNzczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKICAgICAgICAg
ICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDMoKSk7CiAg
ICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICAg
ICAgSW50MzIsIG9wZXJhdGlvblJlZ0V4cFRlc3RTdHJpbmcsIG1fY2FsbEZyYW1lLCBnbG9iYWxP
YmplY3QsCisgICAgICAgICAgICAgICAgICAgIEludDMyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uUmVnRXhwVGVzdFN0cmluZyksIG1fY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsCiAgICAgICAg
ICAgICAgICAgICAgIGJhc2UsIGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICBzZXRCb29sZWFu
KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTE3ODgsNyArMTE3ODEsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAg
ICAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uUmVnRXhwVGVzdCwgbV9jYWxsRnJhbWUsIGds
b2JhbE9iamVjdCwgYmFzZSwKKyAgICAgICAgICAgICAgICBJbnQzMiwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvblJlZ0V4cFRlc3QpLCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBiYXNlLAog
ICAgICAgICAgICAgICAgIGFyZ3VtZW50KTsKICAgICAgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNzk3LDcgKzExNzkwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAg
ICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOwogICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgSW50MzIsIG9wZXJhdGlv
blJlZ0V4cFRlc3RHZW5lcmljLCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBiYXNlLAorICAg
ICAgICAgICAgSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25SZWdFeHBUZXN0R2VuZXJp
YyksIG1fY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGJhc2UsCiAgICAgICAgICAgICBhcmd1bWVu
dCk7CiAgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKICAgICB9CkBAIC0xMTgwOCw3ICsxMTgw
MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93UmVnRXhwT2JqZWN0KG1f
bm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dTdHJpbmcobV9u
b2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAg
ICAgICBJbnQ2NCwgb3BlcmF0aW9uUmVnRXhwTWF0Y2hGYXN0U3RyaW5nLCBtX2NhbGxGcmFtZSwg
Z2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25SZWdFeHBNYXRjaEZhc3RTdHJpbmcpLCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LAogICAg
ICAgICAgICAgYmFzZSwgYXJndW1lbnQpOwogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAg
ICAgfQpAQCAtMTE4NTAsNyArMTE4NDMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxl
U2V0RnVuY3Rpb25OYW1lKCkKICAgICB7Ci0gICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25T
ZXRGdW5jdGlvbk5hbWUsIG1fY2FsbEZyYW1lLAorICAgICAgICB2bUNhbGwoVm9pZCwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSksIG1fY2FsbEZyYW1lLAogICAgICAg
ICAgICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MigpKSk7CiAgICAgfQogICAgIApAQCAtMTE4NjYsNyArMTE4NTksNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBMVmFsdWUgcmVnRXhwID0gbG93UmVnRXhwT2JqZWN0KG1fbm9kZS0+
Y2hpbGQyKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25TdHJpbmdQ
cm90b0Z1bmNSZXBsYWNlUmVnRXhwRW1wdHlTdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBw
b2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVw
bGFjZVJlZ0V4cEVtcHR5U3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1l
LCBzdHJpbmcsIHJlZ0V4cCk7CiAKICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1
bHQpOwpAQCAtMTE4NzksNyArMTE4NzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVl
IHJlcGxhY2UgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDMoKSk7CiAKICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwgb3Bl
cmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4cFN0cmluZywKKyAgICAgICAgICAgICAg
ICBwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5j
UmVwbGFjZVJlZ0V4cFN0cmluZyksCiAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIHN0cmlu
ZywgcmVnRXhwLCByZXBsYWNlKTsKIAogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwpA
QCAtMTE4OTMsNyArMTE4ODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2VhcmNoID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKIAogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1D
YWxsKAotICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5j
UmVwbGFjZUdlbmVyaWMsIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VHZW5lcmljKSwg
bV9jYWxsRnJhbWUsCiAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBz
ZWFyY2gsCiAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpKTsKIApAQCAt
MTIyMzcsNyArMTIyMzAsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAocHJldmlvdXNTdHJ1Y3R1
cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgICAgIHJldHVybiB2bUNh
bGwoCiAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwKLSAgICAgICAgICAgICAgICBvcGVy
YXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LAor
ICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwKICAgICAgICAgICAgICAgICBtX2Nh
bGxGcmFtZSwgb2JqZWN0KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEyMjYxLDcgKzEyMjU0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZl
SW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1f
b3V0LmNvbnN0SW50UHRyKG5ld1NpemUpOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICByZXR1cm4gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFBy
b3BlcnR5U3RvcmFnZSwgbV9jYWxsRnJhbWUsIG9iamVjdCwgbmV3QWxsb2NTaXplKTsKKyAgICAg
ICAgICAgIHJldHVybiB2bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBvYmplY3Qs
IG5ld0FsbG9jU2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbChuZXdTaXplKTsKQEAgLTEy
NTExLDcgKzEyNTA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKFN0cmluZ0lkZW50VXNlKSkgewogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dT
dHJpbmdJZGVudChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9
IGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgc2V0Qm9vbGVh
bihtX291dC5jYWxsV2l0aG91dFNpZGVFZmZlY3RzKEludDMyLCBtX291dC5vcGVyYXRpb24oc3Ry
aW5nSWRlbnRGdW5jdGlvbiksIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LmNhbGxXaXRob3V0U2lkZUVmZmVjdHMoSW50MzIsIHN0cmluZ0lkZW50RnVuY3Rpb24s
IGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTI1
MjIsNyArMTI1MTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG1f
bm9kZS0+Y2hpbGQyKCksIHJpZ2h0KTsKIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZt
Q2FsbCgKLSAgICAgICAgICAgICAgICBJbnQzMiwgc3RyaW5nRnVuY3Rpb24sCisgICAgICAgICAg
ICAgICAgSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihzdHJpbmdGdW5jdGlvbiksCiAgICAgICAgICAg
ICAgICAgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHNldEJvb2xlYW4o
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyNTk0LDcgKzEyNTg3LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhiaWdDaGFyYWN0ZXIsIGJpdHNDb250aW51
YXRpb24pOwogICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKAotICAg
ICAgICAgICAgSW50NjQsIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZywKKyAgICAgICAg
ICAgIEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KSwKICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBjaGFyMTZCaXRWYWx1ZSkpKTsKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogCkBAIC0xMjYwNiwxMSArMTI1OTksMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dDYXNlLCByb3BlU2xvd0Nhc2UpOwotICAgICAgICByZXN1bHRzLmFwcGVu
ZChtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvblN0cmluZ1N1YnN0
ciwgbV9jYWxsRnJhbWUsIHN0cmluZywgZnJvbSwgc3BhbikpKTsKKyAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uU3RyaW5nU3Vic3RyKSwgbV9jYWxsRnJhbWUsIHN0cmluZywgZnJvbSwgc3Bhbikp
KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHJvcGVTbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgcmVzdWx0cy5hcHBl
bmQobV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25TdHJpbmdTbGlj
ZSwgbV9jYWxsRnJhbWUsIHN0cmluZywgc3RhcnQsIGVuZCkpKTsKKyAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uU3RyaW5nU2xpY2UpLCBtX2NhbGxGcmFtZSwgc3RyaW5nLCBzdGFydCwgZW5kKSkp
OwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMjY2NSw3ICsxMjY1OCw3IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7
CiAgICAgICAgIExWYWx1ZSBzbG93UGF0aEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBzdGFydElu
ZGV4Rm9yQ2FsbCwgaW5kZXhGcm9tQmxvY2spOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25Ub0xv
d2VyQ2FzZSwgbV9jYWxsRnJhbWUsIHN0cmluZywgc2xvd1BhdGhJbmRleCkpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlw
ZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uVG9Mb3dlckNhc2UpLCBtX2NhbGxGcmFtZSwg
c3RyaW5nLCBzbG93UGF0aEluZGV4KSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAg
LTEyNjgzLDEzICsxMjY3NiwxMyBAQCBwcml2YXRlOgogCiAgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAg
ICAgIHNldEpTVmFsdWUodm1DYWxsKHBvaW50ZXJUeXBlKCksIHZhbGlkUmFkaXhJc0d1YXJhbnRl
ZWQgPyBvcGVyYXRpb25JbnQzMlRvU3RyaW5nV2l0aFZhbGlkUmFkaXggOiBvcGVyYXRpb25JbnQz
MlRvU3RyaW5nLCBtX2NhbGxGcmFtZSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChw
b2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24odmFsaWRSYWRpeElzR3VhcmFudGVlZCA/IG9w
ZXJhdGlvbkludDMyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCA6IG9wZXJhdGlvbkludDMyVG9TdHJp
bmcpLCBtX2NhbGxGcmFtZSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQ1
MlJlcFVzZToKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKHBvaW50ZXJUeXBlKCksIHZh
bGlkUmFkaXhJc0d1YXJhbnRlZWQgPyBvcGVyYXRpb25JbnQ1MlRvU3RyaW5nV2l0aFZhbGlkUmFk
aXggOiBvcGVyYXRpb25JbnQ1MlRvU3RyaW5nLCBtX2NhbGxGcmFtZSwgbG93U3RyaWN0SW50NTIo
bV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291dC5vcGVyYXRpb24odmFs
aWRSYWRpeElzR3VhcmFudGVlZCA/IG9wZXJhdGlvbkludDUyVG9TdHJpbmdXaXRoVmFsaWRSYWRp
eCA6IG9wZXJhdGlvbkludDUyVG9TdHJpbmcpLCBtX2NhbGxGcmFtZSwgbG93U3RyaWN0SW50NTIo
bV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCB2YWxpZFJhZGl4SXNHdWFyYW50ZWVkID8gb3Bl
cmF0aW9uRG91YmxlVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCA6IG9wZXJhdGlvbkRvdWJsZVRvU3Ry
aW5nLCBtX2NhbGxGcmFtZSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRl
clR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKHZhbGlkUmFkaXhJc0d1YXJhbnRlZWQgPyBvcGVyYXRp
b25Eb3VibGVUb1N0cmluZ1dpdGhWYWxpZFJhZGl4IDogb3BlcmF0aW9uRG91YmxlVG9TdHJpbmcp
LCBtX2NhbGxGcmFtZSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTI3MDAsMTMgKzEy
NjkzLDEzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25JbnQzMlRvU3RyaW5nV2l0aFZh
bGlkUmFkaXgsIG1fY2FsbEZyYW1lLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQu
Y29uc3RJbnQzMihtX25vZGUtPnZhbGlkUmFkaXhDb25zdGFudCgpKSkpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkludDMyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCksIG1fY2FsbEZyYW1lLCBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPnZhbGlkUmFkaXhDb25zdGFu
dCgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6Ci0g
ICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25JbnQ1
MlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgsIG1fY2FsbEZyYW1lLCBsb3dTdHJpY3RJbnQ1MihtX25v
ZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPnZhbGlkUmFkaXhDb25zdGFu
dCgpKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5cGUoKSwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkludDUyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCksIG1fY2Fs
bEZyYW1lLCBsb3dTdHJpY3RJbnQ1MihtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnQz
MihtX25vZGUtPnZhbGlkUmFkaXhDb25zdGFudCgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwo
cG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uRG91YmxlVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCwgbV9j
YWxsRnJhbWUsIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnQzMiht
X25vZGUtPnZhbGlkUmFkaXhDb25zdGFudCgpKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkRvdWJsZVRvU3Ry
aW5nV2l0aFZhbGlkUmFkaXgpLCBtX2NhbGxGcmFtZSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+dmFsaWRSYWRpeENvbnN0YW50KCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMjcxNiwyNyArMTI3MDksMjcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKCkK
ICAgICB7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZp
ZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwotICAgICAgICBzZXRKU1ZhbHVlKHZt
Q2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNE
ZWNsSW5FdmFsLCBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQu
Y29uc3RJbnRQdHIodWlkKSkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlw
ZSgpLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5j
RGVjbEluRXZhbCksIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291
dC5jb25zdEludFB0cih1aWQpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlUmVzb2x2ZVNj
b3BlKCkKICAgICB7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwotICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25SZXNvbHZlU2NvcGUsCisgICAgICAg
IHNldEpTVmFsdWUodm1DYWxsKHBvaW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25SZXNvbHZlU2NvcGUpLAogICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKICAgICB9CiAKICAgICB2b2lk
IGNvbXBpbGVHZXREeW5hbWljVmFyKCkKICAgICB7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCld
OwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0RHluYW1pY1Zh
ciwKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25HZXREeW5hbWljVmFyKSwKICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludFB0cih1aWQpLCBtX291dC5jb25zdEludDMy
KG1fbm9kZS0+Z2V0UHV0SW5mbygpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVB1dER5
bmFtaWNWYXIoKQogICAgIHsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0gICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKFZvaWQsIG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKSA/IG9wZXJhdGlvblB1dER5bmFtaWNWYXJTdHJpY3QgOiBvcGVyYXRpb25Q
dXREeW5hbWljVmFyTm9uU3RyaWN0LAorICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChWb2lkLCBt
X291dC5vcGVyYXRpb24obV9ncmFwaC5pc1N0cmljdE1vZGVGb3IobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMpID8gb3BlcmF0aW9uUHV0RHluYW1pY1ZhclN0cmljdCA6IG9wZXJhdGlvblB1dER5bmFt
aWNWYXJOb25TdHJpY3QpLAogICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50
UHRyKHVpZCksIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5nZXRQdXRJbmZvKCkpKSk7CiAgICAg
fQogICAgIApAQCAtMTI4NjgsMTMgKzEyODYxLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8g
ZnVuY3Rpb24gPSBDRnVuY3Rpb25QdHIoc2lnbmF0dXJlLT5mdW5jdGlvbldpdGhvdXRUeXBlQ2hl
Y2spOwogICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CiAgICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnBy
ZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FUD4oZnVuY3Rpb24uZ2V0KCkpLCBtX2NhbGxGcmFtZSwg
b3BlcmFuZHNbMF0pOworICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBtX291dC5v
cGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FUD4oZnVuY3Rpb24uZ2V0
KCkpKSwgbV9jYWxsRnJhbWUsIG9wZXJhbmRzWzBdKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIDI6Ci0gICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRVBQPihmdW5jdGlvbi5nZXQoKSksIG1fY2FsbEZyYW1l
LCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pOworICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxs
KEludDY0LCBtX291dC5vcGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9F
UFA+KGZ1bmN0aW9uLmdldCgpKSksIG1fY2FsbEZyYW1lLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNb
MV0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHJl
c3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FUFBQ
PihmdW5jdGlvbi5nZXQoKSksIG1fY2FsbEZyYW1lLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0s
IG9wZXJhbmRzWzJdKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgbV9vdXQu
b3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRVBQUD4oZnVuY3Rpb24u
Z2V0KCkpKSwgbV9jYWxsRnJhbWUsIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNb
Ml0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTI4OTIsNyArMTI4ODUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLy8gU2luY2UgdGhlIGdldHRlciBkb2VzIG5vdCBoYXZlIGNvZGUg
c2V0dGluZyB0b3BDYWxsRnJhbWUsIEFzIGlzIHRoZSBzYW1lIHRvIElDLCB3ZSBzaG91bGQgc2V0
IHRvcENhbGxGcmFtZSBpbiBjYWxsZXIgc2lkZS4KICAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICAgICAg
ICAgICAgIHNldEpTVmFsdWUoCi0gICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBiaXR3aXNl
X2Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21HZXR0ZXI+KG1fbm9kZS0+Y2FsbERPTUdl
dHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXIucmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVz
czxDRnVuY3Rpb25QdHJUYWc+KCkpLAorICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG1fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JH
ZXR0ZXIucmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxDRnVuY3Rpb25QdHJUYWc+KCkpLAogICAg
ICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwg
bV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+Y2FsbERPTUdl
dHRlckRhdGEoKS0+aWRlbnRpZmllck51bWJlcl0pKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTEzMzk3LDcgKzEzMzkwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwogICAgICAgICBWYWx1
ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdE51bGwodm1DYWxs
KAotICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwgaGVscGVyRnVuY3Rpb24sIG1fY2FsbEZyYW1l
LCBsZWZ0LCByaWdodCkpKTsKKyAgICAgICAgICAgIHBvaW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJh
dGlvbihoZWxwZXJGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCkpKTsKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMzQ4OSw3ICsxMzQ4Miw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwog
CiAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCi0gICAgICAgICAgICBJ
bnQ2NCwgb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAg
IEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKSwgbV9jYWxs
RnJhbWUsCiAgICAgICAgICAgICBsZWZ0SlNTdHJpbmcsIHJpZ2h0SlNTdHJpbmcpOwogICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbihz
bG93UmVzdWx0VmFsdWUpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAt
MTQxMzQsNyArMTQxMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAg
ICAgICAgCi0gICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tl
bkxvZywgbV9jYWxsRnJhbWUpOworICAgICAgICB2bUNhbGwoVm9pZCwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nKSwgbV9jYWxsRnJhbWUpOwogICAgICAg
ICAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5sb2FkUHRyKGFkZHJlc3NPZkxvZ0N1cnNvcikpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CkBAIC0xNDQyNSw3ICsxNDQxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRz
Q2FzZSwgaG9sZUNhc2UpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2
bUNhbGwoCi0gICAgICAgICAgICAgICAgICAgIFZvaWQsIHNsb3dQYXRoRnVuY3Rpb24sCisgICAg
ICAgICAgICAgICAgICAgIFZvaWQsIG1fb3V0Lm9wZXJhdGlvbihzbG93UGF0aEZ1bmN0aW9uKSwK
ICAgICAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKQEAgLTE0Nzk3LDcgKzE0NzkwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDM2OQogICAgICAgICAKICAgICAg
ICAgTFZhbHVlIGJyYW5jaE9mZnNldCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIEludDMyLCBvcGVy
YXRpb25Td2l0Y2hTdHJpbmdBbmRHZXRCcmFuY2hPZmZzZXQsCisgICAgICAgICAgICBJbnQzMiwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldCks
CiAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+c3dpdGNo
VGFibGVJbmRleCksIHN0cmluZyk7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdKdW1wVGFibGUm
IHRhYmxlID0gY29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hU
YWJsZUluZGV4KTsKQEAgLTE3MDMxLDcgKzE3MDI0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKICAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBjYWxsID0gdm1DYWxsKFZvaWQsIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
LCBtX2NhbGxGcmFtZSwgYmFzZSk7CisgICAgICAgIExWYWx1ZSBjYWxsID0gdm1DYWxsKFZvaWQs
IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCksIG1fY2FsbEZy
YW1lLCBiYXNlKTsKICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZUNDYWxsUmVhZCgmbV9oZWFwcy5y
b290LCBjYWxsKTsKICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZUNDYWxsV3JpdGUoJm1faGVhcHMu
SlNDZWxsX2NlbGxTdGF0ZSwgY2FsbCk7CiAgICAgICAgIApAQCAtMTcxMjQsMTMgKzE3MTE3LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrNjQodmFsdWUsIG1f
b3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgbV9vdXQuemVyb0V4dChsaW1pdCwgSW50NjQpKTsK
ICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUuLi4gQXJncz4KLSAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIE9wZXJhdGlvblR5cGUg
ZnVuY3Rpb24sIEFyZ3MmJi4uLiBhcmdzKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+
CisgICAgTFZhbHVlIHZtQ2FsbChMVHlwZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIEFyZ3MmJi4u
LiBhcmdzKQogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1lPE9wZXJh
dGlvblR5cGUsIExWYWx1ZT46OnZhbHVlKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChGdW5jdGlv
blRyYWl0czxPcGVyYXRpb25UeXBlPjo6Y0NhbGxBcml0eSgpID09IHNpemVvZi4uLihBcmdzKSwg
IlNhbml0eSBjaGVjayIpOwogICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5jYWxsKHR5cGUsIG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5jYWxsKHR5cGUsIGZ1bmN0aW9uLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogICAg
ICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBtX25vZGUpKQogICAgICAgICAgICAgY2FsbENoZWNr
KCk7CiAgICAgICAgIGVsc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29k
ZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAyNTA4NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1MiwxNiBA
QCBib29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgQWJzdHJhCiAKIHZvaWQgQ29kZUJs
b2NrU2V0OjpjbGVhckN1cnJlbnRseUV4ZWN1dGluZygpCiB7CisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOwogICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmNsZWFyKCk7CiB9CiAK
K2Jvb2wgQ29kZUJsb2NrU2V0Ojppc0N1cnJlbnRseUV4ZWN1dGluZyhDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgcmV0dXJu
IG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9jayk7Cit9CisKIHZvaWQgQ29k
ZUJsb2NrU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0
LmgJKHJldmlzaW9uIDI1MDg1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIHB1YmxpYzoKICAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogY2FuZGlkYXRlQ29kZUJs
b2NrKTsKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAKKyAgICBib29s
IGlzQ3VycmVudGx5RXhlY3V0aW5nKENvZGVCbG9jayopOworCiAgICAgLy8gVmlzaXRzIGVhY2gg
Q29kZUJsb2NrIGluIHRoZSBoZWFwIHVudGlsIHRoZSB2aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMg
dHJ1ZQogICAgIC8vIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVu
dGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMgYmVlbgogICAgIC8vIHZpc2l0ZWQuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjUwODU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTksNyArMTUx
OSw3IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdDQ28KICAgICBwcnVu
ZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKCk7CiAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsK
ICAgICBzbmFwc2hvdFVuc3dlcHQoKTsKLSAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzKCk7CisgICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOyAvLyBXZSByZWx5
IG9uIHRoaXMgYmVmb3JlIHJ1bm5pbmcgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29k
ZUJsb2NrJ3MgZmluYWxpemVyIHJlbGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5n
LgogICAgIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwogICAgIG5vdGlmeUlu
Y3JlbWVudGFsU3dlZXBlcigpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkocmV2aXNpb24gMjUwODU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNiArMzk4LDcgQEAgcHVibGljOgogCiAgICAgSGFzaE1h
cDxKU0ltbXV0YWJsZUJ1dHRlcmZseSosIEpTU3RyaW5nKj4gaW1tdXRhYmxlQnV0dGVyZmx5VG9T
dHJpbmdDYWNoZTsKIAorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2Nv
cGU7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjUwODU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjM2LDYgKzYzNiwxNCBAQCB2b2lkIGR1bXBKSVRNZW1vcnkoY29u
c3Qgdm9pZCogZHN0LCBjb25zCiAjZW5kaWYKIH0KIAorLy9FeGVjdXRhYmxlTWVtb3J5SGFuZGxl
Ojp+RXhlY3V0YWJsZU1lbW9yeUhhbmRsZSgpCisvL3sKKy8vICAgICAgICAvL09QX0lOVDMgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweENDLAorLy8gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplSW5CeXRlcygpOyArK2kpIHsKKy8vICAgICAgICBzdGFydCgpLnVudGFnZ2VkUHRyPGNo
YXIqPigpW2ldID0gMHhDQzsKKy8vICAgIH0KKy8vfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMjUwODU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDcgKzYwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGppdEFsbG9jYXRpb25HcmFudWxlID0gMzI7CiAKLXR5cGVkZWYgV1RGOjpNZXRhQWxsb2Nh
dG9ySGFuZGxlIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU7Cit1c2luZyBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlID0gV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOworLy9jbGFzcyBFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlIDogcHVibGljIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSB7CisvLyAgICB+RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZSgpOworLy99OwogCiBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9y
QmFzZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjUwODU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
MCw2ICszNzAsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0T3B0aW9ucygpCiAKIHN0YXRpYyB2b2lk
IHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIE9wdGlvbnM6OmZvcmNlT1NSRXhp
dFRvTExJbnQoKSA9IDE7CiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlk
YXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTA4NTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRh
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTEgQEAgTWV0YUFsbG9j
YXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbAogewogICAgIEFTU0VSVChtX2FsbG9jYXRv
cik7CiAgICAgbV9hbGxvY2F0b3ItPnJlbGVhc2UodGhpcyk7CisKKyAgICAvL09QX0lOVDMgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweENDLAorICAgIC8vZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplSW5CeXRlcygpOyArK2kpIHsKKyAgICAvLyAgICBzdGFydCgpLnVudGFnZ2VkUHRyPGNo
YXIqPigpW2ldID0gMHhDQzsKKyAgICAvL30KIH0KIAogdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxl
OjpzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387411</attachid>
            <date>2020-01-10 18:15:32 -0800</date>
            <delta_ts>2020-01-13 14:55:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>43217</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTQzNDkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDIwLTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRocm93IGF3YXkgYmFzZWxpbmUgY29kZSBpZiB0aGVyZSBpcyBhbiBv
cHRpbWl6ZWQgcmVwbGFjZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMjUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogc3RyZXNzL2RmZy1jb21wYXJlLWVxLXZpYS1ub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZC5qczoKKyAgICAgICAgKiBzdHJlc3MvZ2V0
dGVyLXNldHRlci1pbmxpbmluZy1zaG91bGQtZW1pdC1tb3ZoaW50LmpzOgorICAgICAgICAqIHN0
cmVzcy9tYWtlLWRpY3Rpb25hcnktcmVwYXRjaC5qczoKKyAgICAgICAgKiBzdHJlc3MvbWVyZ2lu
Zy1pYy12YXJpYW50cy1zaG91bGQtYmFpbC1pZi1zdHJ1Y3R1cmVzLW92ZXJsYXAuanM6CisgICAg
ICAgICogc3RyZXNzL3Byb3h5LWdldHRlci1zdGFjay1vdmVyZmxvdy5qczoKKyAgICAgICAgKiBz
dHJlc3MvcmVncmVzcy0xOTI3MTcuanM6CisgICAgICAgICogc3RyZXNzL3JldHJ5LWNhY2hlLWxh
dGVyLmpzOgorCiAyMDIwLTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgog
CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgZG9lc24ndCBtb2RlbCBwb2lu
dGVycyB0byBhbGxvY2F0aW9ucyBpbiBjb250cm9sIGZsb3cgcHJvcGVybHkKSW5kZXg6IEpTVGVz
dHMvc3RyZXNzL2RmZy1jb21wYXJlLWVxLXZpYS1ub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZU51bGxPclVuZGVmaW5lZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmct
Y29tcGFyZS1lcS12aWEtbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRl
ZmluZWQuanMJKHJldmlzaW9uIDI1NDM0NykKKysrIEpTVGVzdHMvc3RyZXNzL2RmZy1jb21wYXJl
LWVxLXZpYS1ub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vQCBydW5EZWZhdWx0KCItLWNvbGxl
Y3RDb250aW51b3VzbHk9dHJ1ZSIsICItLWNvbGxlY3RDb250aW51b3VzbHlQZXJpb2RNUz0wLjE1
IiwgIi0tdXNlTExJbnQ9ZmFsc2UiLCAiLS11c2VGVExKSVQ9ZmFsc2UiLCAiLS1qaXRQb2xpY3lT
Y2FsZT0wIikKKy8vQCBydW5EZWZhdWx0KCItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICIt
LWNvbGxlY3RDb250aW51b3VzbHlQZXJpb2RNUz0wLjE1IiwgIi0tZm9yY2VCYXNlbGluZT10cnVl
IiwgIi0tdXNlRlRMSklUPWZhbHNlIiwgIi0taml0UG9saWN5U2NhbGU9MCIpCiAKIC8vIFRoaXMg
dGVzdCBleGVyY2lzZXMgREZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoKS4KIApJbmRleDogSlNUZXN0cy9zdHJlc3MvZ2V0
dGVyLXNldHRlci1pbmxpbmluZy1zaG91bGQtZW1pdC1tb3ZoaW50LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL2dldHRlci1zZXR0ZXItaW5saW5pbmctc2hvdWxkLWVtaXQtbW92aGlu
dC5qcwkocmV2aXNpb24gMjU0MzQ3KQorKysgSlNUZXN0cy9zdHJlc3MvZ2V0dGVyLXNldHRlci1p
bmxpbmluZy1zaG91bGQtZW1pdC1tb3ZoaW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEs
NCBAQAotLy9AIHJ1bkRlZmF1bHQoIi0tdXNlUmFuZG9taXppbmdGdXp6ZXJBZ2VudD0xIiwgIi0t
dXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmdGb3JOb25TdHViU3RhdHVzPTEiLCAiLS1zZWVkT2ZS
YW5kb21pemluZ0Z1enplckFnZW50PTI4OTY5MjI1MDUiLCAiLS11c2VMTEludD0wIiwgIi0tdXNl
Q29uY3VycmVudEpJVD0wIikKKy8vQCBydW5EZWZhdWx0KCItLXVzZVJhbmRvbWl6aW5nRnV6emVy
QWdlbnQ9MSIsICItLXVzZVBvbHltb3JwaGljQ2FsbElubGluaW5nRm9yTm9uU3R1YlN0YXR1cz0x
IiwgIi0tc2VlZE9mUmFuZG9taXppbmdGdXp6ZXJBZ2VudD0yODk2OTIyNTA1IiwgIi0tZm9yY2VC
YXNlbGluZT0xIiwgIi0tdXNlQ29uY3VycmVudEpJVD0wIikKIGZ1bmN0aW9uIGZvbyhvKSB7CiAg
ICAgby5mID0gMDsKICAgICByZXR1cm4gby5mOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvbWFrZS1k
aWN0aW9uYXJ5LXJlcGF0Y2guanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvbWFrZS1k
aWN0aW9uYXJ5LXJlcGF0Y2guanMJKHJldmlzaW9uIDI1NDM0NykKKysrIEpTVGVzdHMvc3RyZXNz
L21ha2UtZGljdGlvbmFyeS1yZXBhdGNoLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBA
QAotLy9AIGlmICRqaXRUZXN0cyB0aGVuIHJ1bk5vQ0pJVCgiLS11c2VERkdKSVQ9ZmFsc2UiLCAi
LS11c2VMTEludD1mYWxzZSIpIGVsc2Ugc2tpcCBlbmQKKy8vQCBpZiAkaml0VGVzdHMgdGhlbiBy
dW5Ob0NKSVQoIi0tdXNlREZHSklUPWZhbHNlIiwgIi0tZm9yY2VCYXNlbGluZT10cnVlIikgZWxz
ZSBza2lwIGVuZAogCiBmdW5jdGlvbiBmb28obykgewogICAgIHJldHVybiBvLmY7CkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9tZXJnaW5nLWljLXZhcmlhbnRzLXNob3VsZC1iYWlsLWlmLXN0cnVjdHVy
ZXMtb3ZlcmxhcC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tZXJnaW5nLWljLXZh
cmlhbnRzLXNob3VsZC1iYWlsLWlmLXN0cnVjdHVyZXMtb3ZlcmxhcC5qcwkocmV2aXNpb24gMjU0
MzQ3KQorKysgSlNUZXN0cy9zdHJlc3MvbWVyZ2luZy1pYy12YXJpYW50cy1zaG91bGQtYmFpbC1p
Zi1zdHJ1Y3R1cmVzLW92ZXJsYXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0v
L0AgcnVuRGVmYXVsdCgiLS12YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2U9MSIsICItLXVzZUxMSW50
PTAiKQorLy9AIHJ1bkRlZmF1bHQoIi0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlPTEiLCAiLS1m
b3JjZUJhc2VsaW5lPTEiKQogCiBsZXQgaXRlbXMgPSBbXTsKIGZvciAobGV0IGkgPSAwOyBpIDwg
ODsgKytpKSB7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wcm94eS1nZXR0ZXItc3RhY2stb3ZlcmZs
b3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHJveHktZ2V0dGVyLXN0YWNrLW92
ZXJmbG93LmpzCShyZXZpc2lvbiAyNTQzNDcpCisrKyBKU1Rlc3RzL3N0cmVzcy9wcm94eS1nZXR0
ZXItc3RhY2stb3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vL0Ag
aWYgJGppdFRlc3RzIHRoZW4gcnVuRGVmYXVsdCgiLS11c2VMTEludD0wIikgZWxzZSBza2lwIGVu
ZAorLy9AIGlmICRqaXRUZXN0cyB0aGVuIHJ1bkRlZmF1bHQoIi0tZm9yY2VCYXNlbGluZT0xIikg
ZWxzZSBza2lwIGVuZAogCiBjb25zdCBvID0ge307CiBjb25zdCBoYW5kbGVyID0gewpJbmRleDog
SlNUZXN0cy9zdHJlc3MvcmVncmVzcy0xOTI3MTcuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9z
dHJlc3MvcmVncmVzcy0xOTI3MTcuanMJKHJldmlzaW9uIDI1NDM0NykKKysrIEpTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMTkyNzE3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy9A
IHNraXAgaWYgJG1lbW9yeUxpbWl0ZWQgb3IgJGJ1aWxkVHlwZSA9PSAiZGVidWciCi0vL0AgcnVu
RGVmYXVsdCgiLS11c2VMTEludD1mYWxzZSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1
ZVRvT2xkQWdlPXRydWUiLCAiLS1tYXhQZXJUaHJlYWRTdGFja1VzYWdlPTIwMDAwMCIsICItLWV4
Y2VwdGlvblN0YWNrVHJhY2VMaW1pdD0xIiwgIi0tZGVmYXVsdEVycm9yU3RhY2tUcmFjZUxpbWl0
PTEiKQorLy9AIHJ1bkRlZmF1bHQoIi0tZm9yY2VCYXNlbGluZT10cnVlIiwgIi0tZm9yY2VDb2Rl
QmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLW1heFBlclRocmVhZFN0YWNrVXNh
Z2U9MjAwMDAwIiwgIi0tZXhjZXB0aW9uU3RhY2tUcmFjZUxpbWl0PTEiLCAiLS1kZWZhdWx0RXJy
b3JTdGFja1RyYWNlTGltaXQ9MSIpCiAKIGxldCBmb28gPSAnbGV0IGEnOwogZm9yIChsZXQgaSA9
IDA7IGkgPCA0MDAwMDA7IGkrKykKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JldHJ5LWNhY2hlLWxh
dGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3JldHJ5LWNhY2hlLWxhdGVyLmpz
CShyZXZpc2lvbiAyNTQzNDcpCisrKyBKU1Rlc3RzL3N0cmVzcy9yZXRyeS1jYWNoZS1sYXRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vQCBydW5Ob0NKSVQoIi0tdXNlTExJ
bnQ9ZmFsc2UiLCAiLS11c2VERkdKSVQ9ZmFsc2UiKQorLy9AIHJ1bk5vQ0pJVCgiLS1mb3JjZUJh
c2VsaW5lPXRydWUiLCAiLS11c2VERkdKSVQ9ZmFsc2UiKQogCiBmdW5jdGlvbiBmb28obykgewog
ICAgIHJldHVybiBvLmk3OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTQzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNTkgQEAKKzIwMjAtMDEtMTAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgVGhyb3cgYXdheSBiYXNlbGluZSBjb2RlIGlmIHRoZXJlIGlzIGFu
IG9wdGltaXplZCByZXBsYWNlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjAyNTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCdzIGdvYWwgaXMgdG8gaGVscCB1cyBzYXZlIEpJVCBl
eGVjdXRhYmxlIG1lbW9yeSBieSB0aHJvd2luZworICAgICAgICBhd2F5IGJhc2VsaW5lIGNvZGUg
d2hlbiBpdCBoYXMgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LiBUbyBtYWtlIGl0CisgICAgICAg
IGVhc3kgdG8gcmVhc29uIGFib3V0LCB3ZSBkbyB0aGlzIHdoZW4gZmluYWxpemluZyBhIEdDLCBh
bmQgd2hlbiB0aGUKKyAgICAgICAgQ29kZUJsb2NrIGlzIG5vdCBvbiB0aGUgc3RhY2suIFdoZW4g
d2UgZG8gdGhpcywgd2UgdGhyb3cgYXdheSBhbGwgSklUCisgICAgICAgIGRhdGEgYW5kIHVubGlu
ayBhbGwgaW5jb21pbmcgY2FsbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
cGF2ZXMgdGhlIHdheSBmb3IgdGhlIExPTCB0aWVyIGJ5IG1ha2luZyBpdCBzbyB3ZSBhbHdheXMK
KyAgICAgICAgZXhpdCB0byB0aGUgTExJbnQuIFRoaXMgYWxsb3dzIHRoZSBjb2RlIGluIENvZGVC
bG9jayBmaW5hbGl6YXRpb24gdG8gbm90CisgICAgICAgIGhhdmUgdG8gY29uc2lkZXIgd2hldGhl
ciBvciBub3QgYW4gYW4gT1NSIGV4aXQgaXMgd2lyZWQgdG8gYmFzZWxpbmUKKyAgICAgICAgSklU
IGNvZGUsIHNpbmNlIGFsbCBleGl0cyBhcmUgbm93IHRvIHRoZSBMTEludC4gQmVjYXVzZSBvZiB0
aGlzLCB0aGlzCisgICAgICAgIHBhdGNoIHJlbW92ZXMgdGhlIGZvcmNlT1NSRXhpdFRvTExJbnQg
b3B0aW9uLiBBbHNvLCB0aGlzIHBhdGNoIHJlbmFtZXMKKyAgICAgICAgdGhlIHVzZUxMSW50IG9w
dGlvbiB0byBmb3JjZUJhc2VsaW5lIGFuZCBpbnZlcnRzIGl0cyBtZWFuaW5nLgorICAgICAgICBP
cHRpb25zOjpmb3JjZUJhc2VsaW5lPXRydWUgaW1wbGllcyB0aGF0IGNvZGUgd2lsbCBzdGFydCBv
ZmYgZXhlY3V0aW5nIGluCisgICAgICAgIHRoZSBiYXNlbGluZSBKSVQgaW5zdGVhZCBvZiB0aGUg
TExJbnQuIEhvd2V2ZXIsIGl0IHdvbid0IHByZXZlbnQgdXMgZnJvbQorICAgICAgICBlbWl0dGlu
ZyBhbiBPU1IgZXhpdCB3aGljaCBqdW1wcyB0byBMTEludCBjb2RlLgorCisgICAgICAgICogQVBJ
L3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAodGVzdEV4ZWN1dGlv
blRpbWVMaW1pdCk6CisgICAgICAgICogQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rl
c3QuY3BwOgorICAgICAgICAodGVzdFBpbmdQb25nU3RhY2tPdmVyZmxvdyk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlc2V0SklURGF0YSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b3B0aW1pemVkUmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmaW5kU3R1YkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
a1NldDo6aXNDdXJyZW50bHlFeGVjdXRpbmcpOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0
Lmg6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRW5k
UGhhc2UpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OmRpc3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
T3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgor
ICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6T3B0aW9u
czo6ZW5zdXJlT3B0aW9uc0FyZUNvaGVyZW50KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNM
aXN0Lmg6CisgICAgICAgICogcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcDoKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwpOgorCiAyMDIw
LTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIE9iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UgZG9lc24ndCBtb2RlbCBwb2ludGVycyB0byBhbGxvY2F0
aW9ucyBpbiBjb250cm9sIGZsb3cgcHJvcGVybHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcAko
cmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVj
dXRpb25UaW1lTGltaXRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDExICsxMTksMTEg
QEAgc3RhdGljIHZvaWQgdGVzdFJlc2V0QWZ0ZXJUaW1lb3V0KGJvb2wmIAogaW50IHRlc3RFeGVj
dXRpb25UaW1lTGltaXQoKQogewogICAgIHN0YXRpYyBjb25zdCBUaWVyT3B0aW9ucyB0aWVyT3B0
aW9uc0xpc3RbXSA9IHsKLSAgICAgICAgeyAiTExJTlQiLCAgICAwX21zLCAgICItLXVzZUNvbmN1
cnJlbnRKSVQ9ZmFsc2UgLS11c2VMTEludD10cnVlIC0tdXNlSklUPWZhbHNlIiB9LAotICAgICAg
ICB7ICJCYXNlbGluZSIsIDBfbXMsICAgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSAtLXVzZUxM
SW50PXRydWUgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD1mYWxzZSIgfSwKLSAgICAgICAgeyAi
REZHIiwgICAgICAyMDBfbXMsICAgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSAtLXVzZUxMSW50
PXRydWUgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD10cnVlIC0tdXNlRlRMSklUPWZhbHNlIiB9
LAorICAgICAgICB7ICJMTElOVCIsICAgIDBfbXMsICAgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxz
ZSAtLXVzZUpJVD1mYWxzZSIgfSwKKyAgICAgICAgeyAiQmFzZWxpbmUiLCAwX21zLCAgICItLXVz
ZUNvbmN1cnJlbnRKSVQ9ZmFsc2UgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD1mYWxzZSIgfSwK
KyAgICAgICAgeyAiREZHIiwgICAgICAyMDBfbXMsICAgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxz
ZSAtLXVzZUpJVD10cnVlIC0tdXNlREZHSklUPXRydWUgLS11c2VGVExKSVQ9ZmFsc2UiIH0sCiAj
aWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgICAgIHsgIkZUTCIsICAgICAgNTAwX21zLCAiLS11c2VD
b25jdXJyZW50SklUPWZhbHNlIC0tdXNlTExJbnQ9dHJ1ZSAtLXVzZUpJVD10cnVlIC0tdXNlREZH
SklUPXRydWUgLS11c2VGVExKSVQ9dHJ1ZSIgfSwKKyAgICAgICAgeyAiRlRMIiwgICAgICA1MDBf
bXMsICItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD10
cnVlIC0tdXNlRlRMSklUPXRydWUiIH0sCiAjZW5kaWYKICAgICB9OwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL1BpbmdQb25n
U3RhY2tPdmVyZmxvd1Rlc3QuY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgaW50IHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3co
KQogCiAgICAgYXV0byBvcmlnU29mdFJlc2VydmVkWm9uZVNpemUgPSBPcHRpb25zOjpzb2Z0UmVz
ZXJ2ZWRab25lU2l6ZSgpOwogICAgIGF1dG8gb3JpZ1Jlc2VydmVkWm9uZVNpemUgPSBPcHRpb25z
OjpyZXNlcnZlZFpvbmVTaXplKCk7Ci0gICAgYXV0byBvcmlnVXNlTExJbnQgPSBPcHRpb25zOjp1
c2VMTEludCgpOworICAgIGF1dG8gb3JpZ0ZvcmNlQmFzZWxpbmUgPSBPcHRpb25zOjpmb3JjZUJh
c2VsaW5lKCk7CiAgICAgYXV0byBvcmlnTWF4UGVyVGhyZWFkU3RhY2tVc2FnZSA9IE9wdGlvbnM6
Om1heFBlclRocmVhZFN0YWNrVXNhZ2UoKTsKIAogICAgIE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpv
bmVTaXplKCkgPSAxMjggKiBLQjsKQEAgLTEzMSw3ICsxMzEsNyBAQCBpbnQgdGVzdFBpbmdQb25n
U3RhY2tPdmVyZmxvdygpCiAgICAgLy8gTm9ybWFsbHksIHdlIHdhbnQgdG8gZGlzYWJsZSB0aGUg
TExJTlQgdG8gZm9yY2UgdGhlIHVzZSBvZiBKSVR0ZWQgY29kZSB3aGljaCBpcyBuZWNlc3Nhcnkg
Zm9yCiAgICAgLy8gcmVwcm9kdWNpbmcgdGhlIHJlZ3Jlc3Npb24gaW4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODc0OS4gSG93ZXZlciwgd2Ugb25seQogICAgIC8v
IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgTExJTlQgaXNuJ3QgdGhlIG9ubHkgYXZhaWxhYmxlIGV4
ZWN1dGlvbiBlbmdpbmUuCi0gICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IGZhbHNlOworICAgIE9w
dGlvbnM6OmZvcmNlQmFzZWxpbmUoKSA9IHRydWU7CiAjZW5kaWYKIAogICAgIGNvbnN0IGNoYXIq
IHNjcmlwdFN0cmluZyA9CkBAIC0xNzgsNyArMTc4LDcgQEAgaW50IHRlc3RQaW5nUG9uZ1N0YWNr
T3ZlcmZsb3coKQogCiAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IG9yaWdT
b2Z0UmVzZXJ2ZWRab25lU2l6ZTsKICAgICBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgPSBv
cmlnUmVzZXJ2ZWRab25lU2l6ZTsKLSAgICBPcHRpb25zOjp1c2VMTEludCgpID0gb3JpZ1VzZUxM
SW50OworICAgIE9wdGlvbnM6OmZvcmNlQmFzZWxpbmUoKSA9IG9yaWdGb3JjZUJhc2VsaW5lOwog
ICAgIE9wdGlvbnM6Om1heFBlclRocmVhZFN0YWNrVXNhZ2UoKSA9IG9yaWdNYXhQZXJUaHJlYWRT
dGFja1VzYWdlOwogCiAgICAgcmV0dXJuIGZhaWxlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQyLDE0ICs0NDIsOCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBTCiAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRI
YW5kbGVyID0gdW5saW5rZWRDb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CiAgICAgICAg
ICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhh
bmRsZXJzW2ldOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICAgICAgYXV0byBpbnN0cnVj
dGlvbiA9IGluc3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpOwotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCeXRlY29kZVB0clRhZz4gY29kZVB0cjsK
LSAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPmlzV2lkZTMyKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGNvZGVQdHIgPSBMTEludDo6Z2V0V2lkZTMyQ29kZVB0cjxCeXRlY29kZVB0clRh
Zz4ob3BfY2F0Y2gpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5pc1dp
ZGUxNigpKQotICAgICAgICAgICAgICAgICAgICBjb2RlUHRyID0gTExJbnQ6OmdldFdpZGUxNkNv
ZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+KG9wX2NhdGNoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGNvZGVQdHIgPSBMTEludDo6Z2V0Q29kZVB0cjxCeXRlY29kZVB0
clRhZz4ob3BfY2F0Y2gpOworICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmlu
c3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCeXRlY29kZVB0clRhZz4gY29kZVB0ciA9IExM
SW50OjpnZXRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihpbnN0cnVjdGlvbik7CiAgICAgICAgICAg
ICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFi
ZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29kZVB0ci5yZXRhZ2dlZDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPigpKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6
ZSh1bmxpbmtlZEhhbmRsZXIpOwpAQCAtMTM5MCw2ICsxMzg0LDM2IEBAIHZvaWQgQ29kZUJsb2Nr
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICBVTlVTRURfUEFSQU0odm0pOwogCiAgICAg
dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKCFPcHRp
b25zOjpmb3JjZUJhc2VsaW5lKCkgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
ICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMp
KSB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5t
X29zckV4aXRDb3VudGVyKSB7CisgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
ayk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGUt
Pm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRD
b2RlLT5leGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCku
YXQodW5saW5rZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+IGNvZGVQdHIgPSBMTEludDo6
Z2V0Q29kZVB0cjxCeXRlY29kZVB0clRhZz4oaW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9u
TGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29kZVB0ci5yZXRhZ2dlZDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPigpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcworICAgICAgICAgICAg
ICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJl
Zm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQorICAgICAgICAgICAg
ICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRo
ZSB2YXJpb3VzICppbmZvcy4KKyAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmCiAgICAgCiAgICAgaWYgKEpJVENv
ZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKCk7CkBAIC0xNTE3LDE4ICsxNTQxLDYgQEAgSklUTmVnSUMqIENvZGVCbG9j
azo6YWRkSklUTmVnSUMoVW5hcnlBcgogICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlciku
bV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7CiB9CiAKLVN0cnVjdHVyZVN0dWJJbmZvKiBDb2Rl
QmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi17Ci0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9q
aXREYXRhLmdldCgpKSB7Ci0gICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
IDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29k
ZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQotICAgICAgICAgICAgICAgIHJldHVybiBzdHViSW5mbzsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogQnlWYWxJbmZvKiBD
b2RlQmxvY2s6OmFkZEJ5VmFsSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOwpAQCAtMTU0MSwxOCArMTU1Myw2IEBAIENhbGxMaW5rSW5mbyogQ29kZUJsb2Nr
OjphZGRDYWxsTGlua0luZm8KICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fY2Fs
bExpbmtJbmZvcy5hZGQoKTsKIH0KIAotQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxM
aW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKLXsKLSAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgaWYgKGF1dG8qIGppdERhdGEgPSBt
X2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykgewotICAgICAgICAgICAgaWYgKGNhbGxMaW5r
SW5mby0+Y29kZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5kZXgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBjYWxsTGlua0luZm87Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KIFJhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKQEAgLTE2MDAsMTMgKzE2MDAsMjYgQEAgdm9pZCBDb2RlQmxvY2s6OnJl
c2V0SklURGF0YSgpCiAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGVzZSBiZWNhdXNlIG5vIG90
aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZvcywgY2FsbAog
ICAgICAgICAvLyBsaW5rIGluZm9zLCBvciBieSB2YWwgaW5mb3MgaWYgd2UgZG9uJ3QgaGF2ZSBK
SVQgY29kZS4gQXR0ZW1wdHMgdG8gcXVlcnkgdGhlc2UgZGF0YQogICAgICAgICAvLyBzdHJ1Y3R1
cmVzIHVzaW5nIHRoZSBjb25jdXJyZW50IEFQSSAoZ2V0SUNTdGF0dXNNYXAgYW5kIGZyaWVuZHMp
IHdpbGwgcmV0dXJuIG5vdGhpbmcgaWYgd2UKLSAgICAgICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29k
ZS4KKyAgICAgICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4gU28gaXQncyBzYWZlIHRvIGNhbGwg
dGhpcyBpZiB3ZSBmYWlsIGEgYmFzZWxpbmUgSklUIGNvbXBpbGUuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFdlIGFsc28gY2FsbCB0aGlzIGZyb20gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgd2hl
biB3ZSBkZWdyYWRlIGZyb20gYmFzZWxpbmUgSklUIHRvIExMSW50CisgICAgICAgIC8vIGNvZGUu
IFRoaXMgaXMgc2FmZSB0byBkbyBzaW5jZSBhbGwgY29tcGlsZXIgdGhyZWFkcyBhcmUgc2FmZXBv
aW50ZWQgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHksCisgICAgICAgIC8vIHdoaWNoIG1lYW5z
IHdlJ3ZlIG1hZGUgaXQgcGFzdCBieXRlY29kZSBwYXJzaW5nLiBPbmx5IHRoZSBieXRlY29kZSBw
YXJzZXIgd2lsbCBob2xkIG9udG8KKyAgICAgICAgLy8gcmVmZXJlbmNlcyB0byB0aGVzZSB2YXJp
b3VzICppbmZvcyB2aWEgaXRzIHVzZSBvZiBJQ1N0YXR1c01hcC4KKworICAgICAgICBmb3IgKFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CisgICAg
ICAgICAgICBzdHViSW5mby0+YWJvdXRUb0RpZSgpOworICAgICAgICAgICAgc3R1YkluZm8tPmRl
cmVmKCk7CisgICAgICAgIH0KKwogICAgICAgICBqaXREYXRhLT5tX3N0dWJJbmZvcy5jbGVhcigp
OwogICAgICAgICBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MuY2xlYXIoKTsKICAgICAgICAgaml0
RGF0YS0+bV9ieVZhbEluZm9zLmNsZWFyKCk7CiAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGlz
IGJlY2F1c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBn
dWFyZGVkIGJ5IHdoZXRoZXIKICAgICAgICAgLy8gdGhlcmUgaXMgSklUIGNvZGUuCiAgICAgICAg
IGppdERhdGEtPm1fcmFyZUNhc2VQcm9maWxlcy5jbGVhcigpOworCisgICAgICAgIG1faml0RGF0
YSA9IG51bGxwdHI7CiAgICAgfQogfQogI2VuZGlmCkBAIC0xNzMzLDEwICsxNzQ2LDI0IEBAIENv
ZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQogCiAjaWYgRU5BQkxFKEpJ
VCkKLWJvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRUeXBlIHR5cGVU
b1JlcGxhY2UpCitDb2RlQmxvY2sqIENvZGVCbG9jazo6b3B0aW1pemVkUmVwbGFjZW1lbnQoSklU
VHlwZSB0eXBlVG9SZXBsYWNlKQogewogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSB0aGlz
LT5yZXBsYWNlbWVudCgpOwotICAgIHJldHVybiByZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0hp
Z2hlclRpZXIocmVwbGFjZW1lbnQtPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7CisgICAgaWYg
KCFyZXBsYWNlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudC0+aml0VHlwZSgpLCB0eXBlVG9SZXBsYWNlKSkKKyAg
ICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OworICAgIHJldHVybiBudWxscHRyOworfQorCitDb2Rl
QmxvY2sqIENvZGVCbG9jazo6b3B0aW1pemVkUmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiBv
cHRpbWl6ZWRSZXBsYWNlbWVudChqaXRUeXBlKCkpOworfQorCitib29sIENvZGVCbG9jazo6aGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoSklUVHlwZSB0eXBlVG9SZXBsYWNlKQoreworICAgIHJldHVy
biAhIW9wdGltaXplZFJlcGxhY2VtZW50KHR5cGVUb1JlcGxhY2UpOwogfQogCiBib29sIENvZGVC
bG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgs
NiArMjU4LDkgQEAgcHVibGljOgogCiAgICAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gYnl0ZWNv
ZGVJbmRleEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXgpOwogCisgICAgLy8gQmVjYXVz
ZSB3ZSB0aHJvdyBvdXQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIGFsbCBpdHMgYmFzZWxpbmUgSklU
IGRhdGEsIHlvdQorICAgIC8vIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aGVyZSB5b3UgY2FsbCB0aGlz
LiBZb3UgY2FuIG9ubHkgY2FsbCB0aGlzIGlmIHlvdSd2ZQorICAgIC8vIGd1YXJhbnRlZWQgd2Ug
aGF2ZW4ndCBmaW5hbGl6ZWQgYSBHQyBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBhbmQgaXRzIGxhc3Qg
dXNlLgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
SUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01h
cCYgcmVzdWx0KTsKICAgICAKQEAgLTMwNywxOCArMzEwLDkgQEAgcHVibGljOgogCiAgICAgU3Ry
dWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUpOwogCi0gICAgLy8gTyhuKSBv
cGVyYXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50
ZW5kIHRvIGdldCBvbmUKLSAgICAvLyBzdHViIGluZm8uCi0gICAgU3RydWN0dXJlU3R1YkluZm8q
IGZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKLQogICAgIEJ5VmFsSW5mbyogYWRkQnlWYWxJbmZv
KCk7CiAKICAgICBDYWxsTGlua0luZm8qIGFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgLy8gVGhp
cyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9T
UiBleGl0cyBpbiB0aGUgY2FzZQotICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcu
IENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5Ci0gICAg
Ly8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2Yg
Y2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKICAgICB2b2lkIHNldEpJVENvZGVNYXAoSklU
Q29kZU1hcCYmIGppdENvZGVNYXApCiAgICAgewpAQCAtNDQ0LDYgKzQzOCw4IEBAIHB1YmxpYzoK
ICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBERkc6OkNh
cGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxTdGF0ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PERGRzo6Q2FwYWJpbGl0eUxldmVsPihtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKTsgfQogCisgICAg
Q29kZUJsb2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRUeXBlIHR5cGVUb1JlcGxhY2UpOwor
ICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQoKTsgLy8gdGhlIHR5cGVUb1JlcGxh
Y2UgaXMgbXkgSklUVHlwZQogICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoSklUVHlw
ZSB0eXBlVG9SZXBsYWNlKTsKICAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8v
IHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15IEpJVFR5cGUKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsODUgKzE0Miw1MyBA
QCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgZG9uZUFkanVz
dGluZy5saW5rKCZqaXQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwg
Qnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRy
dWVDYWxsZXJDYWxsS2luZCwgYm9vbCYgY2FsbGVySXNMTEludCkKK3N0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZCkKIHsKLSAgICBjYWxsZXJJ
c0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKLQog
ICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCiAgICAgICAgIHJldHVybiBM
TEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X2Zyb21f
aW5saW5lZF9jYWxsX3RyYW1wb2xpbmUpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGp1bXBUYXJnZXQ7CiAKLSAgICBpZiAoY2FsbGVySXNMTEludCkgewotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY2FsbEluc3RydWN0aW9uID0gKmJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsQnl0ZWNvZGVJbmRleCkucHRyKCk7
CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGNhbGxJbnN0cnVjdGlvbiA9ICpiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEJ5dGVjb2RlSW5kZXgpLnB0cigp
OwogI2RlZmluZSBMTElOVF9SRVRVUk5fTE9DQVRJT04obmFtZSkgKGNhbGxJbnN0cnVjdGlvbi5p
c1dpZGUxNigpID8gTExJbnQ6OmdldFdpZGUxNkNvZGVQdHI8SlNFbnRyeVB0clRhZz4obmFtZSMj
X3JldHVybl9sb2NhdGlvbikgOiAoY2FsbEluc3RydWN0aW9uLmlzV2lkZTMyKCkgPyBMTEludDo6
Z2V0V2lkZTMyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihuYW1lIyNfcmV0dXJuX2xvY2F0aW9uKSA6
IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KG5hbWUjI19yZXR1cm5fbG9jYXRpb24p
KSkKIAotICAgICAgICBzd2l0Y2ggKHRydWVDYWxsZXJDYWxsS2luZCkgewotICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6Q2FsbDoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfY2FsbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICBq
dW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3Ry
dWN0VmFyYXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJ
T04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsKLSAgICAgICAgICAgIGlmIChj
YWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlfaWQpCi0gICAgICAgICAgICAg
ICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlfaWQpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfZ2V0X2J5
X3ZhbCkKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9O
KG9wX2dldF9ieV92YWwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDogewotICAgICAgICAgICAg
aWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV9pZCkKLSAgICAgICAg
ICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX3B1dF9ieV9pZCk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9w
dXRfYnlfdmFsKQotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfcHV0X2J5X3ZhbCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGRlZmF1bHQ6CisgICAgc3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsK
KyAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKKyAgICAgICAganVtcFRhcmdldCA9IExM
SU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
bmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKKyAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JF
VFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CisgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Nsb3cpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAganVtcFRh
cmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsK
KyAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX2dldF9ieV9pZCkK
KyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5
X2lkKTsKKyAgICAgICAgZWxzZSBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3Bf
Z2V0X2J5X3ZhbCkKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJ
T04ob3BfZ2V0X2J5X3ZhbCk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NB
VElPTgotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQp
IHsKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGw6Ci0gICAgICAgIGNhc2UgSW5s
aW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpD
YWxsVmFyYXJnczoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFy
Z3M6IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAg
ICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYWxsTGlua0luZm8pOwotCi0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6
R2V0dGVyQ2FsbDoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsK
LSAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9Ci0gICAgICAgICAgICAg
ICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNh
bGxCeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7
Ci0KLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uLnJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIElubGluZUNh
bGxGcmFtZTo6U2V0dGVyQ2FsbDogeworICAgICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29k
ZUlEKCkgPT0gb3BfcHV0X2J5X2lkKQorICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JF
VFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpOworICAgICAgICBlbHNlIGlmIChjYWxsSW5zdHJ1
Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKQorICAgICAgICAgICAganVtcFRhcmdl
dCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfdmFsKTsKKyAgICAgICAgZWxzZQog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAKKyN1bmRlZiBMTElOVF9SRVRVUk5fTE9DQVRJT04KKwog
ICAgIHJldHVybiBqdW1wVGFyZ2V0OwogfQogCkBAIC0yNTQsOCArMjIyLDYgQEAgdm9pZCByZWlm
eUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBDb2RlT3JpZ2luKiB0cnVl
Q2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygmdHJ1
ZUNhbGxlckNhbGxLaW5kKTsKICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSID0gR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CiAKLSAgICAgICAgYm9vbCBjYWxsZXJJc0xMSW50ID0gZmFs
c2U7Ci0KICAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7CiAgICAgICAgICAgICBBU1NFUlQoaW5s
aW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7CiAgICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6
cmV0dXJuUENPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKQEAgLTI3MSw3ICsyMzcsNyBAQCB2
b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGF1dG8gY2Fs
bEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldCA9IGNhbGxl
clJldHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRleCwg
dHJ1ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0dXJuUEMo
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVlQ2FsbGVy
Q2FsbEtpbmQpOwogCiAgICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1l
KCkpIHsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKApAQCAtMzAyLDcgKzI2OCw4IEBAIHZv
aWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIHRydWVD
YWxsZXIgPyBBc3NlbWJseUhlbHBlcnM6OlVzZUV4aXN0aW5nVGFnUmVnaXN0ZXJDb250ZW50cyA6
IEFzc2VtYmx5SGVscGVyczo6Q29weUJhc2VsaW5lQ2FsbGVlU2F2ZWRSZWdpc3RlcnNGcm9tQmFz
ZUZyYW1lLAogICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwogCi0gICAgICAgIGlmIChjYWxs
ZXJJc0xMSW50KSB7CisgICAgICAgIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICAvLyBT
ZXQgdXAgTExJbnQgcmVnaXN0ZXJzIGZvciBvdXIgY2FsbGVyIGluIG91ciBjYWxsZWUgc2F2ZXMu
CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFz
ZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzg4LDQ0ICszNTUsMjYgQEAgdm9pZCBhZGp1c3RBbmRKdW1w
VG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIEFTU0VSVChjb2RlQmxvY2tGb3JFeGl0ID09IGNv
ZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5lVmVyc2lvbigpKTsKICAgICBBU1NFUlQoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpKSk7CiAKLSAgICB2b2lk
KiBqdW1wVGFyZ2V0OwotICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4
aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms7Ci0gICAgaWYgKGV4aXRUb0xMSW50KSB7Ci0gICAgICAgIGF1dG8gYnl0
ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0
LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOwotICAgICAgICBpZiAo
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IExM
SW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBv
bGluZSk7Ci0gICAgICAgIGVsc2UgCi0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpn
ZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0KLSAgICAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgR1BSSW5mbzo6
cmVnVDIpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QyLCAmdm0udGFy
Z2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93KTsKLSAgICAgICAgfQorICAgIGF1dG8gYnl0ZWNvZGVJ
bmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBjb25zdCBJbnN0
cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKKyAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpCisgICAgICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRy
eVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lKTsKKyAgICBlbHNlIAorICAg
ICAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3Rl
cnM6Om1ldGFkYXRhVGFibGVHUFIpOworICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVu
dEluc3RydWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6cmVnVDIsICZ2bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cpOworICAgIH0KKwor
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0
LT5tZXRhZGF0YVRhYmxlKCkpLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGJHUFIpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tG
b3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQ
Uik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKICNlbHNlCi0gICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwg
TExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIp
OwogI2VuZGlmCi0gICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JF
eGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5h
dGlvbjsKLSAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpCi0gICAgICAgICAgICBk
ZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRf
b3NyX2V4aXRfdHJhbXBvbGluZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJU
KGNvZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJbmRleCkgPT0gZXhp
dEluZGV4KTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0
Q29kZU1hcCgpLmZpbmQoZXhpdEluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChk
ZXN0aW5hdGlvbik7Ci0KLSAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2Vk
PE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICB9CiAKICAgICBqaXQu
YWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewpAQCAtNDMzLDcgKzM4Miw3IEBA
IHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0LnN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2bS5hZGRyZXNzT2ZDYWxsRnJhbWVG
b3JDYXRjaCgpKTsKICAgICB9CiAgICAgCi0gICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4
aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1QyKTsKICAgICBq
aXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRhZyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiB2b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0m
LCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogdm9pZCByZWlmeUlubGluZWRD
YWxsRnJhbWVzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7CiB2b2lkIGFkanVz
dEFuZEp1bXBUb1RhcmdldChWTSYsIENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0ZWNvZGVJbmRleCBjYWxsQnl0
ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGNhbGxlcktpbmQsIGJvb2wmIGNhbGxl
cklzTExJbnQpOwogQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZVNhdmVTbG90KElubGluZUNh
bGxGcmFtZSosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIEdQUlJlZyBjYWxsZWVTYXZl
KTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEpJVENvZGVUeXBlPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw2ICs1NSwxMSBAQCB2b2lkIENvZGVCbG9ja1NldDo6Y2xlYXJDdXJyZW50bHlFeGVj
dXRpCiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuY2xlYXIoKTsKIH0KIAorYm9vbCBDb2RlQmxv
Y2tTZXQ6OmlzQ3VycmVudGx5RXhlY3V0aW5nKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IHJldHVybiBtX2N1cnJlbnRseUV4ZWN1dGluZy5jb250YWlucyhjb2RlQmxvY2spOworfQorCiB2
b2lkIENvZGVCbG9ja1NldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENv
bW1hUHJpbnRlciBjb21tYTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5oCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTAgQEAgcHVibGlj
OgogICAgIGJvb2wgY29udGFpbnMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBjYW5kaWRh
dGVDb2RlQmxvY2spOwogICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KIAor
ICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gcnVuIG9ubHkgd2hlbiB3ZSdyZSBub3QgYWRkaW5n
IHRvIHRoZSBzZXQgZm9yIG5vdy4gSWYKKyAgICAvLyB0aGlzIG5lZWRzIHRvIHJ1biBjb25jdXJy
ZW50bHkgaW4gdGhlIGZ1dHVyZSwgd2UnbGwgbmVlZCB0byBsb2NrIGFyb3VuZCB0aGlzLgorICAg
IGJvb2wgaXNDdXJyZW50bHlFeGVjdXRpbmcoQ29kZUJsb2NrKik7CisKICAgICAvLyBWaXNpdHMg
ZWFjaCBDb2RlQmxvY2sgaW4gdGhlIGhlYXAgdW50aWwgdGhlIHZpc2l0b3IgZnVuY3Rpb24gcmV0
dXJucyB0cnVlCiAgICAgLy8gdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBkb25lIGl0ZXJhdGluZywg
b3IgdW50aWwgZXZlcnkgQ29kZUJsb2NrIGhhcyBiZWVuCiAgICAgLy8gdmlzaXRlZC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyMCw3
ICsxNTIwLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0NDbwogICAg
IHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKICAgICBzd2VlcEFycmF5QnVmZmVy
cygpOwogICAgIHNuYXBzaG90VW5zd2VwdCgpOwotICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZp
bmFsaXplcnMoKTsKKyAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7IC8vIFdl
IHJlbHkgb24gdGhpcyBiZWZvcmUgcnVubmluZyBjbGVhckN1cnJlbnRseUV4ZWN1dGluZyBzaW5j
ZSBDb2RlQmxvY2sncyBmaW5hbGl6ZXIgcmVsaWVzIG9uIHF1ZXJ5aW5nIGN1cnJlbnRseSBleGVj
dXRpbmcuCiAgICAgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgbm90
aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI1NDM0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OTMsMTkgKzE5OTMsOSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2tw
b2ludChWTSYgCiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRpc3BhdGNoVG9OZXh0SW5zdHJ1
Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+dm0oKS5leGNlcHRpb25Gb3JJbnNwZWN0
aW9uKCkpOwotICAgIGlmIChPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0cigpOwotICAgICAgICBhdXRv
IG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0
KCkucHRyKCkpOwotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRQQywgbmV4dEJ5dGVj
b2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIH0KLQotI2lmIEVOQUJMRShKSVQpCi0gICAg
QVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAg
ICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmluZGV4KCk7Ci0g
ICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKG5leHRC
eXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG5leHRCeXRl
Y29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSNlbmRpZgotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG5leHRQQyA9IHBjLm5leHQoKS5w
dHIoKTsKKyAgICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KCpwYy5uZXh0KCkucHRyKCkpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBD
LCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKIGV4dGVybiAiQyIgU2xv
d1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSByZXN1bHQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjU0
MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKCkKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkg
PSB0cnVlOwogI2VuZGlmCiAjaWYgIUVOQUJMRShKSVQpCi0gICAgT3B0aW9uczo6dXNlTExJbnQo
KSA9IHRydWU7CisgICAgT3B0aW9uczo6Zm9yY2VCYXNlbGluZSgpID0gZmFsc2U7CiAgICAgT3B0
aW9uczo6dXNlSklUKCkgPSBmYWxzZTsKICAgICBPcHRpb25zOjp1c2VCYXNlbGluZUpJVCgpID0g
ZmFsc2U7CiAgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSBmYWxzZTsKQEAgLTQxOSw3ICs0MTks
NyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICB9CiAKICAg
ICBpZiAoIWppdEVuYWJsZWRCeURlZmF1bHQoKSAmJiAhT3B0aW9uczo6dXNlSklUKCkpCi0gICAg
ICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSB0cnVlOworICAgICAgICBPcHRpb25zOjpmb3JjZUJh
c2VsaW5lKCkgPSBmYWxzZTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSkK
ICAgICAgICAgT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCkgPSBmYWxzZTsKQEAg
LTU0Niw4ICs1NDYsNiBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdCh1c2VLZXJuVENT
TUlEKSA9PSAgJk9wdGlvbnM6OnVzZUtlcm5UQ1NNRGVmYXVsdCgpKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihnY01heEhlYXBTaXplSUQpID09
ICAmT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQoZ2NNYXhIZWFwU2l6ZUlEKSA9PSAgJk9w
dGlvbnM6OmdjTWF4SGVhcFNpemVEZWZhdWx0KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKGZvcmNlT1NSRXhpdFRvTExJbnRJRCkgPT0gICZP
cHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChmb3JjZU9TUkV4aXRUb0xMSW50SUQp
ID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludERlZmF1bHQoKSk7CiAKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgICAgICBDb25maWc6OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKCk7CkBA
IC05NDUsOSArOTQzLDkgQEAgdm9pZCBPcHRpb25zOjpkdW1wT3B0aW9uKFN0cmluZ0J1aWxkZXIm
IAogdm9pZCBPcHRpb25zOjplbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKQogewogICAgIGJvb2wg
Y29oZXJlbnQgPSB0cnVlOwotICAgIGlmICghKHVzZUxMSW50KCkgfHwgdXNlSklUKCkpKSB7Cisg
ICAgaWYgKGZvcmNlQmFzZWxpbmUoKSAmJiAhdXNlSklUKCkpIHsKICAgICAgICAgY29oZXJlbnQg
PSBmYWxzZTsKLSAgICAgICAgZGF0YUxvZygiSU5DT0hFUkVOVCBPUFRJT05TOiBhdCBsZWFzdCBv
bmUgb2YgdXNlTExJbnQgb3IgdXNlSklUIG11c3QgYmUgdHJ1ZVxuIik7CisgICAgICAgIGRhdGFM
b2coIklOQ09IRVJFTlQgT1BUSU9OUzogZm9yY2VCYXNlbGluZSBjYW4ndCBiZSB0cnVlIGlmIHVz
ZUpJVCBpcyBmYWxzZVxuIik7CiAgICAgfQogICAgIGlmICghY29oZXJlbnQpCiAgICAgICAgIENS
QVNIKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHJldmlzaW9uIDI1NDM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgY29uc3RleHByIGJv
b2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIGR1bXBPcHRpb25z
LCAwLCBOb3JtYWwsICJkdW1wcyBKU0Mgb3B0aW9ucyAoMCA9IE5vbmUsIDEgPSBPdmVycmlkZGVu
IG9ubHksIDIgPSBBbGwsIDMgPSBWZXJib3NlKSIpIFwKICAgICB2KE9wdGlvblN0cmluZywgY29u
ZmlnRmlsZSwgbnVsbHB0ciwgTm9ybWFsLCAiZmlsZSB0byBjb25maWd1cmUgSlNDIG9wdGlvbnMg
YW5kIGxvZ2dpbmcgbG9jYXRpb24iKSBcCiAgICAgXAotICAgIHYoQm9vbCwgdXNlTExJbnQsICB0
cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIExMSU5UIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKKyAg
ICB2KEJvb2wsIGZvcmNlQmFzZWxpbmUsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSdsbCBz
dGFydCBydW5uaW5nIGNvZGUgaW4gdGhlIGJhc2VsaW5lIEpJVCBhbmQgc2tpcCBzdGFydGluZyBp
biB0aGUgTExJbnQiKSBcCiAgICAgdihCb29sLCB1c2VKSVQsIGppdEVuYWJsZWRCeURlZmF1bHQo
KSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBleGVjdXRhYmxlIHBhZ2VzIHRvIGJlIGFsbG9jYXRlZCBm
b3IgSklUIGFuZCB0aHVua3MgaWYgdHJ1ZSIpIFwKICAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklU
LCB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIGJhc2VsaW5lIEpJVCB0byBiZSB1c2VkIGlmIHRy
dWUiKSBcCiAgICAgdihCb29sLCB1c2VERkdKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUg
REZHIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCkBAIC00OTQsNyArNDk0LDYgQEAgY29uc3Rl
eHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoT3B0aW9uU3RyaW5nLCBk
dW1wSklUTWVtb3J5UGF0aCwgbnVsbHB0ciwgUmVzdHJpY3RlZCwgbnVsbHB0cikgXAogICAgIHYo
RG91YmxlLCBkdW1wSklUTWVtb3J5Rmx1c2hJbnRlcnZhbCwgMTAsIFJlc3RyaWN0ZWQsICJNYXhp
bXVtIHRpbWUgaW4gYmV0d2VlbiBmbHVzaGVzIG9mIHRoZSBKSVQgbWVtb3J5IGR1bXAgaW4gc2Vj
b25kcy4iKSBcCiAgICAgdihCb29sLCB1c2VVbmxpbmtlZENvZGVCbG9ja0pldHRpc29uaW5nLCBm
YWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgVW5saW5rZWRDb2RlQmxvY2sgY2FuIGJlIGpldHRpc29u
ZWQuIikgXAotICAgIHYoQm9vbCwgZm9yY2VPU1JFeGl0VG9MTEludCwgZmFsc2UsIE5vcm1hbCwg
IklmIHRydWUsIHdlIGFsd2F5cyBleGl0IHRvIHRoZSBMTEludC4gSWYgZmFsc2UsIHdlIGV4aXQg
dG8gd2hhdGV2ZXIgaXMgbW9zdCBjb252ZW5pZW50LiIpIFwKICAgICB2KFVuc2lnbmVkLCBnZXRC
eVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycywgNCwgTm9ybWFsLCAiTnVtYmVyIG9mIGlkZW50
aWZpZXJzIHdlIHNlZSBpbiB0aGUgTExJbnQgdGhhdCBjb3VsZCBjYXVzZSB1cyB0byBiYWlsIG9u
IGdlbmVyYXRpbmcgYW4gSUMgZm9yIGdldF9ieV92YWwuIikgXAogCiBlbnVtIE9wdGlvbkVxdWl2
YWxlbmNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI2
LDEwICs0MjYsMTAgQEAgRXhjZXB0aW9uKiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRQog
ICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9jay0+
dmFsaWRhdGUoKTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKLSAgICAgICAg
c2V0dXBMTEludChjb2RlQmxvY2spOwotICAgIGVsc2UKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VC
YXNlbGluZSgpKQogICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKKyAgICBlbHNlCisg
ICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKICAgICAKICAgICBpbnN0YWxsQ29kZSh2bSwg
Y29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRp
b25LaW5kKCkpOwogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0Mzg2KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMTAgIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVGhyb3cgYXdheSBiYXNl
bGluZSBjb2RlIGlmIHRoZXJlIGlzIGFuIG9wdGltaXplZCByZXBsYWNlbWVudAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNTAzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzOgorCiAyMDIwLTAxLTEwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFw
cGxlLmNvbT4KIAogICAgICAgICBQeXRob24zOiBTdXBwb3J0IFNvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjU0
MzQ3KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5
KQpAQCAtNDk4LDcgKzQ5OCw2IEBAIE5PX0NKSVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJyZW50
SklUPWYKIEIzTzFfT1BUSU9OUyA9IFsiLS1kZWZhdWx0QjNPcHRMZXZlbD0xIl0KIEIzTzBfT1BU
SU9OUyA9IFsiLS1tYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNpc2VBbmFseXNpcz0xMDAi
LCAiLS1kZWZhdWx0QjNPcHRMZXZlbD0wIl0KIEZUTF9PUFRJT05TID0gWyItLXVzZUZUTEpJVD10
cnVlIl0KLUZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50
PXRydWUiXQogCiByZXF1aXJlX3JlbGF0aXZlICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13
cml0ZXItI3skdGVzdFdyaXRlcn0iCiAKQEAgLTY1NSw3ICs2NTQsNyBAQCBlbmQKIAogZGVmIHJ1
bk5vTExJbnQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBpZiAkaml0VGVzdHMK
LSAgICAgICAgcnVuKCJuby1sbGludCIsICItLXVzZUxMSW50PWZhbHNlIiwgKm9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykKKyAgICAgICAgcnVuKCJuby1sbGludCIsICItLWZvcmNlQmFzZWxp
bmU9dHJ1ZSIsICpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgZW5kCiBlbmQKIApA
QCAtNzA4LDcgKzcwNyw3IEBAIGRlZiBydW5GVExOb0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3AKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICItLXVzZUFycmF5QWxsb2NhdGlvblBy
b2ZpbGluZz1mYWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAqKEZUTF9PUFRJT05TICsg
Tk9fQ0pJVF9PUFRJT05TICsgQjNPMF9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1jaml0LWIz
bzAiLCAiLS11c2VBcnJheUFsbG9jYXRpb25Qcm9maWxpbmc9ZmFsc2UiLCAiLS1mb3JjZVBvbHlQ
cm90bz10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIEIzTzBfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJ
VFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MjgsNyArNzI3LDcg
QEAgZGVmIHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRpb24oKm9wdGlvbmFsVAogZW5kCiAKIGRlZiBy
dW5ERkdFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZGZnLWVh
Z2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIEZP
UkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisg
ICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNM
WV9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVu
REZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAt
NzQ1LDcgKzc0NCw3IEBAIGRlZiBydW5GVExFYWdlcldhdGNoZG9nKCpvcHRpb25hbFRlc3RTcGUK
IGVuZAogCiBkZWYgcnVuRlRMRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKQotICAgIHJ1bigiZnRsLWVhZ2VyLW5vLWNqaXQiLCAiLS12YWxpZGF0ZUdyYXBo
PXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJ
T05TICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKKyAgICBydW4oImZ0bC1lYWdlci1uby1jaml0IiwgIi0tdmFsaWRhdGVHcmFwaD10cnVl
IiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklU
X09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTEVhZ2VyTm9D
SklUQjNPMSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAtMTA2MCw3ICsxMDU5LDcg
QEAgZGVmIGRlZmF1bHRSdW5Nb2R1bGVzKG5vTExJbnQ6IHRydWUpCiAgICAgICAgIHJldHVybgog
ICAgIGVuZAogCi0gICAgcnVuKCJuby1sbGludC1tb2R1bGVzIiwgIi1tIiwgIi0tdXNlTExJbnQ9
ZmFsc2UiKSBpZiBub0xMSW50CisgICAgcnVuKCJuby1sbGludC1tb2R1bGVzIiwgIi1tIiwgIi0t
Zm9yY2VCYXNlbGluZT10cnVlIikgaWYgbm9MTEludAogICAgIHJ1bigibm8tY2ppdC12YWxpZGF0
ZS1waGFzZXMtbW9kdWxlcyIsICItbSIsICItLXZhbGlkYXRlQnl0ZWNvZGU9dHJ1ZSIsICItLXZh
bGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVlIiwgKk5PX0NKSVRfT1BUSU9OUykKICAgICBydW4o
ImRmZy1lYWdlci1tb2R1bGVzIiwgIi1tIiwgKkVBR0VSX09QVElPTlMpCiAgICAgcnVuKCJkZmct
ZWFnZXItbm8tY2ppdC12YWxpZGF0ZS1tb2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRhdGVHcmFwaD10
cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKQEAgLTEyNjEsNyArMTI2
MCw3IEBAIGRlZiBydW5MYXlvdXRUZXN0Tm9GVEwKIGVuZAogCiBkZWYgcnVuTGF5b3V0VGVzdE5v
TExJbnQKLSAgICBydW5MYXlvdXRUZXN0KCJuby1sbGludCIsICItLXVzZUxMSW50PWZhbHNlIikK
KyAgICBydW5MYXlvdXRUZXN0KCJuby1sbGludCIsICItLWZvcmNlQmFzZWxpbmU9dHJ1ZSIpCiBl
bmQKIAogZGVmIHJ1bkxheW91dFRlc3ROb0NKSVQKQEAgLTE0MjcsNyArMTQyNiw3IEBAIGRlZiBy
dW5Nb3ppbGxhVGVzdExMSW50KG1vZGUsICpleHRyYUZpbGUKIGVuZAogCiBkZWYgcnVuTW96aWxs
YVRlc3RCYXNlbGluZUpJVChtb2RlLCAqZXh0cmFGaWxlcykKLSAgICBydW5Nb3ppbGxhVGVzdCgi
YmFzZWxpbmUiLCBtb2RlLCBleHRyYUZpbGVzLCAiLS11c2VMTEludD1mYWxzZSIsICItLXVzZURG
R0pJVD1mYWxzZSIpCisgICAgcnVuTW96aWxsYVRlc3QoImJhc2VsaW5lIiwgbW9kZSwgZXh0cmFG
aWxlcywgIi0tZm9yY2VCYXNlbGluZT10cnVlIiwgIi0tdXNlREZHSklUPWZhbHNlIikKIGVuZAog
CiBkZWYgcnVuTW96aWxsYVRlc3RERkdFYWdlck5vQ0pJVFZhbGlkYXRlUGhhc2VzKG1vZGUsICpl
eHRyYUZpbGVzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387554</attachid>
            <date>2020-01-13 12:05:17 -0800</date>
            <delta_ts>2020-01-13 16:39:57 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>44419</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTQzNDkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDIwLTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRocm93IGF3YXkgYmFzZWxpbmUgY29kZSBpZiB0aGVyZSBpcyBhbiBv
cHRpbWl6ZWQgcmVwbGFjZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMjUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogc3RyZXNzL2RmZy1jb21wYXJlLWVxLXZpYS1ub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZC5qczoKKyAgICAgICAgKiBzdHJlc3MvZ2V0
dGVyLXNldHRlci1pbmxpbmluZy1zaG91bGQtZW1pdC1tb3ZoaW50LmpzOgorICAgICAgICAqIHN0
cmVzcy9tYWtlLWRpY3Rpb25hcnktcmVwYXRjaC5qczoKKyAgICAgICAgKiBzdHJlc3MvbWVyZ2lu
Zy1pYy12YXJpYW50cy1zaG91bGQtYmFpbC1pZi1zdHJ1Y3R1cmVzLW92ZXJsYXAuanM6CisgICAg
ICAgICogc3RyZXNzL3Byb3h5LWdldHRlci1zdGFjay1vdmVyZmxvdy5qczoKKyAgICAgICAgKiBz
dHJlc3MvcmVncmVzcy0xOTI3MTcuanM6CisgICAgICAgICogc3RyZXNzL3JldHJ5LWNhY2hlLWxh
dGVyLmpzOgorCiAyMDIwLTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgog
CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgZG9lc24ndCBtb2RlbCBwb2lu
dGVycyB0byBhbGxvY2F0aW9ucyBpbiBjb250cm9sIGZsb3cgcHJvcGVybHkKSW5kZXg6IEpTVGVz
dHMvc3RyZXNzL2RmZy1jb21wYXJlLWVxLXZpYS1ub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZU51bGxPclVuZGVmaW5lZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmct
Y29tcGFyZS1lcS12aWEtbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRl
ZmluZWQuanMJKHJldmlzaW9uIDI1NDM0NykKKysrIEpTVGVzdHMvc3RyZXNzL2RmZy1jb21wYXJl
LWVxLXZpYS1ub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vQCBydW5EZWZhdWx0KCItLWNvbGxl
Y3RDb250aW51b3VzbHk9dHJ1ZSIsICItLWNvbGxlY3RDb250aW51b3VzbHlQZXJpb2RNUz0wLjE1
IiwgIi0tdXNlTExJbnQ9ZmFsc2UiLCAiLS11c2VGVExKSVQ9ZmFsc2UiLCAiLS1qaXRQb2xpY3lT
Y2FsZT0wIikKKy8vQCBydW5EZWZhdWx0KCItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICIt
LWNvbGxlY3RDb250aW51b3VzbHlQZXJpb2RNUz0wLjE1IiwgIi0tZm9yY2VCYXNlbGluZT10cnVl
IiwgIi0tdXNlRlRMSklUPWZhbHNlIiwgIi0taml0UG9saWN5U2NhbGU9MCIpCiAKIC8vIFRoaXMg
dGVzdCBleGVyY2lzZXMgREZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoKS4KIApJbmRleDogSlNUZXN0cy9zdHJlc3MvZ2V0
dGVyLXNldHRlci1pbmxpbmluZy1zaG91bGQtZW1pdC1tb3ZoaW50LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL2dldHRlci1zZXR0ZXItaW5saW5pbmctc2hvdWxkLWVtaXQtbW92aGlu
dC5qcwkocmV2aXNpb24gMjU0MzQ3KQorKysgSlNUZXN0cy9zdHJlc3MvZ2V0dGVyLXNldHRlci1p
bmxpbmluZy1zaG91bGQtZW1pdC1tb3ZoaW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEs
NCBAQAotLy9AIHJ1bkRlZmF1bHQoIi0tdXNlUmFuZG9taXppbmdGdXp6ZXJBZ2VudD0xIiwgIi0t
dXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmdGb3JOb25TdHViU3RhdHVzPTEiLCAiLS1zZWVkT2ZS
YW5kb21pemluZ0Z1enplckFnZW50PTI4OTY5MjI1MDUiLCAiLS11c2VMTEludD0wIiwgIi0tdXNl
Q29uY3VycmVudEpJVD0wIikKKy8vQCBydW5EZWZhdWx0KCItLXVzZVJhbmRvbWl6aW5nRnV6emVy
QWdlbnQ9MSIsICItLXVzZVBvbHltb3JwaGljQ2FsbElubGluaW5nRm9yTm9uU3R1YlN0YXR1cz0x
IiwgIi0tc2VlZE9mUmFuZG9taXppbmdGdXp6ZXJBZ2VudD0yODk2OTIyNTA1IiwgIi0tZm9yY2VC
YXNlbGluZT0xIiwgIi0tdXNlQ29uY3VycmVudEpJVD0wIikKIGZ1bmN0aW9uIGZvbyhvKSB7CiAg
ICAgby5mID0gMDsKICAgICByZXR1cm4gby5mOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvbWFrZS1k
aWN0aW9uYXJ5LXJlcGF0Y2guanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvbWFrZS1k
aWN0aW9uYXJ5LXJlcGF0Y2guanMJKHJldmlzaW9uIDI1NDM0NykKKysrIEpTVGVzdHMvc3RyZXNz
L21ha2UtZGljdGlvbmFyeS1yZXBhdGNoLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBA
QAotLy9AIGlmICRqaXRUZXN0cyB0aGVuIHJ1bk5vQ0pJVCgiLS11c2VERkdKSVQ9ZmFsc2UiLCAi
LS11c2VMTEludD1mYWxzZSIpIGVsc2Ugc2tpcCBlbmQKKy8vQCBpZiAkaml0VGVzdHMgdGhlbiBy
dW5Ob0NKSVQoIi0tdXNlREZHSklUPWZhbHNlIiwgIi0tZm9yY2VCYXNlbGluZT10cnVlIikgZWxz
ZSBza2lwIGVuZAogCiBmdW5jdGlvbiBmb28obykgewogICAgIHJldHVybiBvLmY7CkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9tZXJnaW5nLWljLXZhcmlhbnRzLXNob3VsZC1iYWlsLWlmLXN0cnVjdHVy
ZXMtb3ZlcmxhcC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tZXJnaW5nLWljLXZh
cmlhbnRzLXNob3VsZC1iYWlsLWlmLXN0cnVjdHVyZXMtb3ZlcmxhcC5qcwkocmV2aXNpb24gMjU0
MzQ3KQorKysgSlNUZXN0cy9zdHJlc3MvbWVyZ2luZy1pYy12YXJpYW50cy1zaG91bGQtYmFpbC1p
Zi1zdHJ1Y3R1cmVzLW92ZXJsYXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0v
L0AgcnVuRGVmYXVsdCgiLS12YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2U9MSIsICItLXVzZUxMSW50
PTAiKQorLy9AIHJ1bkRlZmF1bHQoIi0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlPTEiLCAiLS1m
b3JjZUJhc2VsaW5lPTEiKQogCiBsZXQgaXRlbXMgPSBbXTsKIGZvciAobGV0IGkgPSAwOyBpIDwg
ODsgKytpKSB7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wcm94eS1nZXR0ZXItc3RhY2stb3ZlcmZs
b3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHJveHktZ2V0dGVyLXN0YWNrLW92
ZXJmbG93LmpzCShyZXZpc2lvbiAyNTQzNDcpCisrKyBKU1Rlc3RzL3N0cmVzcy9wcm94eS1nZXR0
ZXItc3RhY2stb3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vL0Ag
aWYgJGppdFRlc3RzIHRoZW4gcnVuRGVmYXVsdCgiLS11c2VMTEludD0wIikgZWxzZSBza2lwIGVu
ZAorLy9AIGlmICRqaXRUZXN0cyB0aGVuIHJ1bkRlZmF1bHQoIi0tZm9yY2VCYXNlbGluZT0xIikg
ZWxzZSBza2lwIGVuZAogCiBjb25zdCBvID0ge307CiBjb25zdCBoYW5kbGVyID0gewpJbmRleDog
SlNUZXN0cy9zdHJlc3MvcmVncmVzcy0xOTI3MTcuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9z
dHJlc3MvcmVncmVzcy0xOTI3MTcuanMJKHJldmlzaW9uIDI1NDM0NykKKysrIEpTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMTkyNzE3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy9A
IHNraXAgaWYgJG1lbW9yeUxpbWl0ZWQgb3IgJGJ1aWxkVHlwZSA9PSAiZGVidWciCi0vL0AgcnVu
RGVmYXVsdCgiLS11c2VMTEludD1mYWxzZSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1
ZVRvT2xkQWdlPXRydWUiLCAiLS1tYXhQZXJUaHJlYWRTdGFja1VzYWdlPTIwMDAwMCIsICItLWV4
Y2VwdGlvblN0YWNrVHJhY2VMaW1pdD0xIiwgIi0tZGVmYXVsdEVycm9yU3RhY2tUcmFjZUxpbWl0
PTEiKQorLy9AIHJ1bkRlZmF1bHQoIi0tZm9yY2VCYXNlbGluZT10cnVlIiwgIi0tZm9yY2VDb2Rl
QmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLW1heFBlclRocmVhZFN0YWNrVXNh
Z2U9MjAwMDAwIiwgIi0tZXhjZXB0aW9uU3RhY2tUcmFjZUxpbWl0PTEiLCAiLS1kZWZhdWx0RXJy
b3JTdGFja1RyYWNlTGltaXQ9MSIpCiAKIGxldCBmb28gPSAnbGV0IGEnOwogZm9yIChsZXQgaSA9
IDA7IGkgPCA0MDAwMDA7IGkrKykKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JldHJ5LWNhY2hlLWxh
dGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3JldHJ5LWNhY2hlLWxhdGVyLmpz
CShyZXZpc2lvbiAyNTQzNDcpCisrKyBKU1Rlc3RzL3N0cmVzcy9yZXRyeS1jYWNoZS1sYXRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vQCBydW5Ob0NKSVQoIi0tdXNlTExJ
bnQ9ZmFsc2UiLCAiLS11c2VERkdKSVQ9ZmFsc2UiKQorLy9AIHJ1bk5vQ0pJVCgiLS1mb3JjZUJh
c2VsaW5lPXRydWUiLCAiLS11c2VERkdKSVQ9ZmFsc2UiKQogCiBmdW5jdGlvbiBmb28obykgewog
ICAgIHJldHVybiBvLmk3OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTQzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNTkgQEAKKzIwMjAtMDEtMTAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgVGhyb3cgYXdheSBiYXNlbGluZSBjb2RlIGlmIHRoZXJlIGlzIGFu
IG9wdGltaXplZCByZXBsYWNlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjAyNTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCdzIGdvYWwgaXMgdG8gaGVscCB1cyBzYXZlIEpJVCBl
eGVjdXRhYmxlIG1lbW9yeSBieSB0aHJvd2luZworICAgICAgICBhd2F5IGJhc2VsaW5lIGNvZGUg
d2hlbiBpdCBoYXMgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LiBUbyBtYWtlIGl0CisgICAgICAg
IGVhc3kgdG8gcmVhc29uIGFib3V0LCB3ZSBkbyB0aGlzIHdoZW4gZmluYWxpemluZyBhIEdDLCBh
bmQgd2hlbiB0aGUKKyAgICAgICAgQ29kZUJsb2NrIGlzIG5vdCBvbiB0aGUgc3RhY2suIFdoZW4g
d2UgZG8gdGhpcywgd2UgdGhyb3cgYXdheSBhbGwgSklUCisgICAgICAgIGRhdGEgYW5kIHVubGlu
ayBhbGwgaW5jb21pbmcgY2FsbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
cGF2ZXMgdGhlIHdheSBmb3IgdGhlIExPTCB0aWVyIGJ5IG1ha2luZyBpdCBzbyB3ZSBhbHdheXMK
KyAgICAgICAgZXhpdCB0byB0aGUgTExJbnQuIFRoaXMgYWxsb3dzIHRoZSBjb2RlIGluIENvZGVC
bG9jayBmaW5hbGl6YXRpb24gdG8gbm90CisgICAgICAgIGhhdmUgdG8gY29uc2lkZXIgd2hldGhl
ciBvciBub3QgYW4gYW4gT1NSIGV4aXQgaXMgd2lyZWQgdG8gYmFzZWxpbmUKKyAgICAgICAgSklU
IGNvZGUsIHNpbmNlIGFsbCBleGl0cyBhcmUgbm93IHRvIHRoZSBMTEludC4gQmVjYXVzZSBvZiB0
aGlzLCB0aGlzCisgICAgICAgIHBhdGNoIHJlbW92ZXMgdGhlIGZvcmNlT1NSRXhpdFRvTExJbnQg
b3B0aW9uLiBBbHNvLCB0aGlzIHBhdGNoIHJlbmFtZXMKKyAgICAgICAgdGhlIHVzZUxMSW50IG9w
dGlvbiB0byBmb3JjZUJhc2VsaW5lIGFuZCBpbnZlcnRzIGl0cyBtZWFuaW5nLgorICAgICAgICBP
cHRpb25zOjpmb3JjZUJhc2VsaW5lPXRydWUgaW1wbGllcyB0aGF0IGNvZGUgd2lsbCBzdGFydCBv
ZmYgZXhlY3V0aW5nIGluCisgICAgICAgIHRoZSBiYXNlbGluZSBKSVQgaW5zdGVhZCBvZiB0aGUg
TExJbnQuIEhvd2V2ZXIsIGl0IHdvbid0IHByZXZlbnQgdXMgZnJvbQorICAgICAgICBlbWl0dGlu
ZyBhbiBPU1IgZXhpdCB3aGljaCBqdW1wcyB0byBMTEludCBjb2RlLgorCisgICAgICAgICogQVBJ
L3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAodGVzdEV4ZWN1dGlv
blRpbWVMaW1pdCk6CisgICAgICAgICogQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rl
c3QuY3BwOgorICAgICAgICAodGVzdFBpbmdQb25nU3RhY2tPdmVyZmxvdyk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlc2V0SklURGF0YSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b3B0aW1pemVkUmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmaW5kU3R1YkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
a1NldDo6aXNDdXJyZW50bHlFeGVjdXRpbmcpOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0
Lmg6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRW5k
UGhhc2UpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OmRpc3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
T3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgor
ICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6T3B0aW9u
czo6ZW5zdXJlT3B0aW9uc0FyZUNvaGVyZW50KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNM
aXN0Lmg6CisgICAgICAgICogcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcDoKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwpOgorCiAyMDIw
LTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIE9iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UgZG9lc24ndCBtb2RlbCBwb2ludGVycyB0byBhbGxvY2F0
aW9ucyBpbiBjb250cm9sIGZsb3cgcHJvcGVybHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcAko
cmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVj
dXRpb25UaW1lTGltaXRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDExICsxMTksMTEg
QEAgc3RhdGljIHZvaWQgdGVzdFJlc2V0QWZ0ZXJUaW1lb3V0KGJvb2wmIAogaW50IHRlc3RFeGVj
dXRpb25UaW1lTGltaXQoKQogewogICAgIHN0YXRpYyBjb25zdCBUaWVyT3B0aW9ucyB0aWVyT3B0
aW9uc0xpc3RbXSA9IHsKLSAgICAgICAgeyAiTExJTlQiLCAgICAwX21zLCAgICItLXVzZUNvbmN1
cnJlbnRKSVQ9ZmFsc2UgLS11c2VMTEludD10cnVlIC0tdXNlSklUPWZhbHNlIiB9LAotICAgICAg
ICB7ICJCYXNlbGluZSIsIDBfbXMsICAgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSAtLXVzZUxM
SW50PXRydWUgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD1mYWxzZSIgfSwKLSAgICAgICAgeyAi
REZHIiwgICAgICAyMDBfbXMsICAgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSAtLXVzZUxMSW50
PXRydWUgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD10cnVlIC0tdXNlRlRMSklUPWZhbHNlIiB9
LAorICAgICAgICB7ICJMTElOVCIsICAgIDBfbXMsICAgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxz
ZSAtLXVzZUpJVD1mYWxzZSIgfSwKKyAgICAgICAgeyAiQmFzZWxpbmUiLCAwX21zLCAgICItLXVz
ZUNvbmN1cnJlbnRKSVQ9ZmFsc2UgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD1mYWxzZSIgfSwK
KyAgICAgICAgeyAiREZHIiwgICAgICAyMDBfbXMsICAgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxz
ZSAtLXVzZUpJVD10cnVlIC0tdXNlREZHSklUPXRydWUgLS11c2VGVExKSVQ9ZmFsc2UiIH0sCiAj
aWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgICAgIHsgIkZUTCIsICAgICAgNTAwX21zLCAiLS11c2VD
b25jdXJyZW50SklUPWZhbHNlIC0tdXNlTExJbnQ9dHJ1ZSAtLXVzZUpJVD10cnVlIC0tdXNlREZH
SklUPXRydWUgLS11c2VGVExKSVQ9dHJ1ZSIgfSwKKyAgICAgICAgeyAiRlRMIiwgICAgICA1MDBf
bXMsICItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD10
cnVlIC0tdXNlRlRMSklUPXRydWUiIH0sCiAjZW5kaWYKICAgICB9OwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL1BpbmdQb25n
U3RhY2tPdmVyZmxvd1Rlc3QuY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgaW50IHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3co
KQogCiAgICAgYXV0byBvcmlnU29mdFJlc2VydmVkWm9uZVNpemUgPSBPcHRpb25zOjpzb2Z0UmVz
ZXJ2ZWRab25lU2l6ZSgpOwogICAgIGF1dG8gb3JpZ1Jlc2VydmVkWm9uZVNpemUgPSBPcHRpb25z
OjpyZXNlcnZlZFpvbmVTaXplKCk7Ci0gICAgYXV0byBvcmlnVXNlTExJbnQgPSBPcHRpb25zOjp1
c2VMTEludCgpOworICAgIGF1dG8gb3JpZ0ZvcmNlQmFzZWxpbmUgPSBPcHRpb25zOjpmb3JjZUJh
c2VsaW5lKCk7CiAgICAgYXV0byBvcmlnTWF4UGVyVGhyZWFkU3RhY2tVc2FnZSA9IE9wdGlvbnM6
Om1heFBlclRocmVhZFN0YWNrVXNhZ2UoKTsKIAogICAgIE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpv
bmVTaXplKCkgPSAxMjggKiBLQjsKQEAgLTEzMSw3ICsxMzEsNyBAQCBpbnQgdGVzdFBpbmdQb25n
U3RhY2tPdmVyZmxvdygpCiAgICAgLy8gTm9ybWFsbHksIHdlIHdhbnQgdG8gZGlzYWJsZSB0aGUg
TExJTlQgdG8gZm9yY2UgdGhlIHVzZSBvZiBKSVR0ZWQgY29kZSB3aGljaCBpcyBuZWNlc3Nhcnkg
Zm9yCiAgICAgLy8gcmVwcm9kdWNpbmcgdGhlIHJlZ3Jlc3Npb24gaW4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODc0OS4gSG93ZXZlciwgd2Ugb25seQogICAgIC8v
IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgTExJTlQgaXNuJ3QgdGhlIG9ubHkgYXZhaWxhYmxlIGV4
ZWN1dGlvbiBlbmdpbmUuCi0gICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IGZhbHNlOworICAgIE9w
dGlvbnM6OmZvcmNlQmFzZWxpbmUoKSA9IHRydWU7CiAjZW5kaWYKIAogICAgIGNvbnN0IGNoYXIq
IHNjcmlwdFN0cmluZyA9CkBAIC0xNzgsNyArMTc4LDcgQEAgaW50IHRlc3RQaW5nUG9uZ1N0YWNr
T3ZlcmZsb3coKQogCiAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IG9yaWdT
b2Z0UmVzZXJ2ZWRab25lU2l6ZTsKICAgICBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgPSBv
cmlnUmVzZXJ2ZWRab25lU2l6ZTsKLSAgICBPcHRpb25zOjp1c2VMTEludCgpID0gb3JpZ1VzZUxM
SW50OworICAgIE9wdGlvbnM6OmZvcmNlQmFzZWxpbmUoKSA9IG9yaWdGb3JjZUJhc2VsaW5lOwog
ICAgIE9wdGlvbnM6Om1heFBlclRocmVhZFN0YWNrVXNhZ2UoKSA9IG9yaWdNYXhQZXJUaHJlYWRT
dGFja1VzYWdlOwogCiAgICAgcmV0dXJuIGZhaWxlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQyLDE0ICs0NDIsOCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBTCiAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRI
YW5kbGVyID0gdW5saW5rZWRDb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CiAgICAgICAg
ICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhh
bmRsZXJzW2ldOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICAgICAgYXV0byBpbnN0cnVj
dGlvbiA9IGluc3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpOwotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCeXRlY29kZVB0clRhZz4gY29kZVB0cjsK
LSAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPmlzV2lkZTMyKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGNvZGVQdHIgPSBMTEludDo6Z2V0V2lkZTMyQ29kZVB0cjxCeXRlY29kZVB0clRh
Zz4ob3BfY2F0Y2gpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5pc1dp
ZGUxNigpKQotICAgICAgICAgICAgICAgICAgICBjb2RlUHRyID0gTExJbnQ6OmdldFdpZGUxNkNv
ZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+KG9wX2NhdGNoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGNvZGVQdHIgPSBMTEludDo6Z2V0Q29kZVB0cjxCeXRlY29kZVB0
clRhZz4ob3BfY2F0Y2gpOworICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmlu
c3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCeXRlY29kZVB0clRhZz4gY29kZVB0ciA9IExM
SW50OjpnZXRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihpbnN0cnVjdGlvbik7CiAgICAgICAgICAg
ICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFi
ZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29kZVB0ci5yZXRhZ2dlZDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPigpKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6
ZSh1bmxpbmtlZEhhbmRsZXIpOwpAQCAtMTM5MCw2ICsxMzg0LDM2IEBAIHZvaWQgQ29kZUJsb2Nr
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICBVTlVTRURfUEFSQU0odm0pOwogCiAgICAg
dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKCFPcHRp
b25zOjpmb3JjZUJhc2VsaW5lKCkgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
ICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMp
KSB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5t
X29zckV4aXRDb3VudGVyKSB7CisgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
ayk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGUt
Pm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRD
b2RlLT5leGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCku
YXQodW5saW5rZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+IGNvZGVQdHIgPSBMTEludDo6
Z2V0Q29kZVB0cjxCeXRlY29kZVB0clRhZz4oaW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9u
TGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29kZVB0ci5yZXRhZ2dlZDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPigpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcworICAgICAgICAgICAg
ICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJl
Zm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQorICAgICAgICAgICAg
ICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRo
ZSB2YXJpb3VzICppbmZvcy4KKyAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmCiAgICAgCiAgICAgaWYgKEpJVENv
ZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKCk7CkBAIC0xNTE3LDE4ICsxNTQxLDYgQEAgSklUTmVnSUMqIENvZGVCbG9j
azo6YWRkSklUTmVnSUMoVW5hcnlBcgogICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlciku
bV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7CiB9CiAKLVN0cnVjdHVyZVN0dWJJbmZvKiBDb2Rl
QmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi17Ci0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9q
aXREYXRhLmdldCgpKSB7Ci0gICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
IDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29k
ZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQotICAgICAgICAgICAgICAgIHJldHVybiBzdHViSW5mbzsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogQnlWYWxJbmZvKiBD
b2RlQmxvY2s6OmFkZEJ5VmFsSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOwpAQCAtMTU0MSwxOCArMTU1Myw2IEBAIENhbGxMaW5rSW5mbyogQ29kZUJsb2Nr
OjphZGRDYWxsTGlua0luZm8KICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fY2Fs
bExpbmtJbmZvcy5hZGQoKTsKIH0KIAotQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxM
aW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKLXsKLSAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgaWYgKGF1dG8qIGppdERhdGEgPSBt
X2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykgewotICAgICAgICAgICAgaWYgKGNhbGxMaW5r
SW5mby0+Y29kZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5kZXgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBjYWxsTGlua0luZm87Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KIFJhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKQEAgLTE2MDAsMTMgKzE2MDAsMjYgQEAgdm9pZCBDb2RlQmxvY2s6OnJl
c2V0SklURGF0YSgpCiAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGVzZSBiZWNhdXNlIG5vIG90
aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZvcywgY2FsbAog
ICAgICAgICAvLyBsaW5rIGluZm9zLCBvciBieSB2YWwgaW5mb3MgaWYgd2UgZG9uJ3QgaGF2ZSBK
SVQgY29kZS4gQXR0ZW1wdHMgdG8gcXVlcnkgdGhlc2UgZGF0YQogICAgICAgICAvLyBzdHJ1Y3R1
cmVzIHVzaW5nIHRoZSBjb25jdXJyZW50IEFQSSAoZ2V0SUNTdGF0dXNNYXAgYW5kIGZyaWVuZHMp
IHdpbGwgcmV0dXJuIG5vdGhpbmcgaWYgd2UKLSAgICAgICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29k
ZS4KKyAgICAgICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4gU28gaXQncyBzYWZlIHRvIGNhbGwg
dGhpcyBpZiB3ZSBmYWlsIGEgYmFzZWxpbmUgSklUIGNvbXBpbGUuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFdlIGFsc28gY2FsbCB0aGlzIGZyb20gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgd2hl
biB3ZSBkZWdyYWRlIGZyb20gYmFzZWxpbmUgSklUIHRvIExMSW50CisgICAgICAgIC8vIGNvZGUu
IFRoaXMgaXMgc2FmZSB0byBkbyBzaW5jZSBhbGwgY29tcGlsZXIgdGhyZWFkcyBhcmUgc2FmZXBv
aW50ZWQgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHksCisgICAgICAgIC8vIHdoaWNoIG1lYW5z
IHdlJ3ZlIG1hZGUgaXQgcGFzdCBieXRlY29kZSBwYXJzaW5nLiBPbmx5IHRoZSBieXRlY29kZSBw
YXJzZXIgd2lsbCBob2xkIG9udG8KKyAgICAgICAgLy8gcmVmZXJlbmNlcyB0byB0aGVzZSB2YXJp
b3VzICppbmZvcyB2aWEgaXRzIHVzZSBvZiBJQ1N0YXR1c01hcC4KKworICAgICAgICBmb3IgKFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CisgICAg
ICAgICAgICBzdHViSW5mby0+YWJvdXRUb0RpZSgpOworICAgICAgICAgICAgc3R1YkluZm8tPmRl
cmVmKCk7CisgICAgICAgIH0KKwogICAgICAgICBqaXREYXRhLT5tX3N0dWJJbmZvcy5jbGVhcigp
OwogICAgICAgICBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MuY2xlYXIoKTsKICAgICAgICAgaml0
RGF0YS0+bV9ieVZhbEluZm9zLmNsZWFyKCk7CiAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGlz
IGJlY2F1c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBn
dWFyZGVkIGJ5IHdoZXRoZXIKICAgICAgICAgLy8gdGhlcmUgaXMgSklUIGNvZGUuCiAgICAgICAg
IGppdERhdGEtPm1fcmFyZUNhc2VQcm9maWxlcy5jbGVhcigpOworCisgICAgICAgIG1faml0RGF0
YSA9IG51bGxwdHI7CiAgICAgfQogfQogI2VuZGlmCkBAIC0xNzMzLDEwICsxNzQ2LDI0IEBAIENv
ZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQogCiAjaWYgRU5BQkxFKEpJ
VCkKLWJvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRUeXBlIHR5cGVU
b1JlcGxhY2UpCitDb2RlQmxvY2sqIENvZGVCbG9jazo6b3B0aW1pemVkUmVwbGFjZW1lbnQoSklU
VHlwZSB0eXBlVG9SZXBsYWNlKQogewogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSB0aGlz
LT5yZXBsYWNlbWVudCgpOwotICAgIHJldHVybiByZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0hp
Z2hlclRpZXIocmVwbGFjZW1lbnQtPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7CisgICAgaWYg
KCFyZXBsYWNlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudC0+aml0VHlwZSgpLCB0eXBlVG9SZXBsYWNlKSkKKyAg
ICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OworICAgIHJldHVybiBudWxscHRyOworfQorCitDb2Rl
QmxvY2sqIENvZGVCbG9jazo6b3B0aW1pemVkUmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiBv
cHRpbWl6ZWRSZXBsYWNlbWVudChqaXRUeXBlKCkpOworfQorCitib29sIENvZGVCbG9jazo6aGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoSklUVHlwZSB0eXBlVG9SZXBsYWNlKQoreworICAgIHJldHVy
biAhIW9wdGltaXplZFJlcGxhY2VtZW50KHR5cGVUb1JlcGxhY2UpOwogfQogCiBib29sIENvZGVC
bG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQpAQCAtMjc5OCw3ICsyODI1LDcgQEAgYm9v
bCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIHZvaWQgQ29kZUJsb2NrOjp0YWxseUZy
ZXF1ZW50RXhpdFNpdGVzKCkKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpOwotICAgIEFTU0VSVChhbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShh
bHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkpKTsKICAgICAKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2sgPSBhbHRlcm5hdGl2ZSgpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNiAr
MjU4LDkgQEAgcHVibGljOgogCiAgICAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gYnl0ZWNvZGVJ
bmRleEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXgpOwogCisgICAgLy8gQmVjYXVzZSB3
ZSB0aHJvdyBvdXQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIGFsbCBpdHMgYmFzZWxpbmUgSklUIGRh
dGEsIHlvdQorICAgIC8vIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aGVyZSB5b3UgY2FsbCB0aGlzLiBZ
b3UgY2FuIG9ubHkgY2FsbCB0aGlzIGlmIHlvdSd2ZQorICAgIC8vIGd1YXJhbnRlZWQgd2UgaGF2
ZW4ndCBmaW5hbGl6ZWQgYSBHQyBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBhbmQgaXRzIGxhc3QgdXNl
LgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgSUNT
dGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYg
cmVzdWx0KTsKICAgICAKQEAgLTMwNywxOCArMzEwLDkgQEAgcHVibGljOgogCiAgICAgU3RydWN0
dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUpOwogCi0gICAgLy8gTyhuKSBvcGVy
YXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5k
IHRvIGdldCBvbmUKLSAgICAvLyBzdHViIGluZm8uCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIGZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKLQogICAgIEJ5VmFsSW5mbyogYWRkQnlWYWxJbmZvKCk7
CiAKICAgICBDYWxsTGlua0luZm8qIGFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgLy8gVGhpcyBp
cyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBl
eGl0cyBpbiB0aGUgY2FzZQotICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENo
YW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5Ci0gICAgLy8g
bG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2Fs
bGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4KTsKICAgICAKICAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29k
ZU1hcCYmIGppdENvZGVNYXApCiAgICAgewpAQCAtNDEyLDcgKzQwNiw2IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIHNldEpJVENvZGUoUmVmPEpJVENvZGU+JiYgY29kZSkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7CiAgICAgICAgIGlmICghY29kZS0+aXNT
aGFyZWQoKSkKICAgICAgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQo
Y29kZS0+c2l6ZSgpKTsKIApAQCAtNDQ0LDYgKzQzNyw4IEBAIHB1YmxpYzoKICAgICBERkc6OkNh
cGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBERkc6OkNhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWxTdGF0ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6Q2FwYWJp
bGl0eUxldmVsPihtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKTsgfQogCisgICAgQ29kZUJsb2NrKiBv
cHRpbWl6ZWRSZXBsYWNlbWVudChKSVRUeXBlIHR5cGVUb1JlcGxhY2UpOworICAgIENvZGVCbG9j
ayogb3B0aW1pemVkUmVwbGFjZW1lbnQoKTsgLy8gdGhlIHR5cGVUb1JlcGxhY2UgaXMgbXkgSklU
VHlwZQogICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoSklUVHlwZSB0eXBlVG9SZXBs
YWNlKTsKICAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9S
ZXBsYWNlIGlzIG15IEpJVFR5cGUKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAKICAgICBBU1NFUlQoY29k
ZUJsb2NrKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxv
Y2sgfHwgcHJvZmlsZWRERkdDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQp
OwogICAgIAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMobW9kZSkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw4NSArMTQy
LDUzIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBkb25l
QWRqdXN0aW5nLmxpbmsoJmppdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLCBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWU6Oktp
bmQgdHJ1ZUNhbGxlckNhbGxLaW5kLCBib29sJiBjYWxsZXJJc0xMSW50KQorc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUlu
ZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kKQogewotICAgIGNh
bGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OwotCiAgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKICAgICAgICAgcmV0
dXJuIExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRf
ZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIAotICAgIGlmIChjYWxsZXJJc0xMSW50KSB7
Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjYWxsSW5zdHJ1Y3Rpb24gPSAqYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9ucygpLmF0KGNhbGxCeXRlY29kZUluZGV4KS5w
dHIoKTsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiYgY2FsbEluc3RydWN0aW9uID0gKmJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsQnl0ZWNvZGVJbmRleCku
cHRyKCk7CiAjZGVmaW5lIExMSU5UX1JFVFVSTl9MT0NBVElPTihuYW1lKSAoY2FsbEluc3RydWN0
aW9uLmlzV2lkZTE2KCkgPyBMTEludDo6Z2V0V2lkZTE2Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihu
YW1lIyNfcmV0dXJuX2xvY2F0aW9uKSA6IChjYWxsSW5zdHJ1Y3Rpb24uaXNXaWRlMzIoKSA/IExM
SW50OjpnZXRXaWRlMzJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KG5hbWUjI19yZXR1cm5fbG9jYXRp
b24pIDogTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4obmFtZSMjX3JldHVybl9sb2Nh
dGlvbikpKQogCi0gICAgICAgIHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7Ci0gICAgICAg
IGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgotICAgICAgICAgICAganVtcFRhcmdldCA9IExM
SU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgotICAgICAgICAgICAganVtcFRhcmdl
dCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKLSAgICAgICAg
ICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Ns
b3cpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpD
b25zdHJ1Y3RWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9M
T0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDogewotICAgICAgICAgICAg
aWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX2dldF9ieV9pZCkKLSAgICAgICAg
ICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV9pZCk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9n
ZXRfYnlfdmFsKQotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfZ2V0X2J5X3ZhbCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOiB7Ci0gICAgICAg
ICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X2lkKQotICAg
ICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfcHV0X2J5
X2lkKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09
IG9wX3B1dF9ieV92YWwpCi0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVS
Tl9MT0NBVElPTihvcF9wdXRfYnlfdmFsKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKKyAgICBzd2l0Y2ggKHRydWVDYWxsZXJDYWxsS2lu
ZCkgeworICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgorICAgICAgICBqdW1wVGFyZ2V0
ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGwpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgorICAgICAgICBqdW1wVGFyZ2V0ID0gTExJ
TlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKKyAgICAgICAganVtcFRhcmdldCA9IExM
SU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBq
dW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzX3Ns
b3cpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2Fs
bDogeworICAgICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfZ2V0X2J5
X2lkKQorICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9n
ZXRfYnlfaWQpOworICAgICAgICBlbHNlIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9
PSBvcF9nZXRfYnlfdmFsKQorICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9M
T0NBVElPTihvcF9nZXRfYnlfdmFsKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotCi0jdW5kZWYgTExJTlRfUkVUVVJO
X0xPQ0FUSU9OCi0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKHRydWVDYWxsZXJDYWxs
S2luZCkgewotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKLSAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OkNhbGxWYXJhcmdzOgotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0
VmFyYXJnczogewotICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQotICAg
ICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9G
b3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mbyk7Ci0KLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpHZXR0ZXJDYWxsOgotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2Fs
bDogewotICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KLSAgICAgICAg
ICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmln
aW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvKTsKLQotICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24u
cmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSW5s
aW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOiB7CisgICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24u
b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfaWQpCisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJ
TlRfUkVUVVJOX0xPQ0FUSU9OKG9wX3B1dF9ieV9pZCk7CisgICAgICAgIGVsc2UgaWYgKGNhbGxJ
bnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWwpCisgICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX3B1dF9ieV92YWwpOworICAgICAgICBl
bHNlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAorI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElP
TgorCiAgICAgcmV0dXJuIGp1bXBUYXJnZXQ7CiB9CiAKQEAgLTI1NCw4ICsyMjIsNiBAQCB2b2lk
IHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIENvZGVPcmlnaW4q
IHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxz
KCZ0cnVlQ2FsbGVyQ2FsbEtpbmQpOwogICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFIgPSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKIAotICAgICAgICBib29sIGNhbGxlcklzTExJbnQg
PSBmYWxzZTsKLQogICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKICAgICAgICAgICAgIEFTU0VS
VChpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFz
c2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZy
YW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOwpAQCAtMjcxLDcgKzIzNyw3
IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIg
PSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgYXV0
byBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0ID0g
Y2FsbGVyUmV0dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUlu
ZGV4LCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1
cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVD
YWxsZXJDYWxsS2luZCk7CiAKICAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxs
RnJhbWUoKSkgewogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCkBAIC0zMDIsNyArMjY4LDgg
QEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAgICAg
dHJ1ZUNhbGxlciA/IEFzc2VtYmx5SGVscGVyczo6VXNlRXhpc3RpbmdUYWdSZWdpc3RlckNvbnRl
bnRzIDogQXNzZW1ibHlIZWxwZXJzOjpDb3B5QmFzZWxpbmVDYWxsZWVTYXZlZFJlZ2lzdGVyc0Zy
b21CYXNlRnJhbWUsCiAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMik7CiAKLSAgICAgICAgaWYg
KGNhbGxlcklzTExJbnQpIHsKKyAgICAgICAgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAg
IC8vIFNldCB1cCBMTEludCByZWdpc3RlcnMgZm9yIG91ciBjYWxsZXIgaW4gb3VyIGNhbGxlZSBz
YXZlcy4KICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIg
PSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1l
LCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0zODgsNDQgKzM1NSwyNiBAQCB2b2lkIGFkanVzdEFu
ZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQg
PT0gY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKIAotICAg
IHZvaWQqIGp1bXBUYXJnZXQ7Ci0gICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAgICBpZiAoZXhpdFRvTExJbnQpIHsKLSAgICAgICAgYXV0
byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0Zv
ckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb247Ci0gICAgICAg
IGlmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
ID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF90
cmFtcG9saW5lKTsKLSAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gTExJ
bnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKLQotICAg
ICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjdXJyZW50SW5zdHJ1Y3Rpb24pLCBHUFJJ
bmZvOjpyZWdUMik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDIsICZ2
bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cpOwotICAgICAgICB9CisgICAgYXV0byBieXRl
Y29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIGNvbnN0
IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOworICAgIGlmIChieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxK
U0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUpOworICAgIGVsc2Ug
CisgICAgICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4o
Y3VycmVudEluc3RydWN0aW9uKTsKIAotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJl
Z2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5k
bGVyKCkpIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZj
dXJyZW50SW5zdHJ1Y3Rpb24pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGppdC5zdG9yZVB0
cihHUFJJbmZvOjpyZWdUMiwgJnZtLnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyk7CisgICAg
fQorCisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0Zv
ckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVH
UFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkp
LCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVC
bG9ja0ZvckV4aXQtPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIExMSW50OjpSZWdpc3RlcnM6
OnBiR1BSKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwogI2Vsc2UKLSAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjdXJyZW50SW5zdHJ1Y3Rp
b24pLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKCZjdXJyZW50SW5zdHJ1Y3Rpb24pLCBMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUik7CiAjZW5kaWYKLSAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2Vk
PE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRl
c3RpbmF0aW9uOwotICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkKLSAgICAgICAg
ICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2tw
b2ludF9vc3JfZXhpdF90cmFtcG9saW5lKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBB
U1NFUlQoY29kZUJsb2NrRm9yRXhpdC0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoZXhpdEluZGV4KSA9
PSBleGl0SW5kZXgpOwotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0
LT5qaXRDb2RlTWFwKCkuZmluZChleGl0SW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNT
RVJUKGRlc3RpbmF0aW9uKTsKLQotICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0
YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgIH0KIAogICAg
IGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50
ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CkBAIC00MzMsNyArMzgy
LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBq
aXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJlc3NPZkNhbGxG
cmFtZUZvckNhdGNoKCkpOwogICAgIH0KICAgICAKLSAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQu
bW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZGVzdGluYXRpb24ucmV0YWdnZWQ8
T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5oCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZvaWQgaGFuZGxlRXhpdENvdW50
cyhWTSYsIENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7CiB2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiwgQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJh
c2UmKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5Q
QyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNh
bGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgY2FsbGVyS2luZCwgYm9vbCYg
Y2FsbGVySXNMTEludCk7CiBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlU2F2ZVNsb3QoSW5s
aW5lQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgR1BSUmVnIGNhbGxl
ZVNhdmUpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSklUQ29kZVR5cGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHJldmlzaW9uIDI1NDM0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhckN1cnJlbnRs
eUV4ZWN1dGkKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwogfQogCitib29sIENv
ZGVCbG9ja1NldDo6aXNDdXJyZW50bHlFeGVjdXRpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7
CisgICAgcmV0dXJuIG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9jayk7Cit9
CisKIHZvaWQgQ29kZUJsb2NrU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgQ29tbWFQcmludGVyIGNvbW1hOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDI1NDM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGNh
bmRpZGF0ZUNvZGVCbG9jayk7CiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsg
fQogCisgICAgLy8gVGhpcyBpcyBleHBlY3RlZCB0byBydW4gb25seSB3aGVuIHdlJ3JlIG5vdCBh
ZGRpbmcgdG8gdGhlIHNldCBmb3Igbm93LiBJZgorICAgIC8vIHRoaXMgbmVlZHMgdG8gcnVuIGNv
bmN1cnJlbnRseSBpbiB0aGUgZnV0dXJlLCB3ZSdsbCBuZWVkIHRvIGxvY2sgYXJvdW5kIHRoaXMu
CisgICAgYm9vbCBpc0N1cnJlbnRseUV4ZWN1dGluZyhDb2RlQmxvY2sqKTsKKwogICAgIC8vIFZp
c2l0cyBlYWNoIENvZGVCbG9jayBpbiB0aGUgaGVhcCB1bnRpbCB0aGUgdmlzaXRvciBmdW5jdGlv
biByZXR1cm5zIHRydWUKICAgICAvLyB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIGRvbmUgaXRlcmF0
aW5nLCBvciB1bnRpbCBldmVyeSBDb2RlQmxvY2sgaGFzIGJlZW4KICAgICAvLyB2aXNpdGVkLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI1NDM0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTIwLDcgKzE1MjAsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0Nv
CiAgICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDTWFwcygpOwogICAgIHN3ZWVwQXJyYXlC
dWZmZXJzKCk7CiAgICAgc25hcHNob3RVbnN3ZXB0KCk7Ci0gICAgZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOworICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsg
Ly8gV2UgcmVseSBvbiB0aGlzIGJlZm9yZSBydW5uaW5nIGNsZWFyQ3VycmVudGx5RXhlY3V0aW5n
IHNpbmNlIENvZGVCbG9jaydzIGZpbmFsaXplciByZWxpZXMgb24gcXVlcnlpbmcgY3VycmVudGx5
IGV4ZWN1dGluZy4KICAgICByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAg
ICBub3RpZnlJbmNyZW1lbnRhbFN3ZWVwZXIoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjU0MzQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk5MywxOSArMTk5Myw5IEBAIHN0YXRpYyB2b2lkIGhhbmRsZVZhcmFyZ3ND
aGVja3BvaW50KFZNJiAKIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hUb05leHRJ
bnN0cnVjdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBw
YykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJsb2NrLT52bSgpLmV4Y2VwdGlvbkZvcklu
c3BlY3Rpb24oKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7Ci0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBuZXh0UEMgPSBwYy5uZXh0KCkucHRyKCk7Ci0gICAgICAg
IGF1dG8gbmV4dEJ5dGVjb2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKnBj
Lm5leHQoKS5wdHIoKSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBuZXh0
Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
OwotICAgIEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgo
KTsKLSAgICBhdXRvIG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQo
bmV4dEJ5dGVjb2RlSW5kZXgpOwotICAgIHJldHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbmV4
dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotI2VuZGlmCi0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4
dCgpLnB0cigpOworICAgIGF1dG8gbmV4dEJ5dGVjb2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNF
bnRyeVB0clRhZz4oKnBjLm5leHQoKS5wdHIoKSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChu
ZXh0UEMsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAogZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9p
bmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lv
biAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURl
cGVuZGVudE9wdGlvbnMoKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxp
bmcoKSA9IHRydWU7CiAjZW5kaWYKICNpZiAhRU5BQkxFKEpJVCkKLSAgICBPcHRpb25zOjp1c2VM
TEludCgpID0gdHJ1ZTsKKyAgICBPcHRpb25zOjpmb3JjZUJhc2VsaW5lKCkgPSBmYWxzZTsKICAg
ICBPcHRpb25zOjp1c2VKSVQoKSA9IGZhbHNlOwogICAgIE9wdGlvbnM6OnVzZUJhc2VsaW5lSklU
KCkgPSBmYWxzZTsKICAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IGZhbHNlOwpAQCAtNDE5LDcg
KzQxOSw3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIH0K
IAogICAgIGlmICghaml0RW5hYmxlZEJ5RGVmYXVsdCgpICYmICFPcHRpb25zOjp1c2VKSVQoKSkK
LSAgICAgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IHRydWU7CisgICAgICAgIE9wdGlvbnM6OmZv
cmNlQmFzZWxpbmUoKSA9IGZhbHNlOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eSgpKQogICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQoKSA9IGZhbHNl
OwpAQCAtNTQ2LDggKzU0Niw2IEBAIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjphZGRyZXNzT2ZPcHRpb25EZWZhdWx0KHVzZUtl
cm5UQ1NNSUQpID09ICAmT3B0aW9uczo6dXNlS2VyblRDU01EZWZhdWx0KCkpOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKGdjTWF4SGVhcFNpemVJ
RCkgPT0gICZPcHRpb25zOjpnY01heEhlYXBTaXplKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChnY01heEhlYXBTaXplSUQpID09
ICAmT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZURlZmF1bHQoKSk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChPcHRpb25zOjphZGRyZXNzT2ZPcHRpb24oZm9yY2VPU1JFeGl0VG9MTEludElEKSA9
PSAgJk9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChPcHRpb25zOjphZGRyZXNzT2ZPcHRpb25EZWZhdWx0KGZvcmNlT1NSRXhpdFRvTExJ
bnRJRCkgPT0gICZPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50RGVmYXVsdCgpKTsKIAogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgICAgIENvbmZpZzo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlvbnMo
KTsKQEAgLTk0NSw5ICs5NDMsOSBAQCB2b2lkIE9wdGlvbnM6OmR1bXBPcHRpb24oU3RyaW5nQnVp
bGRlciYgCiB2b2lkIE9wdGlvbnM6OmVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpCiB7CiAgICAg
Ym9vbCBjb2hlcmVudCA9IHRydWU7Ci0gICAgaWYgKCEodXNlTExJbnQoKSB8fCB1c2VKSVQoKSkp
IHsKKyAgICBpZiAoZm9yY2VCYXNlbGluZSgpICYmICF1c2VKSVQoKSkgewogICAgICAgICBjb2hl
cmVudCA9IGZhbHNlOwotICAgICAgICBkYXRhTG9nKCJJTkNPSEVSRU5UIE9QVElPTlM6IGF0IGxl
YXN0IG9uZSBvZiB1c2VMTEludCBvciB1c2VKSVQgbXVzdCBiZSB0cnVlXG4iKTsKKyAgICAgICAg
ZGF0YUxvZygiSU5DT0hFUkVOVCBPUFRJT05TOiBmb3JjZUJhc2VsaW5lIGNhbid0IGJlIHRydWUg
aWYgdXNlSklUIGlzIGZhbHNlXG4iKTsKICAgICB9CiAgICAgaWYgKCFjb2hlcmVudCkKICAgICAg
ICAgQ1JBU0goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBjb25zdGV4
cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgZHVtcE9w
dGlvbnMsIDAsIE5vcm1hbCwgImR1bXBzIEpTQyBvcHRpb25zICgwID0gTm9uZSwgMSA9IE92ZXJy
aWRkZW4gb25seSwgMiA9IEFsbCwgMyA9IFZlcmJvc2UpIikgXAogICAgIHYoT3B0aW9uU3RyaW5n
LCBjb25maWdGaWxlLCBudWxscHRyLCBOb3JtYWwsICJmaWxlIHRvIGNvbmZpZ3VyZSBKU0Mgb3B0
aW9ucyBhbmQgbG9nZ2luZyBsb2NhdGlvbiIpIFwKICAgICBcCi0gICAgdihCb29sLCB1c2VMTElu
dCwgIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgTExJTlQgdG8gYmUgdXNlZCBpZiB0cnVlIikg
XAorICAgIHYoQm9vbCwgZm9yY2VCYXNlbGluZSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdl
J2xsIHN0YXJ0IHJ1bm5pbmcgY29kZSBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCBza2lwIHN0YXJ0
aW5nIGluIHRoZSBMTEludCIpIFwKICAgICB2KEJvb2wsIHVzZUpJVCwgaml0RW5hYmxlZEJ5RGVm
YXVsdCgpLCBOb3JtYWwsICJhbGxvd3MgdGhlIGV4ZWN1dGFibGUgcGFnZXMgdG8gYmUgYWxsb2Nh
dGVkIGZvciBKSVQgYW5kIHRodW5rcyBpZiB0cnVlIikgXAogICAgIHYoQm9vbCwgdXNlQmFzZWxp
bmVKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgYmFzZWxpbmUgSklUIHRvIGJlIHVzZWQg
aWYgdHJ1ZSIpIFwKICAgICB2KEJvb2wsIHVzZURGR0pJVCwgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dz
IHRoZSBERkcgSklUIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKQEAgLTQ5NCw3ICs0OTQsNiBAQCBj
b25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihPcHRpb25TdHJp
bmcsIGR1bXBKSVRNZW1vcnlQYXRoLCBudWxscHRyLCBSZXN0cmljdGVkLCBudWxscHRyKSBcCiAg
ICAgdihEb3VibGUsIGR1bXBKSVRNZW1vcnlGbHVzaEludGVydmFsLCAxMCwgUmVzdHJpY3RlZCwg
Ik1heGltdW0gdGltZSBpbiBiZXR3ZWVuIGZsdXNoZXMgb2YgdGhlIEpJVCBtZW1vcnkgZHVtcCBp
biBzZWNvbmRzLiIpIFwKICAgICB2KEJvb2wsIHVzZVVubGlua2VkQ29kZUJsb2NrSmV0dGlzb25p
bmcsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCBVbmxpbmtlZENvZGVCbG9jayBjYW4gYmUgamV0
dGlzb25lZC4iKSBcCi0gICAgdihCb29sLCBmb3JjZU9TUkV4aXRUb0xMSW50LCBmYWxzZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgd2UgYWx3YXlzIGV4aXQgdG8gdGhlIExMSW50LiBJZiBmYWxzZSwgd2Ug
ZXhpdCB0byB3aGF0ZXZlciBpcyBtb3N0IGNvbnZlbmllbnQuIikgXAogICAgIHYoVW5zaWduZWQs
IGdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzLCA0LCBOb3JtYWwsICJOdW1iZXIgb2Yg
aWRlbnRpZmllcnMgd2Ugc2VlIGluIHRoZSBMTEludCB0aGF0IGNvdWxkIGNhdXNlIHVzIHRvIGJh
aWwgb24gZ2VuZXJhdGluZyBhbiBJQyBmb3IgZ2V0X2J5X3ZhbC4iKSBcCiAKIGVudW0gT3B0aW9u
RXF1aXZhbGVuY2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI1NDM0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MjYsMTAgKzQyNiwxMCBAQCBFeGNlcHRpb24qIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVG
b3JFCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAgICAgY29kZUJs
b2NrLT52YWxpZGF0ZSgpOwogICAgIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQotICAg
ICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQorICAgIGlmIChPcHRpb25zOjpm
b3JjZUJhc2VsaW5lKCkpCiAgICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOworICAgIGVs
c2UKKyAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwogICAgIAogICAgIGluc3RhbGxDb2Rl
KHZtLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVjaWFs
aXphdGlvbktpbmQoKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTQzODYpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0wMS0x
MCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJvdyBhd2F5
IGJhc2VsaW5lIGNvZGUgaWYgdGhlcmUgaXMgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI1MDMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMjAtMDEtMTAgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRh
cmRAYXBwbGUuY29tPgogCiAgICAgICAgIFB5dGhvbjM6IFN1cHBvcnQgU291cmNlL1dlYktpdC9T
Y3JpcHRzL3dlYmtpdApJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lv
biAyNTQzNDcpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5n
IGNvcHkpCkBAIC00OTgsNyArNDk4LDYgQEAgTk9fQ0pJVF9PUFRJT05TID0gWyItLXVzZUNvbmN1
cnJlbnRKSVQ9ZgogQjNPMV9PUFRJT05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNP
MF9PUFRJT05TID0gWyItLW1heERGR05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lz
PTEwMCIsICItLWRlZmF1bHRCM09wdExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRM
SklUPXRydWUiXQotRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TID0gWyItLWZvcmNlT1NSRXhpdFRv
TExJbnQ9dHJ1ZSJdCiAKIHJlcXVpcmVfcmVsYXRpdmUgIndlYmtpdHJ1YnkvanNjLXN0cmVzcy10
ZXN0LXdyaXRlci0jeyR0ZXN0V3JpdGVyfSIKIApAQCAtNjU1LDcgKzY1NCw3IEBAIGVuZAogCiBk
ZWYgcnVuTm9MTEludCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIGlmICRqaXRU
ZXN0cwotICAgICAgICBydW4oIm5vLWxsaW50IiwgIi0tdXNlTExJbnQ9ZmFsc2UiLCAqb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKQorICAgICAgICBydW4oIm5vLWxsaW50IiwgIi0tZm9yY2VC
YXNlbGluZT10cnVlIiwgKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBlbmQKIGVu
ZAogCkBAIC03MDgsNyArNzA3LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcAogZW5kCiAKIGRlZiBydW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpCi0gICAgcnVuKCJmdGwtbm8tY2ppdC1iM28wIiwgIi0tdXNlQXJyYXlBbGxvY2F0
aW9uUHJvZmlsaW5nPWZhbHNlIiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElP
TlMgKyBOT19DSklUX09QVElPTlMgKyBCM08wX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNq
aXQtYjNvMCIsICItLXVzZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZz1mYWxzZSIsICItLWZvcmNl
UG9seVByb3RvPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgQjNPMF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRM
Tm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOCw3ICs3
MjcsNyBAQCBkZWYgcnVuRlRMTm9DSklUT1NSVmFsaWRhdGlvbigqb3B0aW9uYWxUCiBlbmQKIAog
ZGVmIHJ1bkRGR0VhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJk
ZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05T
ICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKKyAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElO
VU9VU0xZX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRl
ZiBydW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
CkBAIC03NDUsNyArNzQ0LDcgQEAgZGVmIHJ1bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlvbmFsVGVz
dFNwZQogZW5kCiAKIGRlZiBydW5GVExFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdCIsICItLXZhbGlkYXRl
R3JhcGg9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgTk9fQ0pJVF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZ
X09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQorICAgIHJ1bigiZnRsLWVhZ2VyLW5vLWNqaXQiLCAiLS12YWxpZGF0ZUdyYXBo
PXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMRWFn
ZXJOb0NKSVRCM08xKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC0xMDYwLDcgKzEw
NTksNyBAQCBkZWYgZGVmYXVsdFJ1bk1vZHVsZXMobm9MTEludDogdHJ1ZSkKICAgICAgICAgcmV0
dXJuCiAgICAgZW5kCiAKLSAgICBydW4oIm5vLWxsaW50LW1vZHVsZXMiLCAiLW0iLCAiLS11c2VM
TEludD1mYWxzZSIpIGlmIG5vTExJbnQKKyAgICBydW4oIm5vLWxsaW50LW1vZHVsZXMiLCAiLW0i
LCAiLS1mb3JjZUJhc2VsaW5lPXRydWUiKSBpZiBub0xMSW50CiAgICAgcnVuKCJuby1jaml0LXZh
bGlkYXRlLXBoYXNlcy1tb2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwg
Ii0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlPXRydWUiLCAqTk9fQ0pJVF9PUFRJT05TKQogICAg
IHJ1bigiZGZnLWVhZ2VyLW1vZHVsZXMiLCAiLW0iLCAqRUFHRVJfT1BUSU9OUykKICAgICBydW4o
ImRmZy1lYWdlci1uby1jaml0LXZhbGlkYXRlLW1vZHVsZXMiLCAiLW0iLCAiLS12YWxpZGF0ZUdy
YXBoPXRydWUiLCAqKE5PX0NKSVRfT1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQpAQCAtMTI2MSw3
ICsxMjYwLDcgQEAgZGVmIHJ1bkxheW91dFRlc3ROb0ZUTAogZW5kCiAKIGRlZiBydW5MYXlvdXRU
ZXN0Tm9MTEludAotICAgIHJ1bkxheW91dFRlc3QoIm5vLWxsaW50IiwgIi0tdXNlTExJbnQ9ZmFs
c2UiKQorICAgIHJ1bkxheW91dFRlc3QoIm5vLWxsaW50IiwgIi0tZm9yY2VCYXNlbGluZT10cnVl
IikKIGVuZAogCiBkZWYgcnVuTGF5b3V0VGVzdE5vQ0pJVApAQCAtMTQyNyw3ICsxNDI2LDcgQEAg
ZGVmIHJ1bk1vemlsbGFUZXN0TExJbnQobW9kZSwgKmV4dHJhRmlsZQogZW5kCiAKIGRlZiBydW5N
b3ppbGxhVGVzdEJhc2VsaW5lSklUKG1vZGUsICpleHRyYUZpbGVzKQotICAgIHJ1bk1vemlsbGFU
ZXN0KCJiYXNlbGluZSIsIG1vZGUsIGV4dHJhRmlsZXMsICItLXVzZUxMSW50PWZhbHNlIiwgIi0t
dXNlREZHSklUPWZhbHNlIikKKyAgICBydW5Nb3ppbGxhVGVzdCgiYmFzZWxpbmUiLCBtb2RlLCBl
eHRyYUZpbGVzLCAiLS1mb3JjZUJhc2VsaW5lPXRydWUiLCAiLS11c2VERkdKSVQ9ZmFsc2UiKQog
ZW5kCiAKIGRlZiBydW5Nb3ppbGxhVGVzdERGR0VhZ2VyTm9DSklUVmFsaWRhdGVQaGFzZXMobW9k
ZSwgKmV4dHJhRmlsZXMpCg==
</data>
<flag name="review"
          id="403335"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387591</attachid>
            <date>2020-01-13 16:39:57 -0800</date>
            <delta_ts>2020-01-21 17:29:35 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>46399</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTQzNDkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDIwLTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRocm93IGF3YXkgYmFzZWxpbmUgY29kZSBpZiB0aGVyZSBpcyBhbiBv
cHRpbWl6ZWQgcmVwbGFjZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMjUwMworCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2ku
CisKKyAgICAgICAgKiBzdHJlc3MvZGZnLWNvbXBhcmUtZXEtdmlhLW5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkLmpzOgorICAgICAgICAqIHN0cmVzcy9nZXR0
ZXItc2V0dGVyLWlubGluaW5nLXNob3VsZC1lbWl0LW1vdmhpbnQuanM6CisgICAgICAgICogc3Ry
ZXNzL21ha2UtZGljdGlvbmFyeS1yZXBhdGNoLmpzOgorICAgICAgICAqIHN0cmVzcy9tZXJnaW5n
LWljLXZhcmlhbnRzLXNob3VsZC1iYWlsLWlmLXN0cnVjdHVyZXMtb3ZlcmxhcC5qczoKKyAgICAg
ICAgKiBzdHJlc3MvcHJveHktZ2V0dGVyLXN0YWNrLW92ZXJmbG93LmpzOgorICAgICAgICAqIHN0
cmVzcy9yZWdyZXNzLTE5MjcxNy5qczoKKyAgICAgICAgKiBzdHJlc3MvcmV0cnktY2FjaGUtbGF0
ZXIuanM6CisKIDIwMjAtMDEtMTAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSBkb2Vzbid0IG1vZGVsIHBvaW50
ZXJzIHRvIGFsbG9jYXRpb25zIGluIGNvbnRyb2wgZmxvdyBwcm9wZXJseQpJbmRleDogSlNUZXN0
cy9zdHJlc3MvZGZnLWNvbXBhcmUtZXEtdmlhLW5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21w
YXJlTnVsbE9yVW5kZWZpbmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2RmZy1j
b21wYXJlLWVxLXZpYS1ub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVm
aW5lZC5qcwkocmV2aXNpb24gMjU0MzQ3KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLWNvbXBhcmUt
ZXEtdmlhLW5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bkRlZmF1bHQoIi0tY29sbGVj
dENvbnRpbnVvdXNseT10cnVlIiwgIi0tY29sbGVjdENvbnRpbnVvdXNseVBlcmlvZE1TPTAuMTUi
LCAiLS11c2VMTEludD1mYWxzZSIsICItLXVzZUZUTEpJVD1mYWxzZSIsICItLWppdFBvbGljeVNj
YWxlPTAiKQorLy9AIHJ1bkRlZmF1bHQoIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgIi0t
Y29sbGVjdENvbnRpbnVvdXNseVBlcmlvZE1TPTAuMTUiLCAiLS1mb3JjZUJhc2VsaW5lPXRydWUi
LCAiLS11c2VGVExKSVQ9ZmFsc2UiLCAiLS1qaXRQb2xpY3lTY2FsZT0wIikKIAogLy8gVGhpcyB0
ZXN0IGV4ZXJjaXNlcyBERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZCgpLgogCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9nZXR0
ZXItc2V0dGVyLWlubGluaW5nLXNob3VsZC1lbWl0LW1vdmhpbnQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9zdHJlc3MvZ2V0dGVyLXNldHRlci1pbmxpbmluZy1zaG91bGQtZW1pdC1tb3ZoaW50
LmpzCShyZXZpc2lvbiAyNTQzNDcpCisrKyBKU1Rlc3RzL3N0cmVzcy9nZXR0ZXItc2V0dGVyLWlu
bGluaW5nLXNob3VsZC1lbWl0LW1vdmhpbnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0
IEBACi0vL0AgcnVuRGVmYXVsdCgiLS11c2VSYW5kb21pemluZ0Z1enplckFnZW50PTEiLCAiLS11
c2VQb2x5bW9ycGhpY0NhbGxJbmxpbmluZ0Zvck5vblN0dWJTdGF0dXM9MSIsICItLXNlZWRPZlJh
bmRvbWl6aW5nRnV6emVyQWdlbnQ9Mjg5NjkyMjUwNSIsICItLXVzZUxMSW50PTAiLCAiLS11c2VD
b25jdXJyZW50SklUPTAiKQorLy9AIHJ1bkRlZmF1bHQoIi0tdXNlUmFuZG9taXppbmdGdXp6ZXJB
Z2VudD0xIiwgIi0tdXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmdGb3JOb25TdHViU3RhdHVzPTEi
LCAiLS1zZWVkT2ZSYW5kb21pemluZ0Z1enplckFnZW50PTI4OTY5MjI1MDUiLCAiLS1mb3JjZUJh
c2VsaW5lPTEiLCAiLS11c2VDb25jdXJyZW50SklUPTAiKQogZnVuY3Rpb24gZm9vKG8pIHsKICAg
ICBvLmYgPSAwOwogICAgIHJldHVybiBvLmY7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9tYWtlLWRp
Y3Rpb25hcnktcmVwYXRjaC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tYWtlLWRp
Y3Rpb25hcnktcmVwYXRjaC5qcwkocmV2aXNpb24gMjU0MzQ3KQorKysgSlNUZXN0cy9zdHJlc3Mv
bWFrZS1kaWN0aW9uYXJ5LXJlcGF0Y2guanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
Ci0vL0AgaWYgJGppdFRlc3RzIHRoZW4gcnVuTm9DSklUKCItLXVzZURGR0pJVD1mYWxzZSIsICIt
LXVzZUxMSW50PWZhbHNlIikgZWxzZSBza2lwIGVuZAorLy9AIGlmICRqaXRUZXN0cyB0aGVuIHJ1
bk5vQ0pJVCgiLS11c2VERkdKSVQ9ZmFsc2UiLCAiLS1mb3JjZUJhc2VsaW5lPXRydWUiKSBlbHNl
IHNraXAgZW5kCiAKIGZ1bmN0aW9uIGZvbyhvKSB7CiAgICAgcmV0dXJuIG8uZjsKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL21lcmdpbmctaWMtdmFyaWFudHMtc2hvdWxkLWJhaWwtaWYtc3RydWN0dXJl
cy1vdmVybGFwLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL21lcmdpbmctaWMtdmFy
aWFudHMtc2hvdWxkLWJhaWwtaWYtc3RydWN0dXJlcy1vdmVybGFwLmpzCShyZXZpc2lvbiAyNTQz
NDcpCisrKyBKU1Rlc3RzL3N0cmVzcy9tZXJnaW5nLWljLXZhcmlhbnRzLXNob3VsZC1iYWlsLWlm
LXN0cnVjdHVyZXMtb3ZlcmxhcC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8v
QCBydW5EZWZhdWx0KCItLXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT0xIiwgIi0tdXNlTExJbnQ9
MCIpCisvL0AgcnVuRGVmYXVsdCgiLS12YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2U9MSIsICItLWZv
cmNlQmFzZWxpbmU9MSIpCiAKIGxldCBpdGVtcyA9IFtdOwogZm9yIChsZXQgaSA9IDA7IGkgPCA4
OyArK2kpIHsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Byb3h5LWdldHRlci1zdGFjay1vdmVyZmxv
dy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wcm94eS1nZXR0ZXItc3RhY2stb3Zl
cmZsb3cuanMJKHJldmlzaW9uIDI1NDM0NykKKysrIEpTVGVzdHMvc3RyZXNzL3Byb3h5LWdldHRl
ci1zdGFjay1vdmVyZmxvdy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vQCBp
ZiAkaml0VGVzdHMgdGhlbiBydW5EZWZhdWx0KCItLXVzZUxMSW50PTAiKSBlbHNlIHNraXAgZW5k
CisvL0AgaWYgJGppdFRlc3RzIHRoZW4gcnVuRGVmYXVsdCgiLS1mb3JjZUJhc2VsaW5lPTEiKSBl
bHNlIHNraXAgZW5kCiAKIGNvbnN0IG8gPSB7fTsKIGNvbnN0IGhhbmRsZXIgPSB7CkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9yZWdyZXNzLTE5MjcxNy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9yZWdyZXNzLTE5MjcxNy5qcwkocmV2aXNpb24gMjU0MzQ3KQorKysgSlNUZXN0cy9zdHJl
c3MvcmVncmVzcy0xOTI3MTcuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvL0Ag
c2tpcCBpZiAkbWVtb3J5TGltaXRlZCBvciAkYnVpbGRUeXBlID09ICJkZWJ1ZyIKLS8vQCBydW5E
ZWZhdWx0KCItLXVzZUxMSW50PWZhbHNlIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2U9dHJ1ZSIsICItLW1heFBlclRocmVhZFN0YWNrVXNhZ2U9MjAwMDAwIiwgIi0tZXhj
ZXB0aW9uU3RhY2tUcmFjZUxpbWl0PTEiLCAiLS1kZWZhdWx0RXJyb3JTdGFja1RyYWNlTGltaXQ9
MSIpCisvL0AgcnVuRGVmYXVsdCgiLS1mb3JjZUJhc2VsaW5lPXRydWUiLCAiLS1mb3JjZUNvZGVC
bG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tbWF4UGVyVGhyZWFkU3RhY2tVc2Fn
ZT0yMDAwMDAiLCAiLS1leGNlcHRpb25TdGFja1RyYWNlTGltaXQ9MSIsICItLWRlZmF1bHRFcnJv
clN0YWNrVHJhY2VMaW1pdD0xIikKIAogbGV0IGZvbyA9ICdsZXQgYSc7CiBmb3IgKGxldCBpID0g
MDsgaSA8IDQwMDAwMDsgaSsrKQpJbmRleDogSlNUZXN0cy9zdHJlc3MvcmV0cnktY2FjaGUtbGF0
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcmV0cnktY2FjaGUtbGF0ZXIuanMJ
KHJldmlzaW9uIDI1NDM0NykKKysrIEpTVGVzdHMvc3RyZXNzL3JldHJ5LWNhY2hlLWxhdGVyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bk5vQ0pJVCgiLS11c2VMTElu
dD1mYWxzZSIsICItLXVzZURGR0pJVD1mYWxzZSIpCisvL0AgcnVuTm9DSklUKCItLWZvcmNlQmFz
ZWxpbmU9dHJ1ZSIsICItLXVzZURGR0pJVD1mYWxzZSIpCiAKIGZ1bmN0aW9uIGZvbyhvKSB7CiAg
ICAgcmV0dXJuIG8uaTc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1
NDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1OSBAQAorMjAyMC0wMS0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBUaHJvdyBhd2F5IGJhc2VsaW5lIGNvZGUgaWYgdGhlcmUgaXMgYW4g
b3B0aW1pemVkIHJlcGxhY2VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtp
LgorCisgICAgICAgIFRoaXMgcGF0Y2gncyBnb2FsIGlzIHRvIGhlbHAgdXMgc2F2ZSBKSVQgZXhl
Y3V0YWJsZSBtZW1vcnkgYnkgdGhyb3dpbmcKKyAgICAgICAgYXdheSBiYXNlbGluZSBjb2RlIHdo
ZW4gaXQgaGFzIGFuIG9wdGltaXplZCByZXBsYWNlbWVudC4gVG8gbWFrZSBpdAorICAgICAgICBl
YXN5IHRvIHJlYXNvbiBhYm91dCwgd2UgZG8gdGhpcyB3aGVuIGZpbmFsaXppbmcgYSBHQywgYW5k
IHdoZW4gdGhlCisgICAgICAgIENvZGVCbG9jayBpcyBub3Qgb24gdGhlIHN0YWNrLiBXaGVuIHdl
IGRvIHRoaXMsIHdlIHRocm93IGF3YXkgYWxsIEpJVAorICAgICAgICBkYXRhIGFuZCB1bmxpbmsg
YWxsIGluY29taW5nIGNhbGxzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHBh
dmVzIHRoZSB3YXkgZm9yIHRoZSBMT0wgdGllciBieSBtYWtpbmcgaXQgc28gd2UgYWx3YXlzCisg
ICAgICAgIGV4aXQgdG8gdGhlIExMSW50LiBUaGlzIGFsbG93cyB0aGUgY29kZSBpbiBDb2RlQmxv
Y2sgZmluYWxpemF0aW9uIHRvIG5vdAorICAgICAgICBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIg
b3Igbm90IGFuIGFuIE9TUiBleGl0IGlzIHdpcmVkIHRvIGJhc2VsaW5lCisgICAgICAgIEpJVCBj
b2RlLCBzaW5jZSBhbGwgZXhpdHMgYXJlIG5vdyB0byB0aGUgTExJbnQuIEJlY2F1c2Ugb2YgdGhp
cywgdGhpcworICAgICAgICBwYXRjaCByZW1vdmVzIHRoZSBmb3JjZU9TUkV4aXRUb0xMSW50IG9w
dGlvbi4gQWxzbywgdGhpcyBwYXRjaCByZW5hbWVzCisgICAgICAgIHRoZSB1c2VMTEludCBvcHRp
b24gdG8gZm9yY2VCYXNlbGluZSBhbmQgaW52ZXJ0cyBpdHMgbWVhbmluZy4KKyAgICAgICAgT3B0
aW9uczo6Zm9yY2VCYXNlbGluZT10cnVlIGltcGxpZXMgdGhhdCBjb2RlIHdpbGwgc3RhcnQgb2Zm
IGV4ZWN1dGluZyBpbgorICAgICAgICB0aGUgYmFzZWxpbmUgSklUIGluc3RlYWQgb2YgdGhlIExM
SW50LiBIb3dldmVyLCBpdCB3b24ndCBwcmV2ZW50IHVzIGZyb20KKyAgICAgICAgZW1pdHRpbmcg
YW4gT1NSIGV4aXQgd2hpY2gganVtcHMgdG8gTExJbnQgY29kZS4KKworICAgICAgICAqIEFQSS90
ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDoKKyAgICAgICAgKHRlc3RFeGVjdXRpb25U
aW1lTGltaXQpOgorICAgICAgICAqIEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0
LmNwcDoKKyAgICAgICAgKHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3cpOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldEpJVERhdGEpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Om9wdGltaXplZFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluZFN0dWJJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxs
TGlua0luZm9Gb3JCeXRlY29kZUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6OkRGRzo6
cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVt
cFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg6Cisg
ICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tT
ZXQ6OmlzQ3VycmVudGx5RXhlY3V0aW5nKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5o
OgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkVuZFBo
YXNlKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpkaXNwYXRjaFRvTmV4dEluc3RydWN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAg
ICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6
OmVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlz
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChK
U0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKwogMjAyMC0w
MS0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlIGRvZXNuJ3QgbW9kZWwgcG9pbnRlcnMgdG8gYWxsb2NhdGlv
bnMgaW4gY29udHJvbCBmbG93IHByb3Blcmx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAJKHJl
dmlzaW9uIDI1NDM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0
aW9uVGltZUxpbWl0VGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSwxMSArMTE5LDExIEBA
IHN0YXRpYyB2b2lkIHRlc3RSZXNldEFmdGVyVGltZW91dChib29sJiAKIGludCB0ZXN0RXhlY3V0
aW9uVGltZUxpbWl0KCkKIHsKICAgICBzdGF0aWMgY29uc3QgVGllck9wdGlvbnMgdGllck9wdGlv
bnNMaXN0W10gPSB7Ci0gICAgICAgIHsgIkxMSU5UIiwgICAgMF9tcywgICAiLS11c2VDb25jdXJy
ZW50SklUPWZhbHNlIC0tdXNlTExJbnQ9dHJ1ZSAtLXVzZUpJVD1mYWxzZSIgfSwKLSAgICAgICAg
eyAiQmFzZWxpbmUiLCAwX21zLCAgICItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UgLS11c2VMTElu
dD10cnVlIC0tdXNlSklUPXRydWUgLS11c2VERkdKSVQ9ZmFsc2UiIH0sCi0gICAgICAgIHsgIkRG
RyIsICAgICAgMjAwX21zLCAgICItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UgLS11c2VMTEludD10
cnVlIC0tdXNlSklUPXRydWUgLS11c2VERkdKSVQ9dHJ1ZSAtLXVzZUZUTEpJVD1mYWxzZSIgfSwK
KyAgICAgICAgeyAiTExJTlQiLCAgICAwX21zLCAgICItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2Ug
LS11c2VKSVQ9ZmFsc2UiIH0sCisgICAgICAgIHsgIkJhc2VsaW5lIiwgMF9tcywgICAiLS11c2VD
b25jdXJyZW50SklUPWZhbHNlIC0tdXNlSklUPXRydWUgLS11c2VERkdKSVQ9ZmFsc2UiIH0sCisg
ICAgICAgIHsgIkRGRyIsICAgICAgMjAwX21zLCAgICItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2Ug
LS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJVD10cnVlIC0tdXNlRlRMSklUPWZhbHNlIiB9LAogI2lm
IEVOQUJMRShGVExfSklUKQotICAgICAgICB7ICJGVEwiLCAgICAgIDUwMF9tcywgIi0tdXNlQ29u
Y3VycmVudEpJVD1mYWxzZSAtLXVzZUxMSW50PXRydWUgLS11c2VKSVQ9dHJ1ZSAtLXVzZURGR0pJ
VD10cnVlIC0tdXNlRlRMSklUPXRydWUiIH0sCisgICAgICAgIHsgIkZUTCIsICAgICAgNTAwX21z
LCAiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIC0tdXNlSklUPXRydWUgLS11c2VERkdKSVQ9dHJ1
ZSAtLXVzZUZUTEpJVD10cnVlIiB9LAogI2VuZGlmCiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9QaW5nUG9uZ1N0
YWNrT3ZlcmZsb3dUZXN0LmNwcAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIGludCB0ZXN0UGluZ1BvbmdTdGFja092ZXJmbG93KCkK
IAogICAgIGF1dG8gb3JpZ1NvZnRSZXNlcnZlZFpvbmVTaXplID0gT3B0aW9uczo6c29mdFJlc2Vy
dmVkWm9uZVNpemUoKTsKICAgICBhdXRvIG9yaWdSZXNlcnZlZFpvbmVTaXplID0gT3B0aW9uczo6
cmVzZXJ2ZWRab25lU2l6ZSgpOwotICAgIGF1dG8gb3JpZ1VzZUxMSW50ID0gT3B0aW9uczo6dXNl
TExJbnQoKTsKKyAgICBhdXRvIG9yaWdGb3JjZUJhc2VsaW5lID0gT3B0aW9uczo6Zm9yY2VCYXNl
bGluZSgpOwogICAgIGF1dG8gb3JpZ01heFBlclRocmVhZFN0YWNrVXNhZ2UgPSBPcHRpb25zOjpt
YXhQZXJUaHJlYWRTdGFja1VzYWdlKCk7CiAKICAgICBPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25l
U2l6ZSgpID0gMTI4ICogS0I7CkBAIC0xMzEsNyArMTMxLDcgQEAgaW50IHRlc3RQaW5nUG9uZ1N0
YWNrT3ZlcmZsb3coKQogICAgIC8vIE5vcm1hbGx5LCB3ZSB3YW50IHRvIGRpc2FibGUgdGhlIExM
SU5UIHRvIGZvcmNlIHRoZSB1c2Ugb2YgSklUdGVkIGNvZGUgd2hpY2ggaXMgbmVjZXNzYXJ5IGZv
cgogICAgIC8vIHJlcHJvZHVjaW5nIHRoZSByZWdyZXNzaW9uIGluIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg3NDkuIEhvd2V2ZXIsIHdlIG9ubHkKICAgICAvLyB3
YW50IHRvIGRvIHRoaXMgaWYgdGhlIExMSU5UIGlzbid0IHRoZSBvbmx5IGF2YWlsYWJsZSBleGVj
dXRpb24gZW5naW5lLgotICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSBmYWxzZTsKKyAgICBPcHRp
b25zOjpmb3JjZUJhc2VsaW5lKCkgPSB0cnVlOwogI2VuZGlmCiAKICAgICBjb25zdCBjaGFyKiBz
Y3JpcHRTdHJpbmcgPQpAQCAtMTc4LDcgKzE3OCw3IEBAIGludCB0ZXN0UGluZ1BvbmdTdGFja092
ZXJmbG93KCkKIAogICAgIE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkgPSBvcmlnU29m
dFJlc2VydmVkWm9uZVNpemU7CiAgICAgT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpID0gb3Jp
Z1Jlc2VydmVkWm9uZVNpemU7Ci0gICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IG9yaWdVc2VMTElu
dDsKKyAgICBPcHRpb25zOjpmb3JjZUJhc2VsaW5lKCkgPSBvcmlnRm9yY2VCYXNlbGluZTsKICAg
ICBPcHRpb25zOjptYXhQZXJUaHJlYWRTdGFja1VzYWdlKCkgPSBvcmlnTWF4UGVyVGhyZWFkU3Rh
Y2tVc2FnZTsKIAogICAgIHJldHVybiBmYWlsZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0MiwxNCArNDQyLDggQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
UwogICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFu
ZGxlciA9IHVubGlua2VkQ29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwogICAgICAgICAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVyc1tpXTsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rp
b24gPSBpbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KTsKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+IGNvZGVQdHI7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5pc1dpZGUzMigpKQotICAgICAgICAgICAg
ICAgICAgICBjb2RlUHRyID0gTExJbnQ6OmdldFdpZGUzMkNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+
KG9wX2NhdGNoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+aXNXaWRl
MTYoKSkKLSAgICAgICAgICAgICAgICAgICAgY29kZVB0ciA9IExMSW50OjpnZXRXaWRlMTZDb2Rl
UHRyPEJ5dGVjb2RlUHRyVGFnPihvcF9jYXRjaCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBjb2RlUHRyID0gTExJbnQ6OmdldENvZGVQdHI8Qnl0ZWNvZGVQdHJU
YWc+KG9wX2NhdGNoKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0
cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+IGNvZGVQdHIgPSBMTElu
dDo6Z2V0Q29kZVB0cjxCeXRlY29kZVB0clRhZz4oaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgICAg
ICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVs
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGNvZGVQdHIucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4oKSkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUo
dW5saW5rZWRIYW5kbGVyKTsKQEAgLTEzOTAsNiArMTM4NCwzNiBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKIAogICAgIHVw
ZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIC8vIElmIEJhc2Vs
aW5lSklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVu
dCBleGlzdHMsIHdlIGF0dGVtcHQKKyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2Rl
IGFuZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisgICAgaWYgKCFP
cHRpb25zOjpmb3JjZUJhc2VsaW5lKCkgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRo
aXMpKSB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGlt
aXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2Nr
LT5tX29zckV4aXRDb3VudGVyKSB7CisgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuayk7CisKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5r
ZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3Vu
bGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgICAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5h
dCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPiBjb2RlUHRyID0gTExJbnQ6OmdldENv
ZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+KGluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4oY29kZVB0ci5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPigpKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdW5saW5rSW5j
b21pbmdDYWxscygpOworCisgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRo
ZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBp
bGVyIHRocmVhZHMKKyAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcg
dGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBh
bmQgYnl0ZWNvZGUKKyAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBz
dHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3MuCisgICAgICAgICAgICAg
ICAgcmVzZXRKSVREYXRhKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNl
bmRpZgogICAgIAogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgp
KSkKICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwpAQCAtMTUxNywxOCArMTU0
MSw2IEBAIEpJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKFVuYXJ5QXIKICAgICByZXR1
cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwogfQog
Ci1TdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICBmb3IgKFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7Ci0gICAg
ICAgICAgICBpZiAoc3R1YkluZm8tPmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3R1YkluZm87Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KIEJ5VmFsSW5mbyogQ29kZUJsb2NrOjphZGRCeVZhbEluZm8oKQogewogICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTE1NDEsMTggKzE1NTMsNiBA
QCBDYWxsTGlua0luZm8qIENvZGVCbG9jazo6YWRkQ2FsbExpbmtJbmZvCiAgICAgcmV0dXJuIGVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX2NhbGxMaW5rSW5mb3MuYWRkKCk7CiB9CiAKLUNhbGxMaW5r
SW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2Rl
SW5kZXggaW5kZXgpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgIGZvciAo
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpIHsK
LSAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmNvZGVPcmlnaW4oKSA9PSBDb2RlT3JpZ2lu
KGluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FsbExpbmtJbmZvOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCiBSYXJlQ2FzZVByb2ZpbGUqIENvZGVC
bG9jazo6YWRkUmFyZUNhc2VQcm9maWxlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsK
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CkBAIC0xNjAwLDEzICsxNjAw
LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQogICAgICAgICAvLyBXZSBjYW4g
Y2xlYXIgdGhlc2UgYmVjYXVzZSBubyBvdGhlciB0aHJlYWQgd2lsbCBoYXZlIHJlZmVyZW5jZXMg
dG8gYW55IHN0dWIgaW5mb3MsIGNhbGwKICAgICAgICAgLy8gbGluayBpbmZvcywgb3IgYnkgdmFs
IGluZm9zIGlmIHdlIGRvbid0IGhhdmUgSklUIGNvZGUuIEF0dGVtcHRzIHRvIHF1ZXJ5IHRoZXNl
IGRhdGEKICAgICAgICAgLy8gc3RydWN0dXJlcyB1c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdl
dElDU3RhdHVzTWFwIGFuZCBmcmllbmRzKSB3aWxsIHJldHVybiBub3RoaW5nIGlmIHdlCi0gICAg
ICAgIC8vIGRvbid0IGhhdmUgSklUIGNvZGUuCi0gICAgICAgIGppdERhdGEtPm1fc3R1YkluZm9z
LmNsZWFyKCk7Ci0gICAgICAgIGppdERhdGEtPm1fY2FsbExpbmtJbmZvcy5jbGVhcigpOwotICAg
ICAgICBqaXREYXRhLT5tX2J5VmFsSW5mb3MuY2xlYXIoKTsKKyAgICAgICAgLy8gZG9uJ3QgaGF2
ZSBKSVQgY29kZS4gU28gaXQncyBzYWZlIHRvIGNhbGwgdGhpcyBpZiB3ZSBmYWlsIGEgYmFzZWxp
bmUgSklUIGNvbXBpbGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGFsc28gY2FsbCB0aGlz
IGZyb20gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgd2hlbiB3ZSBkZWdyYWRlIGZyb20gYmFzZWxp
bmUgSklUIHRvIExMSW50CisgICAgICAgIC8vIGNvZGUuIFRoaXMgaXMgc2FmZSB0byBkbyBzaW5j
ZSBhbGwgY29tcGlsZXIgdGhyZWFkcyBhcmUgc2FmZXBvaW50ZWQgaW4gZmluYWxpemVVbmNvbmRp
dGlvbmFsbHksCisgICAgICAgIC8vIHdoaWNoIG1lYW5zIHdlJ3ZlIG1hZGUgaXQgcGFzdCBieXRl
Y29kZSBwYXJzaW5nLiBPbmx5IHRoZSBieXRlY29kZSBwYXJzZXIgd2lsbCBob2xkIG9udG8KKyAg
ICAgICAgLy8gcmVmZXJlbmNlcyB0byB0aGVzZSB2YXJpb3VzICppbmZvcyB2aWEgaXRzIHVzZSBv
ZiBJQ1N0YXR1c01hcC4KKworICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CisgICAgICAgICAgICBzdHViSW5mby0+YWJvdXRU
b0RpZSgpOworICAgICAgICAgICAgc3R1YkluZm8tPmRlcmVmKCk7CisgICAgICAgIH0KKwogICAg
ICAgICAvLyBXZSBjYW4gY2xlYXIgdGhpcyBiZWNhdXNlIHRoZSBERkcncyBxdWVyaWVzIHRvIHRo
ZXNlIGRhdGEgc3RydWN0dXJlcyBhcmUgZ3VhcmRlZCBieSB3aGV0aGVyCiAgICAgICAgIC8vIHRo
ZXJlIGlzIEpJVCBjb2RlLgotICAgICAgICBqaXREYXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuY2xl
YXIoKTsKKworICAgICAgICBtX2ppdERhdGEgPSBudWxscHRyOwogICAgIH0KIH0KICNlbmRpZgpA
QCAtMTczMywxMCArMTc0MiwyNCBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVWZXJz
aW9uKCkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1ib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoSklUVHlwZSB0eXBlVG9SZXBsYWNlKQorQ29kZUJsb2NrKiBDb2RlQmxvY2s6
Om9wdGltaXplZFJlcGxhY2VtZW50KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSkKIHsKICAgICBDb2Rl
QmxvY2sqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gcmVw
bGFjZW1lbnQgJiYgSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50LT5qaXRUeXBlKCks
IHR5cGVUb1JlcGxhY2UpOworICAgIGlmICghcmVwbGFjZW1lbnQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQtPmppdFR5
cGUoKSwgdHlwZVRvUmVwbGFjZSkpCisgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om9wdGltaXplZFJlcGxh
Y2VtZW50KCkKK3sKKyAgICByZXR1cm4gb3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgpKTsK
K30KKworYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVFR5cGUgdHlw
ZVRvUmVwbGFjZSkKK3sKKyAgICByZXR1cm4gISFvcHRpbWl6ZWRSZXBsYWNlbWVudCh0eXBlVG9S
ZXBsYWNlKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KCkK
QEAgLTI3OTgsNyArMjgyMSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygp
CiB2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7CiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBBU1NFUlQoYWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQo
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAg
CiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI1NDM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1OCwxMSBAQCBwdWJsaWM6CiAKICAgICBPcHRpb25h
bDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJ
bmRleCk7CiAKKyAgICAvLyBCZWNhdXNlIHdlIG1pZ2h0IHRocm93IG91dCBiYXNlbGluZSBKSVQg
Y29kZSBhbmQgYWxsIGl0cyBiYXNlbGluZSBKSVQgZGF0YSAobV9qaXREYXRhKSwKKyAgICAvLyB5
b3UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHRoZSBsaWZldGltZSBvZiB3aGVuIHlvdSB1c2Ug
dGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uLgorICAgIC8vIFRoZSByZXR1cm4gdmFs
dWUgbWF5IGhhdmUgcmF3IHBvaW50ZXJzIGludG8gdGhpcyBkYXRhIHN0cnVjdHVyZSB0aGF0IGdl
dHMgdGhyb3duIGF3YXkuCisgICAgLy8gU3BlY2lmaWNhbGx5LCB5b3UgbmVlZCB0byBlbnN1cmUg
dGhhdCBubyBHQyBjYW4gYmUgZmluYWxpemVkICh0eXBpY2FsbHkgdGhhdCBtZWFucyBubworICAg
IC8vIGFsbG9jYXRpb25zKSBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBhbmQgdGhlIGxhc3QgdXNlIG9m
IGl0LgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
SUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01h
cCYgcmVzdWx0KTsKICAgICAKQEAgLTI3Nyw2ICsyODIsMTAgQEAgcHVibGljOgogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8UmFyZUNhc2VQcm9maWxlLCA4PiBtX3JhcmVDYXNlUHJvZmlsZXM7CiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdp
bk1hcDsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBtX2Nh
bGxlZVNhdmVSZWdpc3RlcnM7CisgICAgICAgIC8vIEZJWE1FOiBOb3cgdGhhdCB3ZSB1bmNvbmRp
dGlvbmFsbHkgT1NSIGV4aXQgdG8gdGhlIExMSW50LCB3ZSBtaWdodCBiZSBhYmxlIHRvIHBydW5l
CisgICAgICAgIC8vIHRoZSBudW1iZXIgb2YgZW50cmllcyB3ZSBoYXZlIGluIHRoaXMgdG8gY29u
dGFpbiBlbnRyaWVzIG9ubHkgZm9yIG9wY29kZXMgd2UgdXNlCisgICAgICAgIC8vIGl0IGZvci4g
VG9kYXksIHRoYXQncyBvbmx5IGZvciBsb29wIE9TUiBlbnRyeS4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjIwNwogICAgICAgICBKSVRDb2Rl
TWFwIG1faml0Q29kZU1hcDsKICAgICB9OwogCkBAIC0zMDcsMTggKzMxNiw5IEBAIHB1YmxpYzoK
IAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKIAotICAg
IC8vIE8obikgb3BlcmF0aW9uLiBVc2UgZ2V0U3R1YkluZm9NYXAoKSB1bmxlc3MgeW91IHJlYWxs
eSBvbmx5IGludGVuZCB0byBnZXQgb25lCi0gICAgLy8gc3R1YiBpbmZvLgotICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBmaW5kU3R1YkluZm8oQ29kZU9yaWdpbik7Ci0KICAgICBCeVZhbEluZm8qIGFk
ZEJ5VmFsSW5mbygpOwogCiAgICAgQ2FsbExpbmtJbmZvKiBhZGRDYWxsTGlua0luZm8oKTsKLQot
ICAgIC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0aW9uIGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNv
bXBpbGluZyBPU1IgZXhpdHMgaW4gdGhlIGNhc2UKLSAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVu
IGlubGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJl
YWxseQotICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRo
ZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KLSAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5m
b0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgdm9pZCBzZXRKSVRD
b2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQogICAgIHsKQEAgLTQxMiw3ICs0MTIsNiBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFJlZjxKSVRDb2RlPiYmIGNvZGUp
CiAgICAgewotICAgICAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOwogICAgICAgICBp
ZiAoIWNvZGUtPmlzU2hhcmVkKCkpCiAgICAgICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKGNvZGUtPnNpemUoKSk7CiAKQEAgLTQ0NCw2ICs0NDMsOCBAQCBwdWJsaWM6
CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKCk7CiAgICAgREZHOjpD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsU3RhdGUoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxERkc6OkNhcGFiaWxpdHlMZXZlbD4obV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSk7IH0KIAorICAg
IENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQoSklUVHlwZSB0eXBlVG9SZXBsYWNlKTsK
KyAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBs
YWNlIGlzIG15IEpJVFR5cGUKICAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVFR5
cGUgdHlwZVRvUmVwbGFjZSk7CiAgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAv
LyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDI1NDM0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEs
NyArODEsNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgCiAg
ICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoIXByb2Zp
bGVkREZHQ29kZUJsb2NrIHx8IHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6REZHSklUKTsKICAgICAKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDIsODUgKzE0Miw1MyBAQCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhl
bHBlCiAgICAgZG9uZUFkanVzdGluZy5saW5rKCZqaXQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciwgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZCwgYm9vbCYgY2FsbGVySXNMTEludCkK
K3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJu
UEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0ZWNvZGVJbmRleCBj
YWxsQnl0ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2lu
ZCkKIHsKLSAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgp
IHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuazsKLQogICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
CiAgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUpOwogCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1bXBUYXJnZXQ7CiAKLSAgICBpZiAoY2Fs
bGVySXNMTEludCkgewotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY2FsbEluc3RydWN0aW9u
ID0gKmJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsQnl0
ZWNvZGVJbmRleCkucHRyKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGNhbGxJbnN0cnVjdGlv
biA9ICpiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEJ5
dGVjb2RlSW5kZXgpLnB0cigpOwogI2RlZmluZSBMTElOVF9SRVRVUk5fTE9DQVRJT04obmFtZSkg
KGNhbGxJbnN0cnVjdGlvbi5pc1dpZGUxNigpID8gTExJbnQ6OmdldFdpZGUxNkNvZGVQdHI8SlNF
bnRyeVB0clRhZz4obmFtZSMjX3JldHVybl9sb2NhdGlvbikgOiAoY2FsbEluc3RydWN0aW9uLmlz
V2lkZTMyKCkgPyBMTEludDo6Z2V0V2lkZTMyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihuYW1lIyNf
cmV0dXJuX2xvY2F0aW9uKSA6IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KG5hbWUj
I19yZXR1cm5fbG9jYXRpb24pKSkKIAotICAgICAgICBzd2l0Y2ggKHRydWVDYWxsZXJDYWxsS2lu
ZCkgewotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKLSAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKLSAgICAgICAg
ICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFy
Z3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2Nh
bGxfdmFyYXJnc19zbG93KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElubGlu
ZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdyk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsK
LSAgICAgICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlf
aWQpCi0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihv
cF9nZXRfYnlfaWQpOwotICAgICAgICAgICAgZWxzZSBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29k
ZUlEKCkgPT0gb3BfZ2V0X2J5X3ZhbCkKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJ
TlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV92YWwpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2Fs
bDogewotICAgICAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX3B1
dF9ieV9pZCkKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX3B1dF9ieV9pZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjYWxsSW5zdHJ1Y3Rpb24u
b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKQotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQg
PSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfcHV0X2J5X3ZhbCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6CisgICAgc3dpdGNoICh0cnVl
Q2FsbGVyQ2FsbEtpbmQpIHsKKyAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKKyAgICAg
ICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKKyAgICAgICAganVt
cFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CisgICAgICAgIGp1
bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Nsb3cpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJn
czoKKyAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OkdldHRlckNhbGw6IHsKKyAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgp
ID09IG9wX2dldF9ieV9pZCkKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5f
TE9DQVRJT04ob3BfZ2V0X2J5X2lkKTsKKyAgICAgICAgZWxzZSBpZiAoY2FsbEluc3RydWN0aW9u
Lm9wY29kZUlEKCkgPT0gb3BfZ2V0X2J5X3ZhbCkKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X3ZhbCk7CisgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotI3VuZGVm
IExMSU5UX1JFVFVSTl9MT0NBVElPTgotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoICh0
cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGw6
Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2Ug
SW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OkNvbnN0cnVjdFZhcmFyZ3M6IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0KLSAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0
Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwotCi0gICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5
UHRyVGFnPigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHVi
SW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mbyk7Ci0KLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+
ZG9uZUxvY2F0aW9uLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDogeworICAgICAgICBpZiAoY2Fs
bEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X2lkKQorICAgICAgICAgICAganVt
cFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpOworICAgICAgICBl
bHNlIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKQorICAg
ICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfdmFs
KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKKyN1bmRlZiBMTElOVF9S
RVRVUk5fTE9DQVRJT04KKwogICAgIHJldHVybiBqdW1wVGFyZ2V0OwogfQogCkBAIC0yNTQsOCAr
MjIyLDYgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAg
ICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lw
cGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxlckNhbGxLaW5kKTsKICAgICAgICAgR1BSUmVnIGNhbGxl
ckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CiAKLSAgICAgICAgYm9vbCBj
YWxsZXJJc0xMSW50ID0gZmFsc2U7Ci0KICAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7CiAgICAgICAgICAgICBq
aXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKQEAg
LTI3MSw3ICsyMzcsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAg
ICAgICAgICAgIGF1dG8gY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5ieXRlY29kZUlu
ZGV4KCk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
anVtcFRhcmdldCA9IGNhbGxlclJldHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBj
YWxsQnl0ZWNvZGVJbmRleCwgdHJ1ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0
ID0gY2FsbGVyUmV0dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29k
ZUluZGV4LCB0cnVlQ2FsbGVyQ2FsbEtpbmQpOwogCiAgICAgICAgICAgICBpZiAodHJ1ZUNhbGxl
ci0+aW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKApAQCAt
MzAyLDcgKzI2OCw4IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMK
ICAgICAgICAgICAgIHRydWVDYWxsZXIgPyBBc3NlbWJseUhlbHBlcnM6OlVzZUV4aXN0aW5nVGFn
UmVnaXN0ZXJDb250ZW50cyA6IEFzc2VtYmx5SGVscGVyczo6Q29weUJhc2VsaW5lQ2FsbGVlU2F2
ZWRSZWdpc3RlcnNGcm9tQmFzZUZyYW1lLAogICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwog
Ci0gICAgICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CisgICAgICAgIGlmICh0cnVlQ2FsbGVyKSB7
CisgICAgICAgICAgICAvLyBTZXQgdXAgTExJbnQgcmVnaXN0ZXJzIGZvciBvdXIgY2FsbGVyIGlu
IG91ciBjYWxsZWUgc2F2ZXMuCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlu
bGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFk
YXRhVGFibGVHUFIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzg4LDQ0ICszNTUsMjYgQEAg
dm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIEFTU0VSVChjb2Rl
QmxvY2tGb3JFeGl0ID09IGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5lVmVyc2lvbigpKTsKICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlw
ZSgpKSk7CiAKLSAgICB2b2lkKiBqdW1wVGFyZ2V0OwotICAgIGJvb2wgZXhpdFRvTExJbnQgPSBP
cHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7Ci0gICAgaWYgKGV4aXRUb0xMSW50KSB7
Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9
ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIo
KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0
aW9uOwotICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCi0gICAgICAgICAg
ICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9p
bnRfb3NyX2V4aXRfdHJhbXBvbGluZSk7Ci0gICAgICAgIGVsc2UgCi0gICAgICAgICAgICBkZXN0
aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci0KLSAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3Ry
dWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUklu
Zm86OnJlZ1QyLCAmdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93KTsKLSAgICAgICAgfQor
ICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KTsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9j
a0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKKyAgICBpZiAo
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6
OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5l
KTsKKyAgICBlbHNlIAorICAgICAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUo
KSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOworICAgIGlmIChleGl0Lmlz
RXhjZXB0aW9uSGFuZGxlcigpKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAg
ICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDIsICZ2bS50YXJnZXRJbnRlcnByZXRlclBDRm9y
VGhyb3cpOworICAgIH0KKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpt
ZXRhZGF0YVRhYmxlR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOwotICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTElu
dDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsK
ICNlbHNlCi0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3Vy
cmVudEluc3RydWN0aW9uKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpOwogI2VuZGlmCi0gICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5h
dGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKLSAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50
KCkpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0
KGV4aXRJbmRleCkgPT0gZXhpdEluZGV4KTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gY29k
ZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdEluZGV4KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEFTU0VSVChkZXN0aW5hdGlvbik7Ci0KLSAgICAgICAganVtcFRhcmdldCA9IGRl
c3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
LSAgICB9CiAKICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJ
VDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewpA
QCAtNDMzLDcgKzM4Miw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0Nh
bGwKICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2bS5h
ZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpKTsKICAgICB9CiAgICAgCi0gICAgaml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0
aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRh
Zyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaAkocmV2aXNpb24gMjU0MzQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiB2b2lkIGhh
bmRsZUV4aXRDb3VudHMoVk0mLCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwog
dm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRC
YXNlJik7CiB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYsIENDYWxsSGVscGVycyYsIGNv
bnN0IE9TUkV4aXRCYXNlJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
Y2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0
ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGNhbGxl
cktpbmQsIGJvb2wmIGNhbGxlcklzTExJbnQpOwogQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxl
ZVNhdmVTbG90KElubGluZUNhbGxGcmFtZSosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ss
IEdQUlJlZyBjYWxsZWVTYXZlKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEpJVENvZGVUeXBlPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShyZXZp
c2lvbiAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMSBAQCB2b2lkIENvZGVCbG9ja1NldDo6
Y2xlYXJDdXJyZW50bHlFeGVjdXRpCiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuY2xlYXIoKTsK
IH0KIAorYm9vbCBDb2RlQmxvY2tTZXQ6OmlzQ3VycmVudGx5RXhlY3V0aW5nKENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIHJldHVybiBtX2N1cnJlbnRseUV4ZWN1dGluZy5jb250YWlucyhj
b2RlQmxvY2spOworfQorCiB2b2lkIENvZGVCbG9ja1NldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NiArNTYsMTAgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnMoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCB2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spOwogICAgIExvY2smIGdldExvY2soKSB7IHJl
dHVybiBtX2xvY2s7IH0KIAorICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gcnVuIG9ubHkgd2hl
biB3ZSdyZSBub3QgYWRkaW5nIHRvIHRoZSBzZXQgZm9yIG5vdy4gSWYKKyAgICAvLyB0aGlzIG5l
ZWRzIHRvIHJ1biBjb25jdXJyZW50bHkgaW4gdGhlIGZ1dHVyZSwgd2UnbGwgbmVlZCB0byBsb2Nr
IGFyb3VuZCB0aGlzLgorICAgIGJvb2wgaXNDdXJyZW50bHlFeGVjdXRpbmcoQ29kZUJsb2NrKik7
CisKICAgICAvLyBWaXNpdHMgZWFjaCBDb2RlQmxvY2sgaW4gdGhlIGhlYXAgdW50aWwgdGhlIHZp
c2l0b3IgZnVuY3Rpb24gcmV0dXJucyB0cnVlCiAgICAgLy8gdG8gaW5kaWNhdGUgdGhhdCBpdCBp
cyBkb25lIGl0ZXJhdGluZywgb3IgdW50aWwgZXZlcnkgQ29kZUJsb2NrIGhhcyBiZWVuCiAgICAg
Ly8gdmlzaXRlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEzLDExICs2MTMsMTEgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxGaW5hbGl6ZQogICAgIHZtKCkuYnVpbHRpbkV4ZWN1dGFibGVzKCktPmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVy
czxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtKCkuZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uuc3BhY2Up
OwogICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3ltYm9sVGFibGU+
KHZtKCkuc3ltYm9sVGFibGVTcGFjZSk7CisgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPih2bSgpLmV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMpOyAvLyBXZSBydW4gdGhpcyBiZWZvcmUgQ29kZUJs
b2NrJ3MgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXIgc2luY2UgQ29kZUJsb2NrIGxvb2tzIGF0IHRo
ZSBvd25lciBleGVjdXRhYmxlJ3MgaW5zdGFsbGVkIENvZGVCbG9jayBpbiBpdHMgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkuCiAgICAgdm0oKS5mb3JFYWNoQ29kZUJsb2NrU3BhY2UoCiAgICAgICAg
IFsmXSAoYXV0byYgc3BhY2UpIHsKICAgICAgICAgICAgIHRoaXMtPmZpbmFsaXplTWFya2VkVW5j
b25kaXRpb25hbEZpbmFsaXplcnM8Q29kZUJsb2NrPihzcGFjZS5zZXQpOwogICAgICAgICB9KTsK
LSAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U+KHZtKCkuZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVy
cyk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTdHJ1Y3R1cmVS
YXJlRGF0YT4odm0oKS5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlKTsKICAgICBmaW5hbGl6ZU1hcmtl
ZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bSgp
LnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uuc2V0KTsKICAgICBpZiAodm0oKS5tX3dl
YWtTZXRTcGFjZSkKQEAgLTE1MjAsNyArMTUyMCw3IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6
OnJ1bkVuZFBoYXNlKEdDQ28KICAgICBwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKCk7
CiAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICBzbmFwc2hvdFVuc3dlcHQoKTsKLSAgICBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOyAvLyBXZSByZWx5IG9uIHRoZXNlIHVuY29uZGl0aW9uYWwgZmluYWxp
emVycyBydW5uaW5nIGJlZm9yZSBjbGVhckN1cnJlbnRseUV4ZWN1dGluZyBzaW5jZSBDb2RlQmxv
Y2sncyBmaW5hbGl6ZXIgcmVsaWVzIG9uIHF1ZXJ5aW5nIGN1cnJlbnRseSBleGVjdXRpbmcuCiAg
ICAgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgbm90aWZ5SW5jcmVt
ZW50YWxTd2VlcGVyKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI1NDM0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
OTMsMTkgKzE5OTMsOSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYg
CiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRpc3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24oQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+dm0oKS5leGNlcHRpb25Gb3JJbnNwZWN0aW9uKCkpOwot
ICAgIGlmIChPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0cigpOwotICAgICAgICBhdXRvIG5leHRCeXRl
Y29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0KCkucHRyKCkp
OwotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRQQywgbmV4dEJ5dGVjb2RlLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwotICAgIH0KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgQVNTRVJUKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBCeXRlY29k
ZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmluZGV4KCk7Ci0gICAgYXV0byBu
ZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKG5leHRCeXRlY29kZUlu
ZGV4KTsKLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG5leHRCeXRlY29kZS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKLSNlbmRpZgotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG5leHRQQyA9IHBjLm5leHQoKS5wdHIoKTsKKyAg
ICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpw
Yy5uZXh0KCkucHRyKCkpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBuZXh0Qnl0
ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSByZXN1bHQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjU0MzQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25z
KCkKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwog
I2VuZGlmCiAjaWYgIUVOQUJMRShKSVQpCi0gICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IHRydWU7
CisgICAgT3B0aW9uczo6Zm9yY2VCYXNlbGluZSgpID0gZmFsc2U7CiAgICAgT3B0aW9uczo6dXNl
SklUKCkgPSBmYWxzZTsKICAgICBPcHRpb25zOjp1c2VCYXNlbGluZUpJVCgpID0gZmFsc2U7CiAg
ICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSBmYWxzZTsKQEAgLTQxOSw3ICs0MTksNyBAQCBzdGF0
aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICB9CiAKICAgICBpZiAoIWpp
dEVuYWJsZWRCeURlZmF1bHQoKSAmJiAhT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgIE9wdGlv
bnM6OnVzZUxMSW50KCkgPSB0cnVlOworICAgICAgICBPcHRpb25zOjpmb3JjZUJhc2VsaW5lKCkg
PSBmYWxzZTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSkKICAgICAgICAg
T3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCkgPSBmYWxzZTsKQEAgLTU0Niw4ICs1
NDYsNiBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdCh1c2VLZXJuVENTTUlEKSA9PSAg
Jk9wdGlvbnM6OnVzZUtlcm5UQ1NNRGVmYXVsdCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihnY01heEhlYXBTaXplSUQpID09ICAmT3B0aW9u
czo6Z2NNYXhIZWFwU2l6ZSgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6
OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQoZ2NNYXhIZWFwU2l6ZUlEKSA9PSAgJk9wdGlvbnM6Omdj
TWF4SGVhcFNpemVEZWZhdWx0KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9u
czo6YWRkcmVzc09mT3B0aW9uKGZvcmNlT1NSRXhpdFRvTExJbnRJRCkgPT0gICZPcHRpb25zOjpm
b3JjZU9TUkV4aXRUb0xMSW50KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9u
czo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChmb3JjZU9TUkV4aXRUb0xMSW50SUQpID09ICAmT3B0
aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludERlZmF1bHQoKSk7CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgICAgICBDb25maWc6OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKCk7CkBAIC05NDUsOSAr
OTQzLDkgQEAgdm9pZCBPcHRpb25zOjpkdW1wT3B0aW9uKFN0cmluZ0J1aWxkZXImIAogdm9pZCBP
cHRpb25zOjplbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKQogewogICAgIGJvb2wgY29oZXJlbnQg
PSB0cnVlOwotICAgIGlmICghKHVzZUxMSW50KCkgfHwgdXNlSklUKCkpKSB7CisgICAgaWYgKGZv
cmNlQmFzZWxpbmUoKSAmJiAhdXNlSklUKCkpIHsKICAgICAgICAgY29oZXJlbnQgPSBmYWxzZTsK
LSAgICAgICAgZGF0YUxvZygiSU5DT0hFUkVOVCBPUFRJT05TOiBhdCBsZWFzdCBvbmUgb2YgdXNl
TExJbnQgb3IgdXNlSklUIG11c3QgYmUgdHJ1ZVxuIik7CisgICAgICAgIGRhdGFMb2coIklOQ09I
RVJFTlQgT1BUSU9OUzogZm9yY2VCYXNlbGluZSBjYW4ndCBiZSB0cnVlIGlmIHVzZUpJVCBpcyBm
YWxzZVxuIik7CiAgICAgfQogICAgIGlmICghY29oZXJlbnQpCiAgICAgICAgIENSQVNIKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlz
aW9uIDI1NDM0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxl
V2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIGR1bXBPcHRpb25zLCAwLCBOb3Jt
YWwsICJkdW1wcyBKU0Mgb3B0aW9ucyAoMCA9IE5vbmUsIDEgPSBPdmVycmlkZGVuIG9ubHksIDIg
PSBBbGwsIDMgPSBWZXJib3NlKSIpIFwKICAgICB2KE9wdGlvblN0cmluZywgY29uZmlnRmlsZSwg
bnVsbHB0ciwgTm9ybWFsLCAiZmlsZSB0byBjb25maWd1cmUgSlNDIG9wdGlvbnMgYW5kIGxvZ2dp
bmcgbG9jYXRpb24iKSBcCiAgICAgXAotICAgIHYoQm9vbCwgdXNlTExJbnQsICB0cnVlLCBOb3Jt
YWwsICJhbGxvd3MgdGhlIExMSU5UIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKKyAgICB2KEJvb2ws
IGZvcmNlQmFzZWxpbmUsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSdsbCBzdGFydCBydW5u
aW5nIGNvZGUgaW4gdGhlIGJhc2VsaW5lIEpJVCBhbmQgc2tpcCBzdGFydGluZyBpbiB0aGUgTExJ
bnQiKSBcCiAgICAgdihCb29sLCB1c2VKSVQsIGppdEVuYWJsZWRCeURlZmF1bHQoKSwgTm9ybWFs
LCAiYWxsb3dzIHRoZSBleGVjdXRhYmxlIHBhZ2VzIHRvIGJlIGFsbG9jYXRlZCBmb3IgSklUIGFu
ZCB0aHVua3MgaWYgdHJ1ZSIpIFwKICAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklULCB0cnVlLCBO
b3JtYWwsICJhbGxvd3MgdGhlIGJhc2VsaW5lIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAg
ICAgdihCb29sLCB1c2VERkdKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgREZHIEpJVCB0
byBiZSB1c2VkIGlmIHRydWUiKSBcCkBAIC00OTQsNyArNDk0LDYgQEAgY29uc3RleHByIGJvb2wg
ZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoT3B0aW9uU3RyaW5nLCBkdW1wSklUTWVt
b3J5UGF0aCwgbnVsbHB0ciwgUmVzdHJpY3RlZCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBk
dW1wSklUTWVtb3J5Rmx1c2hJbnRlcnZhbCwgMTAsIFJlc3RyaWN0ZWQsICJNYXhpbXVtIHRpbWUg
aW4gYmV0d2VlbiBmbHVzaGVzIG9mIHRoZSBKSVQgbWVtb3J5IGR1bXAgaW4gc2Vjb25kcy4iKSBc
CiAgICAgdihCb29sLCB1c2VVbmxpbmtlZENvZGVCbG9ja0pldHRpc29uaW5nLCBmYWxzZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgVW5saW5rZWRDb2RlQmxvY2sgY2FuIGJlIGpldHRpc29uZWQuIikgXAot
ICAgIHYoQm9vbCwgZm9yY2VPU1JFeGl0VG9MTEludCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUs
IHdlIGFsd2F5cyBleGl0IHRvIHRoZSBMTEludC4gSWYgZmFsc2UsIHdlIGV4aXQgdG8gd2hhdGV2
ZXIgaXMgbW9zdCBjb252ZW5pZW50LiIpIFwKICAgICB2KFVuc2lnbmVkLCBnZXRCeVZhbElDTWF4
TnVtYmVyT2ZJZGVudGlmaWVycywgNCwgTm9ybWFsLCAiTnVtYmVyIG9mIGlkZW50aWZpZXJzIHdl
IHNlZSBpbiB0aGUgTExJbnQgdGhhdCBjb3VsZCBjYXVzZSB1cyB0byBiYWlsIG9uIGdlbmVyYXRp
bmcgYW4gSUMgZm9yIGdldF9ieV92YWwuIikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAyNTQzNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDEwICs0MjYs
MTAgQEAgRXhjZXB0aW9uKiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRQogICAgIGlmIChP
cHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9jay0+dmFsaWRhdGUo
KTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKLSAgICAgICAgc2V0dXBMTElu
dChjb2RlQmxvY2spOwotICAgIGVsc2UKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VCYXNlbGluZSgp
KQogICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKKyAgICBlbHNlCisgICAgICAgIHNl
dHVwTExJbnQoY29kZUJsb2NrKTsKICAgICAKICAgICBpbnN0YWxsQ29kZSh2bSwgY29kZUJsb2Nr
LCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkp
OwogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0Mzg2KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMTAgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVGhyb3cgYXdheSBiYXNlbGluZSBjb2Rl
IGlmIHRoZXJlIGlzIGFuIG9wdGltaXplZCByZXBsYWNlbWVudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNTAzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVz
dHM6CisKIDIwMjAtMDEtMTAgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgog
CiAgICAgICAgIFB5dGhvbjM6IFN1cHBvcnQgU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdApJ
bmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyNTQzNDcpCisrKyBU
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC00OTgs
NyArNDk4LDYgQEAgTk9fQ0pJVF9PUFRJT05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZgogQjNP
MV9PUFRJT05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05TID0gWyIt
LW1heERGR05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICItLWRlZmF1
bHRCM09wdExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQotRk9S
Q0VfTExJTlRfRVhJVF9PUFRJT05TID0gWyItLWZvcmNlT1NSRXhpdFRvTExJbnQ9dHJ1ZSJdCiAK
IHJlcXVpcmVfcmVsYXRpdmUgIndlYmtpdHJ1YnkvanNjLXN0cmVzcy10ZXN0LXdyaXRlci0jeyR0
ZXN0V3JpdGVyfSIKIApAQCAtNjU1LDcgKzY1NCw3IEBAIGVuZAogCiBkZWYgcnVuTm9MTEludCgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIGlmICRqaXRUZXN0cwotICAgICAgICBy
dW4oIm5vLWxsaW50IiwgIi0tdXNlTExJbnQ9ZmFsc2UiLCAqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKQorICAgICAgICBydW4oIm5vLWxsaW50IiwgIi0tZm9yY2VCYXNlbGluZT10cnVlIiwg
Km9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBlbmQKIGVuZAogCkBAIC03MDgsNyAr
NzA3LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcAogZW5kCiAK
IGRlZiBydW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAg
cnVuKCJmdGwtbm8tY2ppdC1iM28wIiwgIi0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZh
bHNlIiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09Q
VElPTlMgKyBCM08wX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICItLXVz
ZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZz1mYWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUi
LCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgQjNPMF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUo
Km9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOCw3ICs3MjcsNyBAQCBkZWYgcnVu
RlRMTm9DSklUT1NSVmFsaWRhdGlvbigqb3B0aW9uYWxUCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2Vy
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIiLCAqKEVB
R0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0VfTExJTlRf
RVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImRm
Zy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5v
Q0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03NDUsNyArNzQ0
LDcgQEAgZGVmIHJ1bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlvbmFsVGVzdFNwZQogZW5kCiAKIGRl
ZiBydW5GVExFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
Ci0gICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdCIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICIt
LWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJ
T05TICsgRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBGT1JD
RV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAg
IHJ1bigiZnRsLWVhZ2VyLW5vLWNqaXQiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS1haXJG
b3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyAr
IEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMRWFnZXJOb0NKSVRCM08xKCpv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC0xMDYwLDcgKzEwNTksNyBAQCBkZWYgZGVm
YXVsdFJ1bk1vZHVsZXMobm9MTEludDogdHJ1ZSkKICAgICAgICAgcmV0dXJuCiAgICAgZW5kCiAK
LSAgICBydW4oIm5vLWxsaW50LW1vZHVsZXMiLCAiLW0iLCAiLS11c2VMTEludD1mYWxzZSIpIGlm
IG5vTExJbnQKKyAgICBydW4oIm5vLWxsaW50LW1vZHVsZXMiLCAiLW0iLCAiLS1mb3JjZUJhc2Vs
aW5lPXRydWUiKSBpZiBub0xMSW50CiAgICAgcnVuKCJuby1jaml0LXZhbGlkYXRlLXBoYXNlcy1t
b2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwgIi0tdmFsaWRhdGVHcmFw
aEF0RWFjaFBoYXNlPXRydWUiLCAqTk9fQ0pJVF9PUFRJT05TKQogICAgIHJ1bigiZGZnLWVhZ2Vy
LW1vZHVsZXMiLCAiLW0iLCAqRUFHRVJfT1BUSU9OUykKICAgICBydW4oImRmZy1lYWdlci1uby1j
aml0LXZhbGlkYXRlLW1vZHVsZXMiLCAiLW0iLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAqKE5P
X0NKSVRfT1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQpAQCAtMTI2MSw3ICsxMjYwLDcgQEAgZGVm
IHJ1bkxheW91dFRlc3ROb0ZUTAogZW5kCiAKIGRlZiBydW5MYXlvdXRUZXN0Tm9MTEludAotICAg
IHJ1bkxheW91dFRlc3QoIm5vLWxsaW50IiwgIi0tdXNlTExJbnQ9ZmFsc2UiKQorICAgIHJ1bkxh
eW91dFRlc3QoIm5vLWxsaW50IiwgIi0tZm9yY2VCYXNlbGluZT10cnVlIikKIGVuZAogCiBkZWYg
cnVuTGF5b3V0VGVzdE5vQ0pJVApAQCAtMTQyNyw3ICsxNDI2LDcgQEAgZGVmIHJ1bk1vemlsbGFU
ZXN0TExJbnQobW9kZSwgKmV4dHJhRmlsZQogZW5kCiAKIGRlZiBydW5Nb3ppbGxhVGVzdEJhc2Vs
aW5lSklUKG1vZGUsICpleHRyYUZpbGVzKQotICAgIHJ1bk1vemlsbGFUZXN0KCJiYXNlbGluZSIs
IG1vZGUsIGV4dHJhRmlsZXMsICItLXVzZUxMSW50PWZhbHNlIiwgIi0tdXNlREZHSklUPWZhbHNl
IikKKyAgICBydW5Nb3ppbGxhVGVzdCgiYmFzZWxpbmUiLCBtb2RlLCBleHRyYUZpbGVzLCAiLS1m
b3JjZUJhc2VsaW5lPXRydWUiLCAiLS11c2VERkdKSVQ9ZmFsc2UiKQogZW5kCiAKIGRlZiBydW5N
b3ppbGxhVGVzdERGR0VhZ2VyTm9DSklUVmFsaWRhdGVQaGFzZXMobW9kZSwgKmV4dHJhRmlsZXMp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388382</attachid>
            <date>2020-01-21 17:29:35 -0800</date>
            <delta_ts>2020-01-21 18:15:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>15917</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0ODkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDIwLTAxLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRocm93IGF3YXkgYmFzZWxpbmUgY29kZSBpZiB0aGVyZSBpcyBhbiBvcHRpbWl6ZWQgcmVwbGFj
ZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MjUwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTg1NTIwNDE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCdzIGdvYWwgaXMgdG8g
aGVscCB1cyBzYXZlIEpJVCBleGVjdXRhYmxlIG1lbW9yeSBieSB0aHJvd2luZworICAgICAgICBh
d2F5IGJhc2VsaW5lIGNvZGUgd2hlbiBpdCBoYXMgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LiBU
byBtYWtlIGl0CisgICAgICAgIGVhc3kgdG8gcmVhc29uIGFib3V0LCB3ZSBkbyB0aGlzIHdoZW4g
ZmluYWxpemluZyBhIEdDLCB3aGVuIHRoZSBDb2RlQmxvY2sKKyAgICAgICAgaXMgbm90IG9uIHRo
ZSBzdGFjaywgYW5kIHdoZW4gbm8gT1NSIGV4aXRzIGFyZSBsaW5rZWQgdG8ganVtcCB0byB0aGUg
YmFzZWxpbmUKKyAgICAgICAgY29kZS4gQWxzbywgYXMgYSBtZWFzdXJlIHRvIGNvbWJhdCBhIHBl
cmZvcm1hbmNlIHJlZ3Jlc3Npb24sIHdlIG9ubHkgdGhyb3cKKyAgICAgICAgYXdheSBjb2RlIG9u
IHRoZSBzZWNvbmQgR0MgY3ljbGUgaW4gd2hpY2ggaXQgaXMgZWxpZ2libGUgZm9yIHRoaXMuCisg
ICAgICAgIFdoZW4gd2UgZG93bmdyYWRlIEJhc2VsaW5lIHRvIExMSW50LCB3ZSBhbHNvIHRocm93
IGF3YXkgYWxsIEpJVCBkYXRhCisgICAgICAgIGFuZCB1bmxpbmsgYWxsIGluY29taW5nIGNhbGxz
LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRKSVREYXRhKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpvcHRpbWl6ZWRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRh
bGx5RnJlcXVlbnRFeGl0U2l0ZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAgICAqIGRmZy9ERkdE
cml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxs
ZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
a1NldDo6aXNDdXJyZW50bHlFeGVjdXRpbmcpOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0
Lmg6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkVuZFBo
YXNlKToKKwogMjAyMC0wMS0yMSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIEFkZCBidWlsZCBmbGFnIGZvciBzdGFsZS13aGlsZS1yZXZhbGlkYXRlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjU0
ODg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5NSw2ICsyOTUsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYg
dm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGls
ZWRXaXRoRlRMKGZhbHNlKQorICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQorICAgICwg
bV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVM
b2NhbHMob3RoZXIubV9udW1DYWxsZWVMb2NhbHMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9u
dW1WYXJzKQogICAgICwgbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcChvdGhlci5tX251bWJlck9m
QXJndW1lbnRzVG9Ta2lwKQpAQCAtMzU0LDYgKzM1Niw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNl
KQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5D
b21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCisg
ICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkgCiAgICAgLCBtX251bUNh
bGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCiAgICAgLCBt
X251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKSkKICAgICAsIG1faGFzRGVidWdn
ZXJTdGF0ZW1lbnQoZmFsc2UpCkBAIC00NDIsMTQgKzQ0Niw4IEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhh
bmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+ZXhjZXB0aW9u
SGFuZGxlcihpKTsKICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAg
ICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5k
bGVyLnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEJ5dGVj
b2RlUHRyVGFnPiBjb2RlUHRyOwotICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+aXNX
aWRlMzIoKSkKLSAgICAgICAgICAgICAgICAgICAgY29kZVB0ciA9IExMSW50OjpnZXRXaWRlMzJD
b2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcF9jYXRjaCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaW5zdHJ1Y3Rpb24tPmlzV2lkZTE2KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvZGVQdHIg
PSBMTEludDo6Z2V0V2lkZTE2Q29kZVB0cjxCeXRlY29kZVB0clRhZz4ob3BfY2F0Y2gpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY29kZVB0ciA9IExMSW50Ojpn
ZXRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcF9jYXRjaCk7CisgICAgICAgICAgICAgICAgYXV0
byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdl
dCkucHRyKCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEJ5dGVjb2Rl
UHRyVGFnPiBjb2RlUHRyID0gTExJbnQ6OmdldENvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+KGluc3Ry
dWN0aW9uKTsKICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5k
bGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihjb2RlUHRyLnJl
dGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCkpKTsKICNlbHNlCiAgICAgICAgICAgICAg
ICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlcik7CkBAIC0xMzgxLDYgKzEzNzks
NDIgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgIFVOVVNF
RF9QQVJBTSh2bSk7CiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOworCisjaWYgRU5BQkxF
KEpJVCkKKyAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlOworICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0g
ZmFsc2U7CisgICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQg
YW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAorICAgIC8vIHRvIGRp
c2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUg
SklUIG1lbW9yeS4KKyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRP
U1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVh
cC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgeworICAgICAgICBp
ZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgp
KSB7CisgICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRl
cikgeworICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy9kYXRhTG9nTG4oInRocm93aW5nIGF3YXkgY29kZSIpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOworICAgICAgICAgICAgICAg
ICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOworCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUt
Pm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlu
a2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9u
cygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOworICAgICAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPiBjb2RlUHRyID0gTExJ
bnQ6OmdldENvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+KGluc3RydWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2Nh
dGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGNvZGVQdHIucmV0YWdnZWQ8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4oKSkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOworCisgICAgICAgICAgICAgICAgICAg
IC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCisgICAgICAgICAgICAgICAgICAg
IC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9y
ZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQorICAgICAgICAgICAgICAg
ICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0
aGUgdmFyaW91cyAqaW5mb3MuCisgICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVG
b3JMTEludERvd25ncmFkZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyNlbmRpZgogICAgIAogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0
VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwpAQCAtMTU5MSwx
MyArMTYyNSwyNCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKICAgICAgICAgLy8g
V2UgY2FuIGNsZWFyIHRoZXNlIGJlY2F1c2Ugbm8gb3RoZXIgdGhyZWFkIHdpbGwgaGF2ZSByZWZl
cmVuY2VzIHRvIGFueSBzdHViIGluZm9zLCBjYWxsCiAgICAgICAgIC8vIGxpbmsgaW5mb3MsIG9y
IGJ5IHZhbCBpbmZvcyBpZiB3ZSBkb24ndCBoYXZlIEpJVCBjb2RlLiBBdHRlbXB0cyB0byBxdWVy
eSB0aGVzZSBkYXRhCiAgICAgICAgIC8vIHN0cnVjdHVyZXMgdXNpbmcgdGhlIGNvbmN1cnJlbnQg
QVBJIChnZXRJQ1N0YXR1c01hcCBhbmQgZnJpZW5kcykgd2lsbCByZXR1cm4gbm90aGluZyBpZiB3
ZQotICAgICAgICAvLyBkb24ndCBoYXZlIEpJVCBjb2RlLgotICAgICAgICBqaXREYXRhLT5tX3N0
dWJJbmZvcy5jbGVhcigpOwotICAgICAgICBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MuY2xlYXIo
KTsKLSAgICAgICAgaml0RGF0YS0+bV9ieVZhbEluZm9zLmNsZWFyKCk7CisgICAgICAgIC8vIGRv
bid0IGhhdmUgSklUIGNvZGUuIFNvIGl0J3Mgc2FmZSB0byBjYWxsIHRoaXMgaWYgd2UgZmFpbCBh
IGJhc2VsaW5lIEpJVCBjb21waWxlLgorICAgICAgICAvLworICAgICAgICAvLyBXZSBhbHNvIGNh
bGwgdGhpcyBmcm9tIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IHdoZW4gd2UgZGVncmFkZSBmcm9t
IGJhc2VsaW5lIEpJVCB0byBMTEludAorICAgICAgICAvLyBjb2RlLiBUaGlzIGlzIHNhZmUgdG8g
ZG8gc2luY2UgYWxsIGNvbXBpbGVyIHRocmVhZHMgYXJlIHNhZmVwb2ludGVkIGluIGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5LAorICAgICAgICAvLyB3aGljaCBtZWFucyB3ZSd2ZSBtYWRlIGl0IHBh
c3QgYnl0ZWNvZGUgcGFyc2luZy4gT25seSB0aGUgYnl0ZWNvZGUgcGFyc2VyIHdpbGwgaG9sZCBv
bnRvCisgICAgICAgIC8vIHJlZmVyZW5jZXMgdG8gdGhlc2UgdmFyaW91cyAqaW5mb3MgdmlhIGl0
cyB1c2Ugb2YgSUNTdGF0dXNNYXAuIEFsc28sIE9TUiBleGl0IG1pZ2h0IHBvaW50IHRvCisgICAg
ICAgIC8vIHRoZXNlICppbmZvcywgYnV0IHdoZW4gd2UgaGF2ZSBhbiBPU1IgZXhpdCBsaW5rZWQg
dG8gdGhpcyBDb2RlQmxvY2ssIHdlIHdvbid0IGRvd25ncmFkZQorICAgICAgICAvLyB0byBMTElu
dC4KKworICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEt
Pm1fc3R1YkluZm9zKSB7CisgICAgICAgICAgICBzdHViSW5mby0+YWJvdXRUb0RpZSgpOworICAg
ICAgICAgICAgc3R1YkluZm8tPmRlcmVmKCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBXZSBj
YW4gY2xlYXIgdGhpcyBiZWNhdXNlIHRoZSBERkcncyBxdWVyaWVzIHRvIHRoZXNlIGRhdGEgc3Ry
dWN0dXJlcyBhcmUgZ3VhcmRlZCBieSB3aGV0aGVyCiAgICAgICAgIC8vIHRoZXJlIGlzIEpJVCBj
b2RlLgotICAgICAgICBqaXREYXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuY2xlYXIoKTsKKworICAg
ICAgICBtX2ppdERhdGEgPSBudWxscHRyOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMTcyOSwxMCAr
MTc3NCwyNCBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKIH0KIAog
I2lmIEVOQUJMRShKSVQpCi1ib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
SklUVHlwZSB0eXBlVG9SZXBsYWNlKQorQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om9wdGltaXplZFJl
cGxhY2VtZW50KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSkKIHsKICAgICBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gcmVwbGFjZW1lbnQgJiYg
SklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50LT5qaXRUeXBlKCksIHR5cGVUb1JlcGxh
Y2UpOworICAgIGlmICghcmVwbGFjZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQtPmppdFR5cGUoKSwgdHlwZVRv
UmVwbGFjZSkpCisgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om9wdGltaXplZFJlcGxhY2VtZW50KCkKK3sK
KyAgICByZXR1cm4gb3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgpKTsKK30KKworYm9vbCBD
b2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSkK
K3sKKyAgICByZXR1cm4gISFvcHRpbWl6ZWRSZXBsYWNlbWVudCh0eXBlVG9SZXBsYWNlKTsKIH0K
IAogYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTI3NzYsNyAr
MjgzNSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB2b2lkIENvZGVC
bG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBBU1NFUlQoYWx0ZXJuYXRpdmUoKS0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI1NDg4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjU4LDYgKzI1OCwxMSBAQCBwdWJsaWM6CiAKICAgICBPcHRpb25hbDxCeXRlY29kZUlu
ZGV4PiBieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCk7CiAKKyAg
ICAvLyBCZWNhdXNlIHdlIG1pZ2h0IHRocm93IG91dCBiYXNlbGluZSBKSVQgY29kZSBhbmQgYWxs
IGl0cyBiYXNlbGluZSBKSVQgZGF0YSAobV9qaXREYXRhKSwKKyAgICAvLyB5b3UgbmVlZCB0byBi
ZSBjYXJlZnVsIGFib3V0IHRoZSBsaWZldGltZSBvZiB3aGVuIHlvdSB1c2UgdGhlIHJldHVybiB2
YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uLgorICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgbWF5IGhhdmUg
cmF3IHBvaW50ZXJzIGludG8gdGhpcyBkYXRhIHN0cnVjdHVyZSB0aGF0IGdldHMgdGhyb3duIGF3
YXkuCisgICAgLy8gU3BlY2lmaWNhbGx5LCB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCBubyBHQyBj
YW4gYmUgZmluYWxpemVkICh0eXBpY2FsbHkgdGhhdCBtZWFucyBubworICAgIC8vIGFsbG9jYXRp
b25zKSBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBhbmQgdGhlIGxhc3QgdXNlIG9mIGl0LgogICAgIHZv
aWQgZ2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgSUNTdGF0dXNNYXAm
IHJlc3VsdCk7CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsK
ICAgICAKQEAgLTQxMiw3ICs0MTcsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRKSVRD
b2RlKFJlZjxKSVRDb2RlPiYmIGNvZGUpCiAgICAgewotICAgICAgICBBU1NFUlQoaGVhcCgpLT5p
c0RlZmVycmVkKCkpOwogICAgICAgICBpZiAoIWNvZGUtPmlzU2hhcmVkKCkpCiAgICAgICAgICAg
ICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGNvZGUtPnNpemUoKSk7CiAKQEAg
LTQ0NCw2ICs0NDgsOCBAQCBwdWJsaWM6CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJp
bGl0eUxldmVsKCk7CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsU3Rh
dGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkNhcGFiaWxpdHlMZXZlbD4obV9jYXBhYmls
aXR5TGV2ZWxTdGF0ZSk7IH0KIAorICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQo
SklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKKyAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2Vt
ZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15IEpJVFR5cGUKICAgICBib29sIGhhc09w
dGltaXplZFJlcGxhY2VtZW50KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CiAgICAgYm9vbCBoYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBl
CiAjZW5kaWYKQEAgLTg2Myw2ICs4NjksOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2RpZEZhaWxG
VExDb21waWxhdGlvbiA6IDE7CiAgICAgYm9vbCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwgOiAx
OwogCisgICAgYm9vbCBtX2hhc0xpbmtlZE9TUkV4aXQgOiAxOworICAgIGJvb2wgbV9pc0VsaWdp
YmxlRm9yTExJbnREb3duZ3JhZGUgOiAxOworCiAgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBmb3Ig
dXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNuJ3QK
ICAgICAvLyBmb3IgdGhlIGZhY3QgdGhhdCB3ZSB1c2UgaXQgZnJvbSBhbm9ueW1vdXMgbmFtZXNw
YWNlcy4KICAgICB2b2lkIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDI1NDg4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEs
NyArODEsNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgCiAg
ICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoIXByb2Zp
bGVkREZHQ29kZUJsb2NrIHx8IHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6REZHSklUKTsKICAgICAKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjU0ODg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTMsNiArMTkzLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNh
bAogI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElPTgogCiAgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisK
ICAgICAgICAgc3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKICAgICAgICAgY2FzZSBJbmxp
bmVDYWxsRnJhbWU6OkNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1
Y3Q6CkBAIC00MTMsNiArNDE1LDggQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZt
LCBDQ2FsbAogI2VuZGlmCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dl
ZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAg
ICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKwogICAg
ICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRl
c3RpbmF0aW9uOwogICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMjU0
ODg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEgQEAgdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3Vy
cmVudGx5RXhlY3V0aQogICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmNsZWFyKCk7CiB9CiAKK2Jv
b2wgQ29kZUJsb2NrU2V0Ojppc0N1cnJlbnRseUV4ZWN1dGluZyhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50bHlFeGVjdXRpbmcuY29udGFpbnMoY29kZUJsb2Nr
KTsKK30KKwogdm9pZCBDb2RlQmxvY2tTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKICAgICBDb21tYVByaW50ZXIgY29tbWE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db2RlQmxvY2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db2RlQmxvY2tTZXQuaAkocmV2aXNpb24gMjU0ODg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEw
IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9p
ZCogY2FuZGlkYXRlQ29kZUJsb2NrKTsKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9s
b2NrOyB9CiAKKyAgICAvLyBUaGlzIGlzIGV4cGVjdGVkIHRvIHJ1biBvbmx5IHdoZW4gd2UncmUg
bm90IGFkZGluZyB0byB0aGUgc2V0IGZvciBub3cuIElmCisgICAgLy8gdGhpcyBuZWVkcyB0byBy
dW4gY29uY3VycmVudGx5IGluIHRoZSBmdXR1cmUsIHdlJ2xsIG5lZWQgdG8gbG9jayBhcm91bmQg
dGhpcy4KKyAgICBib29sIGlzQ3VycmVudGx5RXhlY3V0aW5nKENvZGVCbG9jayopOworCiAgICAg
Ly8gVmlzaXRzIGVhY2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVudGlsIHRoZSB2aXNpdG9yIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgIC8vIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgZG9uZSBp
dGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMgYmVlbgogICAgIC8vIHZpc2l0
ZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjU0ODg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwNSwxMSArNjA1LDExIEBAIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmlu
YWxpemUKICAgICB2bSgpLmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5maW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpOwogICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RnVuY3Rp
b25FeGVjdXRhYmxlPih2bSgpLmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNwYWNlKTsKICAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFN5bWJvbFRhYmxlPih2bSgpLnN5
bWJvbFRhYmxlU3BhY2UpOworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXpl
cnM8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4odm0oKS5leGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlc1dpdGhGaW5hbGl6ZXJzKTsgLy8gV2UgcnVuIHRoaXMgYmVmb3JlIENvZGVCbG9jaydzIHVu
Y29uZGl0aW9uYWwgZmluYWxpemVyIHNpbmNlIENvZGVCbG9jayBsb29rcyBhdCB0aGUgb3duZXIg
ZXhlY3V0YWJsZSdzIGluc3RhbGxlZCBDb2RlQmxvY2sgaW4gaXRzIGZpbmFsaXplVW5jb25kaXRp
b25hbGx5LgogICAgIHZtKCkuZm9yRWFjaENvZGVCbG9ja1NwYWNlKAogICAgICAgICBbJl0gKGF1
dG8mIHNwYWNlKSB7CiAgICAgICAgICAgICB0aGlzLT5maW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzPENvZGVCbG9jaz4oc3BhY2Uuc2V0KTsKICAgICAgICAgfSk7Ci0gICAgZmlu
YWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlPih2bSgpLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMpOwogICAg
IGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3RydWN0dXJlUmFyZURhdGE+
KHZtKCkuc3RydWN0dXJlUmFyZURhdGFTcGFjZSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRp
dGlvbmFsRmluYWxpemVyczxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0oKS51bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNldCk7CiAgICAgaWYgKHZtKCkubV93ZWFrU2V0U3Bh
Y2UpCkBAIC0xNTA5LDcgKzE1MDksNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQ
aGFzZShHQ0NvCiAgICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDTWFwcygpOwogICAgIHN3
ZWVwQXJyYXlCdWZmZXJzKCk7CiAgICAgc25hcHNob3RVbnN3ZXB0KCk7Ci0gICAgZmluYWxpemVV
bmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFs
aXplcnMoKTsgLy8gV2UgcmVseSBvbiB0aGVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMgcnVu
bmluZyBiZWZvcmUgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29kZUJsb2NrJ3MgZmlu
YWxpemVyIHJlbGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5nLgogICAgIHJlbW92
ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwogICAgIG5vdGlmeUluY3JlbWVudGFsU3dl
ZXBlcigpOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388386</attachid>
            <date>2020-01-21 18:15:52 -0800</date>
            <delta_ts>2020-01-22 09:06:37 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>15861</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0ODkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDIwLTAxLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRocm93IGF3YXkgYmFzZWxpbmUgY29kZSBpZiB0aGVyZSBpcyBhbiBvcHRpbWl6ZWQgcmVwbGFj
ZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MjUwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTg1NTIwNDE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCdzIGdvYWwgaXMgdG8g
aGVscCB1cyBzYXZlIEpJVCBleGVjdXRhYmxlIG1lbW9yeSBieSB0aHJvd2luZworICAgICAgICBh
d2F5IGJhc2VsaW5lIGNvZGUgd2hlbiBpdCBoYXMgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LiBU
byBtYWtlIGl0CisgICAgICAgIGVhc3kgdG8gcmVhc29uIGFib3V0LCB3ZSBkbyB0aGlzIHdoZW4g
ZmluYWxpemluZyBhIEdDLCB3aGVuIHRoZSBDb2RlQmxvY2sKKyAgICAgICAgaXMgbm90IG9uIHRo
ZSBzdGFjaywgYW5kIHdoZW4gbm8gT1NSIGV4aXRzIGFyZSBsaW5rZWQgdG8ganVtcCB0byB0aGUg
YmFzZWxpbmUKKyAgICAgICAgY29kZS4gQWxzbywgYXMgYSBtZWFzdXJlIHRvIGNvbWJhdCBhIHBl
cmZvcm1hbmNlIHJlZ3Jlc3Npb24sIHdlIG9ubHkgdGhyb3cKKyAgICAgICAgYXdheSBjb2RlIG9u
IHRoZSBzZWNvbmQgR0MgY3ljbGUgaW4gd2hpY2ggaXQgaXMgZWxpZ2libGUgZm9yIHRoaXMuCisg
ICAgICAgIFdoZW4gd2UgZG93bmdyYWRlIEJhc2VsaW5lIHRvIExMSW50LCB3ZSBhbHNvIHRocm93
IGF3YXkgYWxsIEpJVCBkYXRhCisgICAgICAgIGFuZCB1bmxpbmsgYWxsIGluY29taW5nIGNhbGxz
LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRKSVREYXRhKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpvcHRpbWl6ZWRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRh
bGx5RnJlcXVlbnRFeGl0U2l0ZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAgICAqIGRmZy9ERkdE
cml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxs
ZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
a1NldDo6aXNDdXJyZW50bHlFeGVjdXRpbmcpOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0
Lmg6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkVuZFBo
YXNlKToKKwogMjAyMC0wMS0yMSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIEFkZCBidWlsZCBmbGFnIGZvciBzdGFsZS13aGlsZS1yZXZhbGlkYXRlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjU0
ODg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5NSw2ICsyOTUsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYg
dm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGls
ZWRXaXRoRlRMKGZhbHNlKQorICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQorICAgICwg
bV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVM
b2NhbHMob3RoZXIubV9udW1DYWxsZWVMb2NhbHMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9u
dW1WYXJzKQogICAgICwgbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcChvdGhlci5tX251bWJlck9m
QXJndW1lbnRzVG9Ta2lwKQpAQCAtMzU0LDYgKzM1Niw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNl
KQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5D
b21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCisg
ICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkgCiAgICAgLCBtX251bUNh
bGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCiAgICAgLCBt
X251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKSkKICAgICAsIG1faGFzRGVidWdn
ZXJTdGF0ZW1lbnQoZmFsc2UpCkBAIC00NDIsMTQgKzQ0Niw4IEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhh
bmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+ZXhjZXB0aW9u
SGFuZGxlcihpKTsKICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAg
ICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5k
bGVyLnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEJ5dGVj
b2RlUHRyVGFnPiBjb2RlUHRyOwotICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+aXNX
aWRlMzIoKSkKLSAgICAgICAgICAgICAgICAgICAgY29kZVB0ciA9IExMSW50OjpnZXRXaWRlMzJD
b2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcF9jYXRjaCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaW5zdHJ1Y3Rpb24tPmlzV2lkZTE2KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvZGVQdHIg
PSBMTEludDo6Z2V0V2lkZTE2Q29kZVB0cjxCeXRlY29kZVB0clRhZz4ob3BfY2F0Y2gpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY29kZVB0ciA9IExMSW50Ojpn
ZXRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcF9jYXRjaCk7CisgICAgICAgICAgICAgICAgYXV0
byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdl
dCkucHRyKCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEJ5dGVjb2Rl
UHRyVGFnPiBjb2RlUHRyID0gTExJbnQ6OmdldENvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+KGluc3Ry
dWN0aW9uKTsKICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5k
bGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihjb2RlUHRyLnJl
dGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCkpKTsKICNlbHNlCiAgICAgICAgICAgICAg
ICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlcik7CkBAIC0xMzgxLDYgKzEzNzks
NDEgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgIFVOVVNF
RF9QQVJBTSh2bSk7CiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOworCisjaWYgRU5BQkxF
KEpJVCkKKyAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlOworICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0g
ZmFsc2U7CisgICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQg
YW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAorICAgIC8vIHRvIGRp
c2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUg
SklUIG1lbW9yeS4KKyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRP
U1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVh
cC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgeworICAgICAgICBp
ZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgp
KSB7CisgICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRl
cikgeworICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAg
ICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2Rl
LT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxp
bmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBI
YW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlv
bnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxCeXRlY29kZVB0clRhZz4gY29kZVB0ciA9IExM
SW50OjpnZXRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihpbnN0cnVjdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9j
YXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihjb2RlUHRyLnJldGFnZ2VkPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcworICAgICAgICAgICAgICAgICAg
ICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZv
cmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKyAgICAgICAgICAgICAg
ICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8g
dGhlIHZhcmlvdXMgKmluZm9zLgorICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisjZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGpp
dFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTE1OTEs
MTMgKzE2MjQsMjQgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklURGF0YSgpCiAgICAgICAgIC8v
IFdlIGNhbiBjbGVhciB0aGVzZSBiZWNhdXNlIG5vIG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVm
ZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZvcywgY2FsbAogICAgICAgICAvLyBsaW5rIGluZm9zLCBv
ciBieSB2YWwgaW5mb3MgaWYgd2UgZG9uJ3QgaGF2ZSBKSVQgY29kZS4gQXR0ZW1wdHMgdG8gcXVl
cnkgdGhlc2UgZGF0YQogICAgICAgICAvLyBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBjb25jdXJyZW50
IEFQSSAoZ2V0SUNTdGF0dXNNYXAgYW5kIGZyaWVuZHMpIHdpbGwgcmV0dXJuIG5vdGhpbmcgaWYg
d2UKLSAgICAgICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4KLSAgICAgICAgaml0RGF0YS0+bV9z
dHViSW5mb3MuY2xlYXIoKTsKLSAgICAgICAgaml0RGF0YS0+bV9jYWxsTGlua0luZm9zLmNsZWFy
KCk7Ci0gICAgICAgIGppdERhdGEtPm1fYnlWYWxJbmZvcy5jbGVhcigpOworICAgICAgICAvLyBk
b24ndCBoYXZlIEpJVCBjb2RlLiBTbyBpdCdzIHNhZmUgdG8gY2FsbCB0aGlzIGlmIHdlIGZhaWwg
YSBiYXNlbGluZSBKSVQgY29tcGlsZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgYWxzbyBj
YWxsIHRoaXMgZnJvbSBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSB3aGVuIHdlIGRlZ3JhZGUgZnJv
bSBiYXNlbGluZSBKSVQgdG8gTExJbnQKKyAgICAgICAgLy8gY29kZS4gVGhpcyBpcyBzYWZlIHRv
IGRvIHNpbmNlIGFsbCBjb21waWxlciB0aHJlYWRzIGFyZSBzYWZlcG9pbnRlZCBpbiBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSwKKyAgICAgICAgLy8gd2hpY2ggbWVhbnMgd2UndmUgbWFkZSBpdCBw
YXN0IGJ5dGVjb2RlIHBhcnNpbmcuIE9ubHkgdGhlIGJ5dGVjb2RlIHBhcnNlciB3aWxsIGhvbGQg
b250bworICAgICAgICAvLyByZWZlcmVuY2VzIHRvIHRoZXNlIHZhcmlvdXMgKmluZm9zIHZpYSBp
dHMgdXNlIG9mIElDU3RhdHVzTWFwLiBBbHNvLCBPU1IgZXhpdCBtaWdodCBwb2ludCB0bworICAg
ICAgICAvLyB0aGVzZSAqaW5mb3MsIGJ1dCB3aGVuIHdlIGhhdmUgYW4gT1NSIGV4aXQgbGlua2Vk
IHRvIHRoaXMgQ29kZUJsb2NrLCB3ZSB3b24ndCBkb3duZ3JhZGUKKyAgICAgICAgLy8gdG8gTExJ
bnQuCisKKyAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgeworICAgICAgICAgICAgc3R1YkluZm8tPmFib3V0VG9EaWUoKTsKKyAg
ICAgICAgICAgIHN0dWJJbmZvLT5kZXJlZigpOworICAgICAgICB9CisKICAgICAgICAgLy8gV2Ug
Y2FuIGNsZWFyIHRoaXMgYmVjYXVzZSB0aGUgREZHJ3MgcXVlcmllcyB0byB0aGVzZSBkYXRhIHN0
cnVjdHVyZXMgYXJlIGd1YXJkZWQgYnkgd2hldGhlcgogICAgICAgICAvLyB0aGVyZSBpcyBKSVQg
Y29kZS4KLSAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLmNsZWFyKCk7CisKKyAg
ICAgICAgbV9qaXREYXRhID0gbnVsbHB0cjsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTE3MjksMTAg
KzE3NzMsMjQgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB9CiAK
ICNpZiBFTkFCTEUoSklUKQotYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSkKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpvcHRpbWl6ZWRS
ZXBsYWNlbWVudChKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCiB7CiAgICAgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuIHJlcGxhY2VtZW50ICYm
IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudC0+aml0VHlwZSgpLCB0eXBlVG9SZXBs
YWNlKTsKKyAgICBpZiAoIXJlcGxhY2VtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAoSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50LT5qaXRUeXBlKCksIHR5cGVU
b1JlcGxhY2UpKQorICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpvcHRpbWl6ZWRSZXBsYWNlbWVudCgpCit7
CisgICAgcmV0dXJuIG9wdGltaXplZFJlcGxhY2VtZW50KGppdFR5cGUoKSk7Cit9CisKK2Jvb2wg
Q29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRUeXBlIHR5cGVUb1JlcGxhY2Up
Cit7CisgICAgcmV0dXJuICEhb3B0aW1pemVkUmVwbGFjZW1lbnQodHlwZVRvUmVwbGFjZSk7CiB9
CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCkBAIC0yNzc2LDcg
KzI4MzQsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogdm9pZCBDb2Rl
QmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKQogewogICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgQVNTRVJUKGFsdGVybmF0aXZlKCktPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKEpJVENvZGU6Omlz
QmFzZWxpbmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNTQ4ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1OCw2ICsyNTgsMTEgQEAgcHVibGljOgogCiAgICAgT3B0aW9uYWw8Qnl0ZWNvZGVJ
bmRleD4gYnl0ZWNvZGVJbmRleEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXgpOwogCisg
ICAgLy8gQmVjYXVzZSB3ZSBtaWdodCB0aHJvdyBvdXQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIGFs
bCBpdHMgYmFzZWxpbmUgSklUIGRhdGEgKG1faml0RGF0YSksCisgICAgLy8geW91IG5lZWQgdG8g
YmUgY2FyZWZ1bCBhYm91dCB0aGUgbGlmZXRpbWUgb2Ygd2hlbiB5b3UgdXNlIHRoZSByZXR1cm4g
dmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4KKyAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIG1heSBoYXZl
IHJhdyBwb2ludGVycyBpbnRvIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBnZXRzIHRocm93biBh
d2F5LgorICAgIC8vIFNwZWNpZmljYWxseSwgeW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gR0Mg
Y2FuIGJlIGZpbmFsaXplZCAodHlwaWNhbGx5IHRoYXQgbWVhbnMgbm8KKyAgICAvLyBhbGxvY2F0
aW9ucykgYmV0d2VlbiBjYWxsaW5nIHRoaXMgYW5kIHRoZSBsYXN0IHVzZSBvZiBpdC4KICAgICB2
b2lkIGdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIElDU3RhdHVzTWFw
JiByZXN1bHQpOwogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7
CiAgICAgCkBAIC00MTIsNyArNDE3LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2V0SklU
Q29kZShSZWY8SklUQ29kZT4mJiBjb2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhlYXAoKS0+
aXNEZWZlcnJlZCgpKTsKICAgICAgICAgaWYgKCFjb2RlLT5pc1NoYXJlZCgpKQogICAgICAgICAg
ICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChjb2RlLT5zaXplKCkpOwogCkBA
IC00NDQsNiArNDQ4LDggQEAgcHVibGljOgogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFi
aWxpdHlMZXZlbCgpOwogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbFN0
YXRlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpDYXBhYmlsaXR5TGV2ZWw+KG1fY2FwYWJp
bGl0eUxldmVsU3RhdGUpOyB9CiAKKyAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50
KEpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRSZXBsYWNl
bWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAgICAgYm9vbCBoYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudChKSVRUeXBlIHR5cGVUb1JlcGxhY2UpOwogICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsgLy8gdGhlIHR5cGVUb1JlcGxhY2UgaXMgbXkgSklUVHlw
ZQogI2VuZGlmCkBAIC04NjMsNiArODY5LDkgQEAgcHVibGljOgogICAgIGJvb2wgbV9kaWRGYWls
RlRMQ29tcGlsYXRpb24gOiAxOwogICAgIGJvb2wgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMIDog
MTsKIAorICAgIGJvb2wgbV9oYXNMaW5rZWRPU1JFeGl0IDogMTsKKyAgICBib29sIG1faXNFbGln
aWJsZUZvckxMSW50RG93bmdyYWRlIDogMTsKKwogICAgIC8vIEludGVybmFsIG1ldGhvZHMgZm9y
IHVzZSBieSB2YWxpZGF0aW9uIGNvZGUuIEl0IHdvdWxkIGJlIHByaXZhdGUgaWYgaXQgd2Fzbid0
CiAgICAgLy8gZm9yIHRoZSBmYWN0IHRoYXQgd2UgdXNlIGl0IGZyb20gYW5vbnltb3VzIG5hbWVz
cGFjZXMuCiAgICAgdm9pZCBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAyNTQ4ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDcgKzgxLDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIAog
ICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2Rl
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKCFwcm9m
aWxlZERGR0NvZGVCbG9jayB8fCBwcm9maWxlZERGR0NvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkRGR0pJVCk7CiAgICAgCiAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhtb2Rl
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI1NDg4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkzLDYgKzE5Myw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
YWwKICN1bmRlZiBMTElOVF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7CisgICAgICAg
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwor
CiAgICAgICAgIHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNhc2UgSW5s
aW5lQ2FsbEZyYW1lOjpDYWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3Ry
dWN0OgpAQCAtNDEzLDYgKzQxNSw4IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGwKICNlbmRpZgogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdn
ZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisKICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBk
ZXN0aW5hdGlvbjsKICAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHJldmlzaW9uIDI1
NDg4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhckN1
cnJlbnRseUV4ZWN1dGkKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwogfQogCiti
b29sIENvZGVCbG9ja1NldDo6aXNDdXJyZW50bHlFeGVjdXRpbmcoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCit7CisgICAgcmV0dXJuIG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9j
ayk7Cit9CisKIHZvaWQgQ29kZUJsb2NrU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDI1NDg4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niwx
MCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZv
aWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1f
bG9jazsgfQogCisgICAgLy8gVGhpcyBpcyBleHBlY3RlZCB0byBydW4gb25seSB3aGVuIHdlJ3Jl
IG5vdCBhZGRpbmcgdG8gdGhlIHNldCBmb3Igbm93LiBJZgorICAgIC8vIHRoaXMgbmVlZHMgdG8g
cnVuIGNvbmN1cnJlbnRseSBpbiB0aGUgZnV0dXJlLCB3ZSdsbCBuZWVkIHRvIGxvY2sgYXJvdW5k
IHRoaXMuCisgICAgYm9vbCBpc0N1cnJlbnRseUV4ZWN1dGluZyhDb2RlQmxvY2sqKTsKKwogICAg
IC8vIFZpc2l0cyBlYWNoIENvZGVCbG9jayBpbiB0aGUgaGVhcCB1bnRpbCB0aGUgdmlzaXRvciBm
dW5jdGlvbiByZXR1cm5zIHRydWUKICAgICAvLyB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIGRvbmUg
aXRlcmF0aW5nLCBvciB1bnRpbCBldmVyeSBDb2RlQmxvY2sgaGFzIGJlZW4KICAgICAvLyB2aXNp
dGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI1NDg4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MDUsMTEgKzYwNSwxMSBAQCB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZp
bmFsaXplCiAgICAgdm0oKS5idWlsdGluRXhlY3V0YWJsZXMoKS0+ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1bmN0
aW9uRXhlY3V0YWJsZT4odm0oKS5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zcGFjZSk7CiAgICAg
ZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTeW1ib2xUYWJsZT4odm0oKS5z
eW1ib2xUYWJsZVNwYWNlKTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+KHZtKCkuZXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZXNXaXRoRmluYWxpemVycyk7IC8vIFdlIHJ1biB0aGlzIGJlZm9yZSBDb2RlQmxvY2sncyB1
bmNvbmRpdGlvbmFsIGZpbmFsaXplciBzaW5jZSBDb2RlQmxvY2sgbG9va3MgYXQgdGhlIG93bmVy
IGV4ZWN1dGFibGUncyBpbnN0YWxsZWQgQ29kZUJsb2NrIGluIGl0cyBmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseS4KICAgICB2bSgpLmZvckVhY2hDb2RlQmxvY2tTcGFjZSgKICAgICAgICAgWyZdIChh
dXRvJiBzcGFjZSkgewogICAgICAgICAgICAgdGhpcy0+ZmluYWxpemVNYXJrZWRVbmNvbmRpdGlv
bmFsRmluYWxpemVyczxDb2RlQmxvY2s+KHNwYWNlLnNldCk7CiAgICAgICAgIH0pOwotICAgIGZp
bmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZT4odm0oKS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhGaW5hbGl6ZXJzKTsKICAg
ICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFN0cnVjdHVyZVJhcmVEYXRh
Pih2bSgpLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2UpOwogICAgIGZpbmFsaXplTWFya2VkVW5jb25k
aXRpb25hbEZpbmFsaXplcnM8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtKCkudW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQpOwogICAgIGlmICh2bSgpLm1fd2Vha1NldFNw
YWNlKQpAQCAtMTUwOSw3ICsxNTA5LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5k
UGhhc2UoR0NDbwogICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKICAgICBz
d2VlcEFycmF5QnVmZmVycygpOwogICAgIHNuYXBzaG90VW5zd2VwdCgpOwotICAgIGZpbmFsaXpl
VW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzKCk7IC8vIFdlIHJlbHkgb24gdGhlc2UgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzIHJ1
bm5pbmcgYmVmb3JlIGNsZWFyQ3VycmVudGx5RXhlY3V0aW5nIHNpbmNlIENvZGVCbG9jaydzIGZp
bmFsaXplciByZWxpZXMgb24gcXVlcnlpbmcgY3VycmVudGx5IGV4ZWN1dGluZy4KICAgICByZW1v
dmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAgICBub3RpZnlJbmNyZW1lbnRhbFN3
ZWVwZXIoKTsKICAgICAK
</data>

          </attachment>
      

    </bug>

</bugzilla>