<?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>181096</bug_id>
          
          <creation_ts>2017-12-21 12:03:31 -0800</creation_ts>
          <short_desc>Apply poisoning to more pointers in JSC.</short_desc>
          <delta_ts>2018-01-08 13:05:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1384195</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-12-21 12:03:31 -0800</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384197</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-21 12:06:49 -0800</bug_when>
    <thetext>&lt;rdar://problem/36182970&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384499</commentid>
    <comment_count>2</comment_count>
      <attachid>330132</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-12-22 11:12:08 -0800</bug_when>
    <thetext>Created attachment 330132
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384500</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-22 11:15:07 -0800</bug_when>
    <thetext>Attachment 330132 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:111:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:117:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h:92:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:392:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:393:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1318:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1318:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1319:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 9 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386396</commentid>
    <comment_count>4</comment_count>
      <attachid>330617</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-05 17:20:01 -0800</bug_when>
    <thetext>Created attachment 330617
work in progress for EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386399</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-05 17:21:10 -0800</bug_when>
    <thetext>Attachment 330617 did not pass style-queue:


ERROR: Source/WTF/wtf/Bag.h:50:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:392:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:393:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1323:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1323:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1324:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:111:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:117:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h:92:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 9 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386574</commentid>
    <comment_count>6</comment_count>
      <attachid>330662</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-07 15:31:07 -0800</bug_when>
    <thetext>Created attachment 330662
x86_64 benchmark results.

Perf appears to be neutral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386586</commentid>
    <comment_count>7</comment_count>
      <attachid>330665</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-07 18:06:43 -0800</bug_when>
    <thetext>Created attachment 330665
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386587</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-07 18:08:27 -0800</bug_when>
    <thetext>Attachment 330665 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:402:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:403:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 2 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386784</commentid>
    <comment_count>9</comment_count>
      <attachid>330712</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-08 10:12:48 -0800</bug_when>
    <thetext>Created attachment 330712
proposed patch w/ 32-bit build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386785</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-08 10:14:55 -0800</bug_when>
    <thetext>Attachment 330712 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:402:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:403:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 2 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386802</commentid>
    <comment_count>11</comment_count>
      <attachid>330712</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-08 10:42:11 -0800</bug_when>
    <thetext>Comment on attachment 330712
proposed patch w/ 32-bit build fix.

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

r=me with some comments.

&gt; Source/JavaScriptCore/assembler/MacroAssembler.h:1002
&gt; +    }

This always uses an extra scratch. It&apos;s convenient to type less, but is it something we usually do (as opposed to being explicit in code that it&apos;ll necessarily need a scratch)? At least in some WebAssembly cases we don&apos;t opt-in to that scratch being usable, so it would assert to use this xorPtr.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:110
&gt; +}

This seems like the wrong place for the helper? It should be in the poisoned unique ptr header.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1961
&gt; +    else

This should be `else if X86_64_WIN`

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1037
&gt;      loadp CodeBlock::m_vm[t1], t2

I think it would be nice to rename CodeBlock::m_vm to CodeBlock::m_PoisonedVm because places like this would be way more obvious. It&apos;s easy to miss an unpoison otherwise IMO.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:197
&gt; +}

Ditto, wrong place.

&gt; Source/WTF/wtf/Bag.h:47
&gt; +    BagNode* m_next { nullptr };

So I understand correctly: we&apos;re allowing poison of head, and not next, because the head is the only thing &quot;dangerously&quot; accessible and you need it to get to any next node? In other words, we&apos;d poison any BagNode* that&apos;s held elsewhere?

&gt; Source/WTF/wtf/Bag.h:155
&gt; +using PoisonedBag = Bag&lt;T, ConstExprPoisonedPtrTraits&lt;key, Private::BagNode&lt;T&gt;&gt;&gt;;

I gotta say PoisonedBag sounds badass. Now we need BagFullOfPoisonSnakes.

&gt; Source/WTF/wtf/Poisoned.h:90
&gt; +// FiXME: once we have C++17, we can make the key of type auto and remove the need for KeyType.

ALL CAPS FAIL ON FiXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386810</commentid>
    <comment_count>12</comment_count>
      <attachid>330712</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-08 10:54:45 -0800</bug_when>
    <thetext>Comment on attachment 330712
proposed patch w/ 32-bit build fix.

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

Thanks for the review.

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssembler.h:1002
&gt;&gt; +    }
&gt; 
&gt; This always uses an extra scratch. It&apos;s convenient to type less, but is it something we usually do (as opposed to being explicit in code that it&apos;ll necessarily need a scratch)? At least in some WebAssembly cases we don&apos;t opt-in to that scratch being usable, so it would assert to use this xorPtr.

I&apos;ll see what I can do about this to make it give the option to pass in a scratch.  May leave as is for now.

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:110
&gt;&gt; +}
&gt; 
&gt; This seems like the wrong place for the helper? It should be in the poisoned unique ptr header.

I disagree.  This is a special version of makePoisonedUnique (using CodeBlockPoison) only for use in this CodeBlock.cpp file.  Hence, this is the right place for it.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1961
&gt;&gt; +    else
&gt; 
&gt; This should be `else if X86_64_WIN`

I disagree.  The else case is generic for all !POISON cases.  This is why I changed the condition being tested here.  My goal is to minimize the burden on builds that don&apos;t support poisoning.  Hence, I believe this code is correct as is.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1037
&gt;&gt;      loadp CodeBlock::m_vm[t1], t2
&gt; 
&gt; I think it would be nice to rename CodeBlock::m_vm to CodeBlock::m_PoisonedVm because places like this would be way more obvious. It&apos;s easy to miss an unpoison otherwise IMO.

I&apos;ll look into this.

&gt;&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:197
&gt;&gt; +}
&gt; 
&gt; Ditto, wrong place.

Again, I disagree.  This is a convenience version of makePoisonedUnique that is only used in JSGlobalObject.cpp, and uses only JSGlobalObjectPoison.  Hence, it belongs here.

&gt;&gt; Source/WTF/wtf/Bag.h:47
&gt;&gt; +    BagNode* m_next { nullptr };
&gt; 
&gt; So I understand correctly: we&apos;re allowing poison of head, and not next, because the head is the only thing &quot;dangerously&quot; accessible and you need it to get to any next node? In other words, we&apos;d poison any BagNode* that&apos;s held elsewhere?

BagNode is only held in Bag (hence, my putting it in a WTF::Private namespace).  And yes, we only need to poison the head in Bag since Bag can be embedded in client data structures.

&gt;&gt; Source/WTF/wtf/Poisoned.h:90
&gt;&gt; +// FiXME: once we have C++17, we can make the key of type auto and remove the need for KeyType.
&gt; 
&gt; ALL CAPS FAIL ON FiXME

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386818</commentid>
    <comment_count>13</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-08 11:07:48 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #12)
&gt; Comment on attachment 330712 [details]
&gt; proposed patch w/ 32-bit build fix.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=330712&amp;action=review
&gt; 
&gt; Thanks for the review.
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/assembler/MacroAssembler.h:1002
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; This always uses an extra scratch. It&apos;s convenient to type less, but is it something we usually do (as opposed to being explicit in code that it&apos;ll necessarily need a scratch)? At least in some WebAssembly cases we don&apos;t opt-in to that scratch being usable, so it would assert to use this xorPtr.
&gt; 
&gt; I&apos;ll see what I can do about this to make it give the option to pass in a
&gt; scratch.  May leave as is for now.

Yeah checking this in for now is fine. I&apos;d put a FIXME with bug though.

&gt; &gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:110
&gt; &gt;&gt; +}
&gt; &gt; 
&gt; &gt; This seems like the wrong place for the helper? It should be in the poisoned unique ptr header.
&gt; 
&gt; I disagree.  This is a special version of makePoisonedUnique (using
&gt; CodeBlockPoison) only for use in this CodeBlock.cpp file.  Hence, this is
&gt; the right place for it.

What I mean is that you can have a generic version to which you pass in the special bits, no?

&gt; &gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1961
&gt; &gt;&gt; +    else
&gt; &gt; 
&gt; &gt; This should be `else if X86_64_WIN`
&gt; 
&gt; I disagree.  The else case is generic for all !POISON cases.  This is why I
&gt; changed the condition being tested here.  My goal is to minimize the burden
&gt; on builds that don&apos;t support poisoning.  Hence, I believe this code is
&gt; correct as is.

Oh I guess I mis-read the diff!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386833</commentid>
    <comment_count>14</comment_count>
      <attachid>330712</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-08 12:01:29 -0800</bug_when>
    <thetext>Comment on attachment 330712
proposed patch w/ 32-bit build fix.

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:110
&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt; 
&gt;&gt;&gt; This seems like the wrong place for the helper? It should be in the poisoned unique ptr header.
&gt;&gt; 
&gt;&gt; I disagree.  This is a special version of makePoisonedUnique (using CodeBlockPoison) only for use in this CodeBlock.cpp file.  Hence, this is the right place for it.
&gt; 
&gt; What I mean is that you can have a generic version to which you pass in the special bits, no?

I think the concern here is that these file specific versions may cause conflicts in our unified files build system.  I&apos;ll make these into static private methods of the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386834</commentid>
    <comment_count>15</comment_count>
      <attachid>330712</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-08 12:06:45 -0800</bug_when>
    <thetext>Comment on attachment 330712
proposed patch w/ 32-bit build fix.

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/assembler/MacroAssembler.h:1002
&gt;&gt;&gt;&gt; +    }
&gt;&gt;&gt; 
&gt;&gt;&gt; This always uses an extra scratch. It&apos;s convenient to type less, but is it something we usually do (as opposed to being explicit in code that it&apos;ll necessarily need a scratch)? At least in some WebAssembly cases we don&apos;t opt-in to that scratch being usable, so it would assert to use this xorPtr.
&gt;&gt; 
&gt;&gt; I&apos;ll see what I can do about this to make it give the option to pass in a scratch.  May leave as is for now.
&gt; 
&gt; Yeah checking this in for now is fine. I&apos;d put a FIXME with bug though.

I&apos;ll do this in a follow up.

&gt;&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1037
&gt;&gt;&gt;      loadp CodeBlock::m_vm[t1], t2
&gt;&gt; 
&gt;&gt; I think it would be nice to rename CodeBlock::m_vm to CodeBlock::m_PoisonedVm because places like this would be way more obvious. It&apos;s easy to miss an unpoison otherwise IMO.
&gt; 
&gt; I&apos;ll look into this.

I&apos;ll do this renaming in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386836</commentid>
    <comment_count>16</comment_count>
      <attachid>330720</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-08 12:10:27 -0800</bug_when>
    <thetext>Created attachment 330720
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386838</commentid>
    <comment_count>17</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-08 12:12:13 -0800</bug_when>
    <thetext>Attachment 330720 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:392:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:393:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/JSGlobalObject.cpp:191:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 3 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386840</commentid>
    <comment_count>18</comment_count>
      <attachid>330720</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-08 12:22:46 -0800</bug_when>
    <thetext>Comment on attachment 330720
patch for landing.

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:115
&gt; +        CodeBlock&amp; codeBlock;

style nit: We usually use pointers instead of references for heap cells.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386871</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-08 13:05:58 -0800</bug_when>
    <thetext>Landed in r226530: &lt;http://trac.webkit.org/r226530&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330132</attachid>
            <date>2017-12-22 11:12:08 -0800</date>
            <delta_ts>2018-01-05 17:20:01 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-181096.patch</filename>
            <type>text/plain</type>
            <size>44934</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDIyNjI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDYgKzY1MiwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHhvcjMyKGltbSwgc3JjRGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB4
b3JQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAg
ICAgIHhvcjMyKFRydXN0ZWRJbW0zMihpbW0pLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lk
IHhvclB0cihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgeG9y
MzIoc3JjLCBkZXN0KTsKQEAgLTk5MSw2ICs5OTYsMTEgQEAgcHVibGljOgogICAgICAgICB4b3I2
NChpbW0sIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgeG9yUHRyKFRydXN0ZWRJbW1QdHIg
aW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICB4b3I2NChUcnVzdGVkSW1t
NjQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkUHRyKEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBsb2FkNjQoYWRk
cmVzcywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMjI2MjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk5MSw2ICs5OTEsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAg
eworICAgICAgICB4b3I2NChpbW0sIHNyY0Rlc3QsIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZv
aWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgJKHJldmlzaW9uIDIyNjI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtODA5LDYgKzgwOSwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rl
c3QpOwogICAgIH0KIAorICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3RlcigpKTsK
KyAgICAgICAgeG9yNjQoc2NyYXRjaFJlZ2lzdGVyKCksIHNyY0Rlc3QpOworICAgIH0KKwogICAg
IHZvaWQgbm90NjQoUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIubm90cV9yKHNyY0Rlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNjI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsMTIgKzMw
NywxMiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgLCBt
X2lzQ29uc3RydWN0b3Iob3RoZXIubV9pc0NvbnN0cnVjdG9yKQogICAgICwgbV9pc1N0cmljdE1v
ZGUob3RoZXIubV9pc1N0cmljdE1vZGUpCiAgICAgLCBtX2NvZGVUeXBlKG90aGVyLm1fY29kZVR5
cGUpCi0gICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgdGhpcywgb3RoZXIubV91bmxp
bmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIudm0oKSwgdGhpcywg
b3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9T
a2lwKG90aGVyLm1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgLCBtX2hhc0RlYnVnZ2Vy
U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJs
ZWQpCiAgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJsZSgq
b3RoZXIubV92bSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCisgICAgLCBt
X293bmVyRXhlY3V0YWJsZSgqb3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9ucyhv
dGhlci5tX2luc3RydWN0aW9ucykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1Jl
Z2lzdGVyKQpAQCAtMzI5LDYgKzMyOSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiAKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCiAgICAgLCBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiAgICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSkKKyAgICAsIG1fdW5jb25kaXRpb25hbEZpbmFs
aXplcihtYWtlUG9pc29uZWRVbmlxdWU8Q29kZUJsb2NrUG9pc29uLCBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyPigqdGhpcykpCisgICAgLCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIobWFrZVBvaXNv
bmVkVW5pcXVlPENvZGVCbG9ja1BvaXNvbiwgV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj4oKnRoaXMp
KQogewogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0gZmFsc2U7CiAKQEAgLTM4Nyw2
ICszODksOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAg
LCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcigwKQogICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9j
bG9jazo6bm93KCkpCisgICAgLCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIobWFrZVBvaXNvbmVk
VW5pcXVlPENvZGVCbG9ja1BvaXNvbiwgVW5jb25kaXRpb25hbEZpbmFsaXplcj4oKnRoaXMpKQor
ICAgICwgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyKG1ha2VQb2lzb25lZFVuaXF1ZTxDb2RlQmxv
Y2tQb2lzb24sIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI+KCp0aGlzKSkKIHsKICAgICBtX3Zpc2l0
V2Vha2x5SGFzQmVlbkNhbGxlZCA9IGZhbHNlOwogCkBAIC00MjIsMTkgKzQyNiwxOSBAQCBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVz
ZXNHbG9iYWxPYmplY3QoKSkKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCpt
X3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFu
dEluZGV4KCldLnNldCh2bSwgdGhpcywgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaSsrKSB7CiAgICAg
ICAgIExpbmtUaW1lQ29uc3RhbnQgdHlwZSA9IHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+
KGkpOwogICAgICAgICBpZiAodW5zaWduZWQgcmVnaXN0ZXJJbmRleCA9IHVubGlua2VkQ29kZUJs
b2NrLT5yZWdpc3RlckluZGV4Rm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSkKLSAgICAgICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCBtX2ds
b2JhbE9iamVjdC0+anNDZWxsRm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSk7CisgICAgICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZ2lzdGVySW5kZXhdLnNldCh2bSwgdGhpcywgbV9nbG9i
YWxPYmplY3QtPmpzQ2VsbEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpOwogICAgIH0KIAogICAg
IC8vIFdlIGFscmVhZHkgaGF2ZSB0aGUgY2xvbmVkIHN5bWJvbCB0YWJsZSBmb3IgdGhlIG1vZHVs
ZSBlbnZpcm9ubWVudCBzaW5jZSB3ZSBuZWVkIHRvIGluc3RhbnRpYXRlCiAgICAgLy8gdGhlIG1v
ZHVsZSBlbnZpcm9ubWVudHMgYmVmb3JlIGxpbmtpbmcgdGhlIGNvZGUgYmxvY2suIFdlIHJlcGxh
Y2UgdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUgd2l0aCB0aGUgYWxyZWFkeSBjbG9uZWQgb25lLgog
ICAgIGlmIChVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayA9IGpzRHluYW1pY0Nhc3Q8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKj4odm0sIHVubGlua2VkQ29kZUJsb2NrKSkgewogICAgICAgICBTeW1ib2xUYWJsZSogY2xv
bmVkU3ltYm9sVGFibGUgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUpLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCk7Ci0gICAgICAgIGlmICht
X3ZtLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkpIHsK
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2xvbmVkU3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICBjbG9uZWRTeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQ
cm9maWxpbmcobG9ja2VyKTsKICAgICAgICAgfQpAQCAtNDQ3LDcgKzQ1MSw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5j
dGlvbkRlY2woaSk7CiAgICAgICAgIGlmIChzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUpCiAgICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0
VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHNbaV0uc2V0
KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0
YWJsZS0+c291cmNlKCkpKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCh2bSwgdGhp
cywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKHZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgp
KSk7CiAgICAgfQogCiAgICAgbV9mdW5jdGlvbkV4cHJzID0gUmVmQ291bnRlZEFycmF5PFdyaXRl
QmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZG
dW5jdGlvbkV4cHJzKCkpOwpAQCAtNDU1LDcgKzQ1OSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7
CiAgICAgICAgIGlmIChzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUpCiAgICAg
ICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJh
bmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBl
UHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5n
RW5kT2Zmc2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3ZtLCB0aGlz
LCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNl
KCkpKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCh2bSwgdGhpcywgdW5saW5rZWRF
eGVjdXRhYmxlLT5saW5rKHZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CiAgICAgfQog
CiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT5oYXNSYXJlRGF0YSgpKSB7CkBAIC04NDgsOCAr
ODUyLDkgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogCiBDb2Rl
QmxvY2s6On5Db2RlQmxvY2soKQogewotICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIpKQotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5vdGlm
eURlc3RydWN0aW9uKHRoaXMpOworICAgIFZNJiB2bSA9ICptX3ZtOworICAgIGlmIChVTkxJS0VM
WSh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKQorICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPm5vdGlmeURlc3RydWN0aW9uKHRoaXMpOwogCiAgICAgaWYgKHVubGlua2VkQ29kZUJs
b2NrKCktPmRpZE9wdGltaXplKCkgPT0gTWl4ZWRUcmlTdGF0ZSkKICAgICAgICAgdW5saW5rZWRD
b2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoRmFsc2VUcmlTdGF0ZSk7CkBAIC05MDQsMzcgKzkw
OSwzOCBAQCB2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0CiAKIHZvaWQg
Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVy
PFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCptX3ZtKTsKKyAgICBWTSYgdm0gPSAqbV92bTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgQVNTRVJUKGNvbnN0YW50
cy5zaXplKCkgPT0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNpemUoKSk7CiAg
ICAgc2l6ZV90IGNvdW50ID0gY29uc3RhbnRzLnNpemUoKTsKICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKLSAgICBib29sIGhhc1R5cGVQcm9maWxlciA9ICEhbV92
bS0+dHlwZVByb2ZpbGVyKCk7CisgICAgYm9vbCBoYXNUeXBlUHJvZmlsZXIgPSAhIXZtLnR5cGVQ
cm9maWxlcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAg
ICAgICBKU1ZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRzW2ldLmdldCgpOwogCiAgICAgICAgIGlm
ICghY29uc3RhbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KCptX3ZtLCBjb25zdGFudCkp
IHsKKyAgICAgICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWND
YXN0PFN5bWJvbFRhYmxlKj4odm0sIGNvbnN0YW50KSkgewogICAgICAgICAgICAgICAgIGlmICho
YXNUeXBlUHJvZmlsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgc3ltYm9s
VGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIGNsb25lID0gc3ltYm9sVGFibGUtPmNs
b25lU2NvcGVQYXJ0KCptX3ZtKTsKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogY2xvbmUg
PSBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQodm0pOwogICAgICAgICAgICAgICAgIGlmICh3
YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCiAgICAgICAgICAgICAgICAgICAgIGNs
b25lLT5zZXRSYXJlRGF0YUNvZGVCbG9jayh0aGlzKTsKIAogICAgICAgICAgICAgICAgIGNvbnN0
YW50ID0gY2xvbmU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzVGVtcGxhdGVSZWdpc3RyeUtl
eSgqbV92bSwgY29uc3RhbnQpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVGVtcGxhdGVS
ZWdpc3RyeUtleSh2bSwgY29uc3RhbnQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byogdGVtcGxh
dGVPYmplY3QgPSBnbG9iYWxPYmplY3QtPnRlbXBsYXRlUmVnaXN0cnkoKS5nZXRUZW1wbGF0ZU9i
amVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Kj4oY29uc3RhbnQpKTsKICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnN0YW50ID0gdGVtcGxhdGVPYmplY3Q7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywg
Y29uc3RhbnQpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCh2bSwgdGhpcywg
Y29uc3RhbnQpOwogICAgIH0KIAogICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uID0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwpAQCAtOTg0LDcgKzk5MCw3
IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYKICAgICAvLyBhbmQg
amV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0
IG9uZSBvZiB0aG9zZSB0aGluZ3MKICAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAx
LiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CiAgICAg
Ly8gZmlndXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRv
ci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwor
ICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihtX3VuY29uZGl0aW9uYWxGaW5h
bGl6ZXIuZ2V0KCkpOwogCiAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTk2LDcgKzEwMDIsNyBAQCB2b2lkIENvZGVCbG9j
azo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3Mg
dGhhdCB3ZSB1c2Ugd2VhayByZWZlcmVuY2UgaGFydmVzdGVycyBmb3I6IERGRyBmaXhwb2ludCBm
b3IKICAgICAvLyBqZXR0aXNvbmluZywgYW5kIHRyeWluZyB0byBmaW5kIHN0cnVjdHVyZXMgdGhh
dCB3b3VsZCBiZSBsaXZlIGJhc2VkIG9uIHNvbWUKICAgICAvLyBpbmxpbmUgY2FjaGUuIFNvIGl0
IG1ha2VzIHNlbnNlIHRvIHJlZ2lzdGVyIHRoZW0gcmVnYXJkbGVzcy4KLSAgICB2aXNpdG9yLmFk
ZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoJm1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CisgICAg
dmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKG1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ci5nZXQoKSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBXZSBnZXQgaGVyZSBpZiB3
ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0IG91ciBvd25lciBleGVjdXRhYmxlIGlzIGxpdmUs
CkBAIC0xMDQwLDcgKzEwNDYsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvCiAgICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2Fu
dGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzCiAgICAgLy8gaXMgcHJvYmFi
bHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdCBhbmQgd2hl
biBpdCBydW5zLCBpdAogICAgIC8vIGZpZ3VyZXMgb3V0IHdoZXRoZXIgaXQgaGFzIGFueSB3b3Jr
IHRvIGRvLgotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmbV91bmNvbmRp
dGlvbmFsRmluYWxpemVyKTsKKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIo
bV91bmNvbmRpdGlvbmFsRmluYWxpemVyLmdldCgpKTsKIAogICAgIGlmIChDb2RlQmxvY2sqIG90
aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG90aGVyQmxvY2spOwpAQCAtMTE1Niw2ICsxMTYyLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgIGlmIChtX2FsbFRyYW5z
aXRpb25zSGF2ZUJlZW5NYXJrZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIFZNJiB2bSA9ICpt
X3ZtOwogICAgIGJvb2wgYWxsQXJlTWFya2VkU29GYXIgPSB0cnVlOwogICAgICAgICAKICAgICBp
ZiAoaml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspIHsKQEAgLTExNjksOSAr
MTE3Niw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAg
ICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8ICFuZXdTdHJ1Y3R1cmVJRCkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUgPQotICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQob2xkU3RydWN0dXJlSUQpOworICAgICAgICAgICAgICAgICAgICB2bS5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0KLSAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgICAgICAgICAg
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAg
ICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgICAgIGVsc2UKQEAgLTEyNzQsMTIgKzEyODEsOCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJt
aW5lTGl2ZW5lc3MoY29uc3QgCiAKIHZvaWQgQ29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVz
dGVyOjp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0KLSAgICAgICAgYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAot
ICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikpOwotICAgIAotICAgIGNvZGVCbG9j
ay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2aXNpdG9yKTsKLSAg
ICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRv
cik7CisgICAgY29kZUJsb2NrLnByb3BhZ2F0ZVRyYW5zaXRpb25zKE5vTG9ja2luZ05lY2Vzc2Fy
eSwgdmlzaXRvcik7CisgICAgY29kZUJsb2NrLmRldGVybWluZUxpdmVuZXNzKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdmlzaXRvcik7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJ
ZENhY2hlKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTEyOTIsNiArMTI5NSw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENhY2hlKEkKIAogdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogeworICAgIFZNJiB2bSA9ICptX3ZtOwogICAg
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91
bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChzaXpl
X3Qgc2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmluc3Ry
dWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKQEAgLTEzMDAsNyArMTMw
NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9hZDoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRf
dW5zZXQ6IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gY3VySW5z
dHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJl
SUQgfHwgSGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9s
ZFN0cnVjdHVyZUlEKSkpCisgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6
OmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHJvcGVy
dHkgYWNjZXNzLlxuIik7CkBAIC0xMzExLDggKzEzMTUsOCBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1
cmVJRCA9IGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7CiAgICAgICAgICAgICBTdHJ1
Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQ7
CiAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBjdXJJbnN0cnVjdGlvbls3XS51
LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQg
fHwgSGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKSkpICYmCi0gICAgICAgICAgICAgICAgKCFuZXdTdHJ1Y3R1cmVJRCB8fCBIZWFw
Ojppc01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJl
SUQpKSkgJiYKKyAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFy
a2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKSAmJgor
ICAgICAgICAgICAgICAgICghbmV3U3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQodm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKSkpICYmCiAgICAgICAgICAg
ICAgICAgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChjaGFpbikpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKQEAgLTE0MTQs
MjUgKzE0MTgsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgog
CiB2b2lkIENvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKQogewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYml0d2lzZV9jYXN0PENv
ZGVCbG9jayo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7Ci0gICAgCi0gICAg
Y29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgIGNvZGVCbG9jay51cGRhdGVB
bGxQcmVkaWN0aW9ucygpOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWQoY29kZUJsb2Nr
KSkgewotICAgICAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVy
ZW5jZSgpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25EdWVUb1dlYWtSZWZlcmVuY2UpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWQoJmNvZGVCbG9j
aykpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay5zaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVy
ZW5jZSgpKQorICAgICAgICAgICAgY29kZUJsb2NrLmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNv
bkR1ZVRvV2Vha1JlZmVyZW5jZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVCbG9j
ay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpOworICAgICAgICAgICAg
Y29kZUJsb2NrLmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplTExJbnRJ
bmxpbmVDYWNoZXMoKTsKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNvZGVC
bG9jay5qaXRUeXBlKCkpKQorICAgICAgICBjb2RlQmxvY2suZmluYWxpemVMTEludElubGluZUNh
Y2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoISFjb2RlQmxvY2stPmppdENvZGUo
KSkKLSAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7
CisgICAgaWYgKCEhY29kZUJsb2NrLmppdENvZGUoKSkKKyAgICAgICAgY29kZUJsb2NrLmZpbmFs
aXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogfQogCkBAIC0xOTU0LDYgKzE5
NTUsNyBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgfQog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCisgICAgVk0mIHZtID0gKm1fdm07CiAgICAgRGVm
ZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8g
YWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6CkBAIC0xOTcwLDcgKzE5NzIsNyBAQCB2b2lkIENv
ZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgICAgIC8vIFRoaXMgYWNjb21w
bGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBp
dCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KICAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1v
bigpLT5pbnZhbGlkYXRlKCkpIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBp
bnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1l
bnQoKSB8fCAobV92bS0+aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhlYXA6OmlzTWFy
a2VkKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3ko
KSAmJiAhSGVhcDo6aXNNYXJrZWQob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkpKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDAyLDEyICsyMDA0LDExIEBAIHZv
aWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKIAogICAgIC8vIEpldHRpc29u
IGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwgY29kZSB0byBh
IGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgYSBkZWFkIG9i
amVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCi0gICAgaWYgKG1fdm0tPmhlYXAuaXNDdXJyZW50
VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkp
CisgICAgaWYgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtl
ZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRo
aXMgYWNjb21wbGlzaGVzICgyKS4KLSAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFs
bENvZGUoCi0gICAgICAgICptX3ZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFs
aXphdGlvbktpbmQoKSk7CisgICAgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmluc3RhbGxDb2Rl
KHZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHko
KSkKQEAgLTI3NjIsMTggKzI3NjMsMTkgQEAgaW50IENvZGVCbG9jazo6c3RhY2tQb2ludGVyT2Zm
c2V0KCkKIAogc2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKIHsK
KyAgICBWTSogdm0gPSBtX3ZtLnVucG9pc29uZWQoKTsKICAgICAvLyBUaGlzIHdpbGwgYmUgY2Fs
bGVkIGZyb20gQ29kZUJsb2NrOjpDb2RlQmxvY2sgYmVmb3JlIGVpdGhlciBtX3ZtIG9yIHRoZQog
ICAgIC8vIGluc3RydWN0aW9ucyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuIEl0J3MgT0sgdG8gcmV0
dXJuIDAgYmVjYXVzZSB3aGF0IHdpbGwgcmVhbGx5CiAgICAgLy8gbWF0dGVyIGlzIHRoZSByZWNv
bXB1dGF0aW9uIG9mIHRoaXMgdmFsdWUgd2hlbiB0aGUgc2xvdyBwYXRoIGlzIHRyaWdnZXJlZC4K
LSAgICBpZiAoIW1fdm0pCisgICAgaWYgKCF2bSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0g
ICAgaWYgKCEqbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5l
SklUKQorICAgIGlmICghKnZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFz
ZWxpbmVKSVQpCiAgICAgICAgIHJldHVybiAwOyAvLyBJdCdzIGFzIGdvb2Qgb2YgYSBwcmVkaWN0
aW9uIGFzIHdlJ2xsIGdldC4KICAgICAKICAgICAvLyBCZSBjb25zZXJ2YXRpdmU6IHJldHVybiBh
IHNpemUgdGhhdCB3aWxsIGJlIGFuIG92ZXJlc3RpbWF0aW9uIDg0JSBvZiB0aGUgdGltZS4KLSAg
ICBkb3VibGUgbXVsdGlwbGllciA9IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdv
cmRGb3JCYXNlbGluZUpJVC0+bWVhbigpICsKLSAgICAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRl
c1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5zdGFuZGFyZERldmlhdGlvbigpOworICAg
IGRvdWJsZSBtdWx0aXBsaWVyID0gdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRG
b3JCYXNlbGluZUpJVC0+bWVhbigpICsKKyAgICAgICAgdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsKICAgICAKICAg
ICAvLyBCZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGllcnMuIFNpbGVu
dGx5IGRvaW5nIHRoZSAid3JvbmciIHRoaW5nCiAgICAgLy8gaGVyZSBpcyBPSywgc2luY2UgdGhp
cyB3aG9sZSBtZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIyNjI0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29k
ZS5oIgogI2luY2x1ZGUgIkpJVE1hdGhJQ0ZvcndhcmRzLmgiCisjaW5jbHVkZSAiSlNDUG9pc29u
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJKdW1wVGFibGUuaCIKQEAgLTEwNiwxMiArMTA3LDE2IEBAIGNsYXNzIENvZGVCbG9j
ayA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCisgICAgc3RydWN0
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxp
emVyIHsKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcihDb2RlQmxvY2smIGNvZGVCbG9j
aykgOiBjb2RlQmxvY2soY29kZUJsb2NrKSB7IH0KICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgICAgICBDb2RlQmxvY2smIGNvZGVCbG9jazsKICAg
ICB9OwogCi0gICAgY2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6Oldl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgeworICAgIHN0cnVjdCBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
IDogcHVibGljIEpTQzo6V2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7CisgICAgICAgIFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIoQ29kZUJsb2NrJiBjb2RlQmxvY2spIDogY29kZUJsb2NrKGNvZGVCbG9j
aykgeyB9CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpIG92
ZXJyaWRlOworICAgICAgICBDb2RlQmxvY2smIGNvZGVCbG9jazsKICAgICB9OwogCiBwdWJsaWM6
CkBAIC0zNjEsNyArMzY2LDcgQEAgcHVibGljOgogICAgIEV4ZWN1dGFibGVCYXNlKiBvd25lckV4
ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQogICAg
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4obV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpOyB9CiAK
LSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CisgICAgVk0qIHZtKCkgY29uc3Qg
eyByZXR1cm4gbV92bS51bnBvaXNvbmVkKCk7IH0KIAogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVn
aXN0ZXI7IH0KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1
cm4gbV90aGlzUmVnaXN0ZXI7IH0KQEAgLTg5NSw2ICs5MDAsOCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNUYWls
Q2FsbHMoKTsgfQogCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19wb2lzb24gPSBt
YWtlUG9pc29uKENvZGVCbG9ja1BvaXNvbik7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFs
aXplTExJbnRJbmxpbmVDYWNoZXMoKTsKICAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxp
bmVDYWNoZXMoKTsKQEAgLTk2NiwyMSArOTczLDIxIEBAIHByaXZhdGU6CiAgICAgICAgIH07CiAg
ICAgfTsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZUJhc2U+IG1fb3duZXJFeGVjdXRhYmxl
OwotICAgIFZNKiBtX3ZtOworICAgIENvbnN0RXhwclBvaXNvbmVkPENvZGVCbG9ja1BvaXNvbiwg
Vk0qPiBtX3ZtOwogCiAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBtX2luc3RydWN0
aW9uczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKICAgICBtdXRhYmxlIENvZGVCbG9ja0hhc2ggbV9oYXNo
OwogCi0gICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKKyAgICBQb2lzb25lZFJl
ZlB0cjxDb2RlQmxvY2tQb2lzb24sIFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKICAgICB1bnNp
Z25lZCBtX3NvdXJjZU9mZnNldDsKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNl
dDsKIAogICAgIFJlZkNvdW50ZWRBcnJheTxMTEludENhbGxMaW5rSW5mbz4gbV9sbGludENhbGxM
aW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBCYXNp
Y1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdMTEludENhbGxz
OwogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFw
OwotICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgUG9pc29uZWRSZWZQdHI8Q29k
ZUJsb2NrUG9pc29uLCBKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IG1fY2FsbGVlU2F2ZVJlZ2lzdGVy
czsKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwpAQCAtMTAzMSw4ICsx
MDM4LDggQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJl
RGF0YTsKIAotICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxp
emVyOwotICAgIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVy
OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPENvZGVCbG9ja1BvaXNvbiwgVW5jb25kaXRpb25hbEZp
bmFsaXplcj4gbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOworICAgIFBvaXNvbmVkVW5pcXVlUHRy
PENvZGVCbG9ja1BvaXNvbiwgV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj4gbV93ZWFrUmVmZXJlbmNl
SGFydmVzdGVyOwogfTsKIAogaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oCShyZXZpc2lvbiAyMjYyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2
ICs4Nyw3IEBAIHZvaWQgYWRqdXN0RnJhbWVBbmRTdGFja0luT1NSRXhpdENvbXBpbGUKICAgICAv
LyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBTUCBpcyBjb3JyZWN0IGluIGNhc2Ugb2YgYW4gZXhjZXB0
aW9uLgogICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6OmppdENv
ZGVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQueG9yUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKENvZGVCbG9jazo6c19wb2lzb24pLCBHUFJJbmZvOjpyZWdUMCk7
CiAgICAgaml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpJVENvZGVUeXBl
Ojpjb21tb25EYXRhT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgaml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29tbW9uRGF0YTo6ZnJhbWVS
ZWdpc3RlckNvdW50T2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgLy8gVGhpcyBkb2Vz
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudCAtIDEpKnNpemVvZihS
ZWdpc3Rlcikgd2hlcmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjI2MjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTQ4Miw2ICs0ODIsNyBAQCBlbmQKIG1hY3JvIHN0cnVjdHVyZUlEVG9TdHJ1
Y3R1cmVXaXRoU2NyYXRjaChzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUsIHNjcmF0Y2gpCiAgICAg
bG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHNjcmF0Y2gKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1b
c2NyYXRjaF0sIHNjcmF0Y2gKKyAgICB1bnBvaXNvbkNvZGVCbG9jayhzY3JhdGNoKQogICAgIGxv
YWRwIFZNOjpoZWFwICsgSGVhcDo6bV9zdHJ1Y3R1cmVJRFRhYmxlICsgU3RydWN0dXJlSURUYWJs
ZTo6bV90YWJsZVtzY3JhdGNoXSwgc2NyYXRjaAogICAgIGxvYWRwIFtzY3JhdGNoLCBzdHJ1Y3R1
cmVJRFRoZW5TdHJ1Y3R1cmUsIDhdLCBzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUKIGVuZApAQCAt
NDk1LDYgKzQ5Niw3IEBAIG1hY3JvIGxvYWRTdHJ1Y3R1cmVBbmRDbG9iYmVyRmlyc3RBcmcoY2UK
ICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbY2VsbF0sIHN0cnVjdHVyZQogICAgIGxv
YWRwIENvZGVCbG9ja1tjZnJdLCBjZWxsCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW2NlbGxd
LCBjZWxsCisgICAgdW5wb2lzb25Db2RlQmxvY2soY2VsbCkKICAgICBsb2FkcCBWTTo6aGVhcCAr
IEhlYXA6Om1fc3RydWN0dXJlSURUYWJsZSArIFN0cnVjdHVyZUlEVGFibGU6Om1fdGFibGVbY2Vs
bF0sIGNlbGwKICAgICBsb2FkcCBbY2VsbCwgc3RydWN0dXJlLCA4XSwgc3RydWN0dXJlCiBlbmQK
QEAgLTI0OTUsNiArMjQ5Nyw3IEBAIF9sbGludF9vcF9wcm9maWxlX3R5cGU6CiAgICAgdHJhY2VF
eGVjdXRpb24oKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAgIGxvYWRwIENvZGVC
bG9jazo6bV92bVt0MV0sIHQxCisgICAgdW5wb2lzb25Db2RlQmxvY2sodDEpCiAgICAgIyB0MSBp
cyBob2xkaW5nIHRoZSBwb2ludGVyIHRvIHRoZSB0eXBlUHJvZmlsZXJMb2cuCiAgICAgbG9hZHAg
Vk06Om1fdHlwZVByb2ZpbGVyTG9nW3QxXSwgdDEKICAgICAjIHQyIGlzIGhvbGRpbmcgdGhlIHBv
aW50ZXIgdG8gdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjI2
MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDggQEAgZWxzZQogICAgIGNvbnN0IExv
d2VzdFRhZyA9IERlbGV0ZWRWYWx1ZVRhZwogZW5kCiAKK2NvbnN0IENvZGVCbG9ja1BvaXNvbiA9
IGNvbnN0ZXhwciBDb2RlQmxvY2s6OnNfcG9pc29uCisKICMgUHV0QnlJZEZsYWdzIGRhdGEKIGNv
bnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSBjb25zdGV4cHIgUHV0QnlJZFByaW1hcnlUeXBl
TWFzawogY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gY29uc3RleHByIFB1dEJ5
SWRQcmltYXJ5VHlwZVNlY29uZGFyeQpAQCAtNzUyLDYgKzc1NCwxMCBAQCBtYWNybyBwcmVzZXJ2
ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoZGVzCiAgICAgZW5kCiBlbmQKIAorbWFjcm8gdW5wb2lz
b25Db2RlQmxvY2soY2IpCisgICAgeG9ycCBDb2RlQmxvY2tQb2lzb24sIGNiCitlbmQKKwogbWFj
cm8gZnVuY3Rpb25Qcm9sb2d1ZSgpCiAgICAgaWYgWDg2IG9yIFg4Nl9XSU4gb3IgWDg2XzY0IG9y
IFg4Nl82NF9XSU4KICAgICAgICAgcHVzaCBjZnIKQEAgLTEwMjQsNiArMTAzMCw3IEBAIG1hY3Jv
IHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBzdWJwIGNmciwgdDAsIHQw
CiAgICAgYnBhIHQwLCBjZnIsIC5uZWVkU3RhY2tDaGVjawogICAgIGxvYWRwIENvZGVCbG9jazo6
bV92bVt0MV0sIHQyCisgICAgdW5wb2lzb25Db2RlQmxvY2sodDIpCiAgICAgaWYgQ19MT09QCiAg
ICAgICAgIGJwYmVxIFZNOjptX2Nsb29wU3RhY2tMaW1pdFt0Ml0sIHQwLCAuc3RhY2tIZWlnaHRP
SwogICAgIGVsc2UKQEAgLTE2MTEsNiArMTYxOCw3IEBAIF9sbGludF9vcF9jaGVja190cmFwczoK
ICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCiAgICAg
bG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICB1bnBvaXNvbkNvZGVCbG9jayh0MSkK
ICAgICBsb2FkYiBWTTo6bV90cmFwcytWTVRyYXBzOjptX25lZWRUcmFwSGFuZGxpbmdbdDFdLCB0
MAogICAgIGJ0cG56IHQwLCAuaGFuZGxlVHJhcHMKIC5hZnRlckhhbmRsaW5nVHJhcHM6CkBAIC0x
NjI2LDYgKzE2MzQsNyBAQCBfbGxpbnRfb3BfY2hlY2tfdHJhcHM6CiBtYWNybyBhY3F1aXJlU2hh
ZG93Q2hpY2tlblBhY2tldChzbG93KQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAg
IGxvYWRwIENvZGVCbG9jazo6bV92bVt0MV0sIHQxCisgICAgdW5wb2lzb25Db2RlQmxvY2sodDEp
CiAgICAgbG9hZHAgVk06Om1fc2hhZG93Q2hpY2tlblt0MV0sIHQyCiAgICAgbG9hZHAgU2hhZG93
Q2hpY2tlbjo6bV9sb2dDdXJzb3JbdDJdLCB0MAogICAgIGJwYWVxIHQwLCBTaGFkb3dDaGlja2Vu
OjptX2xvZ0VuZFt0Ml0sIHNsb3cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
VW5saW5rZWRTb3VyY2VDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAkocmV2aXNpb24gMjI2MjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkpTQ1BvaXNv
bi5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCkBAIC05OCw5ICs5OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQgLSBtX3N0YXJ0T2Zmc2V0OyB9CiAKICAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIC8vIEZJWE1FOiBNYWtlIGl0IFJlZjxTb3VyY2VQcm92aWRpZXI+
LgorICAgICAgICAvLyBGSVhNRTogTWFrZSBpdCBQb2lzb25lZFJlZjxTb3VyY2VQcm92aWRpZXI+
LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4
MzI1Ci0gICAgICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9wcm92aWRlcjsKKyAgICAgICAg
UG9pc29uZWRSZWZQdHI8U291cmNlUHJvdmlkZXJQb2lzb24sIFNvdXJjZVByb3ZpZGVyPiBtX3By
b3ZpZGVyOwogICAgICAgICBpbnQgbV9zdGFydE9mZnNldDsKICAgICAgICAgaW50IG1fZW5kT2Zm
c2V0OwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lz
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lz
b24uaAkocmV2aXNpb24gMjI2MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDUG9pc29uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogCiBlbnVtIFBvaXNvbiB7CiAgICAgTm90UG9pc29uZWQgPSAwLAotICAgIFRyYW5zaXRp
b25NYXBQb2lzb24sCi0gICAgV2Vha0ltcGxQb2lzb24sCisgICAgQ29kZUJsb2NrUG9pc29uLAor
ICAgIEpTR2xvYmFsT2JqZWN0UG9pc29uLAorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lz
b24sCisgICAgU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzUG9pc29uLAorICAgIFNjcmlwdEZldGNoZXJQ
b2lzb24sCisgICAgU291cmNlUHJvdmlkZXJQb2lzb24sCisgICAgU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlUG9pc29uLAogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAy
MjYyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cywgdHlwZW5hbWUg
RW5hYmxlID0gdm9pZD4KK0pTR2xvYmFsT2JqZWN0OjpQb2lzb25lZFVuaXF1ZVB0cjxUPiBtYWtl
UG9pc29uZWRVbmlxdWUoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBX
VEY6Om1ha2VQb2lzb25lZFVuaXF1ZTxKU0dsb2JhbE9iamVjdFBvaXNvbiwgVD4oc3RkOjpmb3J3
YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7Cit9CisKIHN0YXRpYyBKU1ZhbHVlIGNyZWF0
ZVByb3h5UHJvcGVydHkoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWwgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwpAQCAtMzY5
LDggKzM3NSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgIG1fZGVi
dWdnZXIgPSAwOwogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0
SW5zcGVjdG9yQ29udHJvbGxlcj4oKnRoaXMpOwotICAgIG1faW5zcGVjdG9yRGVidWdnYWJsZSA9
IHN0ZDo6bWFrZV91bmlxdWU8SlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlPigqdGhpcyk7CisgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyID0gbWFrZVBvaXNvbmVkVW5pcXVlPEluc3BlY3Rvcjo6SlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyPigqdGhpcyk7CisgICAgbV9pbnNwZWN0b3JE
ZWJ1Z2dhYmxlID0gbWFrZVBvaXNvbmVkVW5pcXVlPEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZT4o
KnRoaXMpOwogICAgIG1faW5zcGVjdG9yRGVidWdnYWJsZS0+aW5pdCgpOwogICAgIG1fY29uc29s
ZUNsaWVudCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y29uc29sZUNsaWVudCgpOwogI2VuZGlm
CkBAIC05NjAsNjMgKzk2Niw2MyBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVyCiAKICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
Y29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQoYXJyYXlJdGVyYXRvclByb3RvdHlw
ZSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5uZXh0KTsKLSAgICAgICAgICAgIG1fYXJyYXlJdGVyYXRv
clByb3RvdHlwZU5leHQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX2Fy
cmF5SXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9hcnJheUl0ZXJh
dG9yUHJvdG90eXBlTmV4dCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwg
bV9hcnJheUl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKICAgICAgICAgICAgIG1fYXJyYXlJ
dGVyYXRvclByb3RvdHlwZU5leHQtPmluc3RhbGwoKTsKICAgICAgICAgfQogICAgICAgICB7CiAg
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0
aXZlV2F0Y2hwb2ludCh0aGlzLT5hcnJheVByb3RvdHlwZSgpLCBtX3ZtLnByb3BlcnR5TmFtZXMt
Pml0ZXJhdG9yU3ltYm9sKTsKLSAgICAgICAgICAgIG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJdGVy
YXRvcldhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX2Fy
cmF5SXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9hcnJheVByb3Rv
dHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQ
cm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0s
IGNvbmRpdGlvbiwgbV9hcnJheUl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKICAgICAgICAg
ICAgIG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQtPmluc3RhbGwoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1hcEl0ZXJhdG9yUHJvdG90
eXBlLCBtX3ZtLnByb3BlcnR5TmFtZXMtPm5leHQpOwotICAgICAgICAgICAgbV9tYXBJdGVyYXRv
clByb3RvdHlwZU5leHRXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0
eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRp
dGlvbiwgbV9tYXBJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CisgICAgICAgICAgICBtX21h
cEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2Jq
ZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+
KHZtLCBjb25kaXRpb24sIG1fbWFwSXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOwogICAgICAg
ICAgICAgbV9tYXBJdGVyYXRvclByb3RvdHlwZU5leHRXYXRjaHBvaW50LT5pbnN0YWxsKCk7CiAg
ICAgICAgIH0KICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
Y29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQobV9tYXBQcm90b3R5cGUuZ2V0KCks
IG1fdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOwotICAgICAgICAgICAgbV9tYXBQ
cm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2
bSwgY29uZGl0aW9uLCBtX21hcEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAg
ICAgIG1fbWFwUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVk
VW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNo
cG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50
KTsKICAgICAgICAgICAgIG1fbWFwUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50LT5p
bnN0YWxsKCk7CiAgICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChzZXRJdGVy
YXRvclByb3RvdHlwZSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5uZXh0KTsKLSAgICAgICAgICAgIG1f
c2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2Jq
ZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+
KHZtLCBjb25kaXRpb24sIG1fc2V0SXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAg
ICAgICAgbV9zZXRJdGVyYXRvclByb3RvdHlwZU5leHRXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVk
VW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNo
cG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX3NldEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50
KTsKICAgICAgICAgICAgIG1fc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludC0+aW5z
dGFsbCgpOwogICAgICAgICB9CiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1fc2V0UHJvdG90
eXBlLmdldCgpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKTsKLSAgICAgICAg
ICAgIG1fc2V0UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50ID0gc3RkOjptYWtlX3Vu
aXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBv
aW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7
CisgICAgICAgICAgICBtX3NldFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IG1h
a2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJ
bmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRJdGVyYXRvclByb3RvY29s
V2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX3NldFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0
Y2hwb2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAKICAgICAgICAgewogICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9p
bnQobV9zdHJpbmdJdGVyYXRvclByb3RvdHlwZS5nZXQoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5u
ZXh0KTsKLSAgICAgICAgICAgIG1fc3RyaW5nSXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2lu
dCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9p
bnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc3RyaW5nSXRlcmF0b3JQ
cm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9zdHJpbmdJdGVyYXRvclByb3RvdHlw
ZU5leHRXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVkVW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdl
QWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBt
X3N0cmluZ0l0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKICAgICAgICAgICAgIG1fc3RyaW5n
SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAg
ICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9
IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1fc3RyaW5nUHJvdG90eXBlLmdldCgpLCBtX3ZtLnBy
b3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKTsKLSAgICAgICAgICAgIG1fc3RyaW5nUHJvdG90
eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9w
ZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNv
bmRpdGlvbiwgbV9zdHJpbmdJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CisgICAgICAgICAg
ICBtX3N0cmluZ1Byb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IG1ha2VQb2lzb25l
ZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRj
aHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zdHJpbmdJdGVyYXRvclByb3RvY29sV2F0Y2hw
b2ludCk7CiAgICAgICAgICAgICBtX3N0cmluZ1Byb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hw
b2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAKICAgICAgICAgewogICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQo
bV9tYXBQcm90b3R5cGUuZ2V0KCksIG1fdm0ucHJvcGVydHlOYW1lcy0+c2V0KTsKLSAgICAgICAg
ICAgIG1fbWFwUHJvdG90eXBlU2V0V2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0
UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZt
LCBjb25kaXRpb24sIG1fbWFwU2V0V2F0Y2hwb2ludCk7CisgICAgICAgICAgICBtX21hcFByb3Rv
dHlwZVNldFdhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFu
Z2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24s
IG1fbWFwU2V0V2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX21hcFByb3RvdHlwZVNldFdhdGNo
cG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKICAgICAgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50
KG1fc2V0UHJvdG90eXBlLmdldCgpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPmFkZCk7Ci0gICAgICAg
ICAgICBtX3NldFByb3RvdHlwZUFkZFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2
bSwgY29uZGl0aW9uLCBtX3NldEFkZFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9zZXRQcm90
b3R5cGVBZGRXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVkVW5pcXVlPE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9u
LCBtX3NldEFkZFdhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9zZXRQcm90b3R5cGVBZGRXYXRj
aHBvaW50LT5pbnN0YWxsKCk7CiAgICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2lu
dChudW1iZXJQcm90b3R5cGUoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZyk7Ci0gICAg
ICAgICAgICBtX251bWJlclByb3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91
bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hw
b2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fbnVtYmVyVG9TdHJpbmdXYXRjaHBvaW50KTsKKyAg
ICAgICAgICAgIG1fbnVtYmVyUHJvdG90eXBlVG9TdHJpbmdXYXRjaHBvaW50ID0gbWFrZVBvaXNv
bmVkVW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdh
dGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX251bWJlclRvU3RyaW5nV2F0Y2hwb2ludCk7
CiAgICAgICAgICAgICBtX251bWJlclByb3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludC0+aW5zdGFs
bCgpOwogICAgICAgICAgICAgbV9udW1iZXJQcm90b1RvU3RyaW5nRnVuY3Rpb24uc2V0KHZtLCB0
aGlzLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KG51bWJlclByb3RvdHlwZSgpLT5nZXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDIy
NjI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCIKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCkBAIC00NSw2ICs0Niw3IEBACiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUG9pc29uZWRVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiAKIHN0cnVjdCBPcGFxdWVKU0NsYXNzOwpAQCAtMzkxLDkgKzM5Mywx
MSBAQCBwdWJsaWM6CiAKICAgICBWTSYgbV92bTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHVzaW5nIFBvaXNvbmVkVW5pcXVlUHRyID0gV1RGOjpQb2lzb25lZFVuaXF1ZVB0cjxKU0dsb2Jh
bE9iamVjdFBvaXNvbiwgVD47CisKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNHbG9iYWxP
YmplY3REZWJ1Z2dhYmxlPiBtX2luc3BlY3RvckRlYnVnZ2FibGU7CisgICAgUG9pc29uZWRVbmlx
dWVQdHI8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5z
cGVjdG9yQ29udHJvbGxlcjsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxKU0dsb2JhbE9iamVjdERl
YnVnZ2FibGU+IG1faW5zcGVjdG9yRGVidWdnYWJsZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElO
VEwpCkBAIC00MjgsMTcgKzQzMiwxNyBAQCBwdWJsaWM6CiAgICAgSW5saW5lV2F0Y2hwb2ludFNl
dCBtX3NldEFkZFdhdGNocG9pbnQ7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FycmF5U3Bl
Y2llc1dhdGNocG9pbnQ7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX251bWJlclRvU3RyaW5n
V2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFw
dGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlQcm90b3R5cGVTeW1i
b2xJdGVyYXRvcldhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5
Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5SXRl
cmF0b3JQcm90b3R5cGVOZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNo
YW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9tYXBQcm90b3R5
cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFBy
b3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX21h
cEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9i
amVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+
PiBtX3NldFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hw
b2ludFNldD4+IG1fc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5l
V2F0Y2hwb2ludFNldD4+IG1fc3RyaW5nUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hw
b2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zdHJpbmdJdGVyYXRvclByb3RvdHlwZU5leHRX
YXRjaHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0
aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9tYXBQcm90b3R5cGVTZXRXYXRj
aHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zZXRQcm90b3R5cGVBZGRXYXRjaHBv
aW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0
Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9udW1iZXJQcm90b3R5cGVUb1N0cmluZ1dh
dGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFw
dGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlQcm90b3R5cGVTeW1i
b2xJdGVyYXRvcldhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVy
dHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlJ
dGVyYXRvclByb3RvdHlwZU5leHQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVy
dHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwUHJv
dG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9i
amVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+
PiBtX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlx
dWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hw
b2ludFNldD4+IG1fc2V0UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50OworICAgIFBv
aXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElu
bGluZVdhdGNocG9pbnRTZXQ+PiBtX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7
CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNo
cG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc3RyaW5nUHJvdG90eXBlU3ltYm9sSXRlcmF0
b3JXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdl
QWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX3N0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJv
cGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFw
UHJvdG90eXBlU2V0V2F0Y2hwb2ludDsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxPYmplY3RQcm9w
ZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zZXRQ
cm90b3R5cGVBZGRXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX251bWJl
clByb3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludDsKIAogICAgIGJvb2wgaXNBcnJheVByb3RvdHlw
ZUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogICAgIGJvb2wgaXNNYXBQ
cm90b3R5cGVJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaFBh
cmFtZXRlcnMuaAkocmV2aXNpb24gMjI2MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSAr
MjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNzEsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAg
ICBSZWY8U2NyaXB0RmV0Y2hQYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAgUG9pc29uZWRS
ZWY8U2NyaXB0RmV0Y2hQYXJhbWV0ZXJzUG9pc29uLCBTY3JpcHRGZXRjaFBhcmFtZXRlcnM+IG1f
cGFyYW1ldGVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmgJKHJldmlzaW9uIDIyNjI0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIkpTQ1BvaXNvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRGZXRjaGVyLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNzEsNyArNzMsNyBAQCBwcml2YXRlOgog
ICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8U2NyaXB0RmV0Y2hlcj4gbV9mZXRjaGVyOworICAg
IFBvaXNvbmVkUmVmUHRyPFNjcmlwdEZldGNoZXJQb2lzb24sIFNjcmlwdEZldGNoZXI+IG1fZmV0
Y2hlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJl
dmlzaW9uIDIyNjI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsOCArMTg3LDggQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTaW5nbGVTbG90VHJhbnNpdGlvbldl
YWtPd25lcjsKLSAgICB1c2luZyBQb2lzb25lZFRyYW5zaXRpb25NYXBQdHIgPSBDb25zdEV4cHJQ
b2lzb25lZDxUcmFuc2l0aW9uTWFwUG9pc29uLCBUcmFuc2l0aW9uTWFwKj47Ci0gICAgdXNpbmcg
UG9pc29uZWRXZWFrSW1wbFB0ciA9IENvbnN0RXhwclBvaXNvbmVkPFdlYWtJbXBsUG9pc29uLCBX
ZWFrSW1wbCo+OworICAgIHVzaW5nIFBvaXNvbmVkVHJhbnNpdGlvbk1hcFB0ciA9IENvbnN0RXhw
clBvaXNvbmVkPFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZVBvaXNvbiwgVHJhbnNpdGlvbk1hcCo+
OworICAgIHVzaW5nIFBvaXNvbmVkV2Vha0ltcGxQdHIgPSBDb25zdEV4cHJQb2lzb25lZDxTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGVQb2lzb24sIFdlYWtJbXBsKj47CiAKICAgICBib29sIGlzVXNp
bmdTaW5nbGVTbG90KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMjI2MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZAogICAgIDogQmFzZSh2bSwgdm0ud2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2NvZGVCbG9jayhXVEZNb3Zl
KGNvZGVCbG9jaykpCiB7CisgICAgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyID0gUG9pc29uZWRV
bmlxdWVQdHI8SlNXZWJBc3NlbWJseUNvZGVCbG9ja1BvaXNvbiwgVW5jb25kaXRpb25hbEZpbmFs
aXplcj46OmNyZWF0ZSgqdGhpcyk7CisKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVk
IHRvIGRvIHRoaXMgc3luY2hyb25vdXNseS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTY3CiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNlcnZl
Q2FwYWNpdHkobV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CkBAIC05MiwxNSAr
OTQsMTMgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcgogCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIHZpc2l0b3Iu
YWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFsRmlu
YWxpemVyKTsKKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhpc09iamVj
dC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVyLmdldCgpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpCiB7Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGJpdHdp
c2VfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oCi0gICAgICAgIGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaywgbV91
bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSB0aGlzT2JqZWN0
LT5tX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCi0gICAgICAgICgqaXRl
ciktPnZpc2l0V2VhaygqdGhpc09iamVjdC0+dm0oKSk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBj
b2RlQmxvY2subV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQorICAgICAg
ICAoKml0ZXIpLT52aXNpdFdlYWsoKmNvZGVCbG9jay52bSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMjYyNDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJKU0Nl
bGwuaCIKICNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZS5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKICNpbmNs
dWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Q
b2lzb25lZFVuaXF1ZVB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtODYsMTMgKzg4LDE1
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBjbGFz
cyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFs
aXplciB7CisgICAgc3RydWN0IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpV
bmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcihK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrJiBjb2RlQmxvY2spIDogY29kZUJsb2NrKGNvZGVCbG9jaykg
eyB9CiAgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAg
ICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayYgY29kZUJsb2NrOwogICAgIH07CiAKICAgICBS
ZWY8V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPiBtX3dhc21Ub0pTRXhpdFN0dWJzOwotICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOworICAgIFBvaXNvbmVkVW5pcXVlUHRyPEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+IG1fdW5jb25k
aXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7
CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jh
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAyMjYyNDcp
CisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEz
IEBACiAjaWZuZGVmIEJhZ19oCiAjZGVmaW5lIEJhZ19oCiAKKyNpbmNsdWRlIDx3dGYvRHVtYlB0
clRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFB0clRyYWl0c1Rl
bXBsYXRlID0gRHVtYlB0clRyYWl0cz4KIGNsYXNzIEJhZyB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQmFnKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTQ5LDYgKzUwLDgg
QEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogbV9uZXh0IHsgbnVsbHB0ciB9OwogICAgIH07CiAg
ICAgCisgICAgdXNpbmcgUHRyVHJhaXRzID0gUHRyVHJhaXRzVGVtcGxhdGU8Tm9kZT47CisKIHB1
YmxpYzoKICAgICBCYWcoKQogICAgIHsKQEAgLTEyMSw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVu
ZCBjbGFzcyBXVEY6OkJhZzsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHRlbXBsYXRlPHR5
cGVuYW1lPiBjbGFzcz4gZnJpZW5kIGNsYXNzIFdURjo6QmFnOwogICAgICAgICBOb2RlKiBtX25v
ZGU7CiAgICAgfTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330617</attachid>
            <date>2018-01-05 17:20:01 -0800</date>
            <delta_ts>2018-01-07 18:06:43 -0800</delta_ts>
            <desc>work in progress for EWS testing.</desc>
            <filename>bug-181096.patch</filename>
            <type>text/plain</type>
            <size>71631</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDIyNjM0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDYgKzY1MiwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHhvcjMyKGltbSwgc3JjRGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB4
b3JQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAg
ICAgIHhvcjMyKFRydXN0ZWRJbW0zMihpbW0pLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lk
IHhvclB0cihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgeG9y
MzIoc3JjLCBkZXN0KTsKQEAgLTk5MSw2ICs5OTYsMTEgQEAgcHVibGljOgogICAgICAgICB4b3I2
NChpbW0sIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgeG9yUHRyKFRydXN0ZWRJbW1QdHIg
aW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICB4b3I2NChUcnVzdGVkSW1t
NjQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkUHRyKEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBsb2FkNjQoYWRk
cmVzcywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMjI2MzQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk5MSw2ICs5OTEsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAg
eworICAgICAgICB4b3I2NChpbW0sIHNyY0Rlc3QsIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZv
aWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgJKHJldmlzaW9uIDIyNjM0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtODA5LDYgKzgwOSwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rl
c3QpOwogICAgIH0KIAorICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3RlcigpKTsK
KyAgICAgICAgeG9yNjQoc2NyYXRjaFJlZ2lzdGVyKCksIHNyY0Rlc3QpOworICAgIH0KKwogICAg
IHZvaWQgbm90NjQoUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIubm90cV9yKHNyY0Rlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyMjYzNDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODA4LDcgKzE4MDgsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcFN0
cmluZ1N3CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBCeXRlY29kZUR1bXBlcjxC
bG9jaz46OmR1bXBCbG9jayhCbG9jayogYmxvY2ssIGNvbnN0IHR5cGVuYW1lIEJsb2NrOjpVbnBh
Y2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBT
dHViSW5mb01hcCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIGNhbGxMaW5rSW5m
b3MpCit2b2lkIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEJsb2NrKEJsb2NrKiBibG9jaywg
dHlwZW5hbWUgQmxvY2s6OlVucGFja2VkSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IFN0dWJJbmZvTWFwJiBzdHViSW5mb3MsIGNvbnN0IENhbGxMaW5r
SW5mb01hcCYgY2FsbExpbmtJbmZvcykKIHsKICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25Db3VudCA9
IDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5oCShyZXZpc2lvbiAyMjYzNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBCbG9jazo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rp
b247CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wQnl0ZWNvZGUoQmxvY2sqLCBQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNv
bnN0IFN0dWJJbmZvTWFwJiA9IFN0dWJJbmZvTWFwKCksIGNvbnN0IENhbGxMaW5rSW5mb01hcCYg
PSBDYWxsTGlua0luZm9NYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwg
Y29uc3QgdHlwZW5hbWUgQmxvY2s6OlVucGFja2VkSW5zdHJ1Y3Rpb25zJiwgUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2so
QmxvY2sqLCB0eXBlbmFtZSBCbG9jazo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmLCBQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgpLCBjb25zdCBDYWxsTGlu
a0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOwogCiBwcml2YXRlOgogICAgIEJ5dGVjb2Rl
RHVtcGVyKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2lu
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAJKHJldmlzaW9uIDIyNjM0OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmNvbXB1dGVLaQogdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1
bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGRhdGFMb2coIlxuRHVtcGluZyBieXRl
Y29kZSBsaXZlbmVzcyBmb3IgIiwgKmNvZGVCbG9jaywgIjpcbiIpOwotICAgIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsK
KyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgdW5zaWduZWQgaSA9IDA7CiAKICAgICB1bnNpZ25l
ZCBudW1iZXJPZkJsb2NrcyA9IG1fZ3JhcGguc2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAyMjYz
NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRnIKICAgICBVTlVTRURfUEFSQU0obG9ja2VyKTsKICNlbmRpZgogCi0g
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXg7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2Rl
SW5kZXg7CiAgICAgT3Bjb2RlSUQgb3AgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoaW5zdHJ1
Y3Rpb25bMF0udS5vcGNvZGUpOwogICAgIGlmIChvcCAhPSBvcF9jYWxsICYmIG9wICE9IG9wX2Nv
bnN0cnVjdCAmJiBvcCAhPSBvcF90YWlsX2NhbGwpCiAgICAgICAgIHJldHVybiBDYWxsTGlua1N0
YXR1cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDIyNjM0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsMTIgKzMwNywxMiBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2lzQ29uc3RydWN0
b3Iob3RoZXIubV9pc0NvbnN0cnVjdG9yKQogICAgICwgbV9pc1N0cmljdE1vZGUob3RoZXIubV9p
c1N0cmljdE1vZGUpCiAgICAgLCBtX2NvZGVUeXBlKG90aGVyLm1fY29kZVR5cGUpCi0gICAgLCBt
X3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgdGhpcywgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0
KCkpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV91bmxp
bmtlZENvZGUuZ2V0KCkpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZh
bHNlKQogICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCiAgICAgLCBt
X251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwg
dGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCisgICAgLCBtX293bmVyRXhlY3V0
YWJsZSgqb3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAg
ICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3Ry
dWN0aW9ucykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQpAQCAt
MzI5LDYgKzMyOSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiAK
ICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCiAgICAgLCBtX3Jlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyKDApCiAgICAgLCBtX2NyZWF0aW9uVGltZShNb25vdG9uaWNUaW1lOjpu
b3coKSkKKyAgICAsIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcihtYWtlUG9pc29uZWRVbmlxdWU8
Q29kZUJsb2NrUG9pc29uLCBVbmNvbmRpdGlvbmFsRmluYWxpemVyPigqdGhpcykpCisgICAgLCBt
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIobWFrZVBvaXNvbmVkVW5pcXVlPENvZGVCbG9ja1BvaXNv
biwgV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj4oKnRoaXMpKQogewogICAgIG1fdmlzaXRXZWFrbHlI
YXNCZWVuQ2FsbGVkID0gZmFsc2U7CiAKQEAgLTM4Nyw2ICszODksOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogICAgICwgbV9j
cmVhdGlvblRpbWUoTW9ub3RvbmljVGltZTo6bm93KCkpCisgICAgLCBtX3VuY29uZGl0aW9uYWxG
aW5hbGl6ZXIobWFrZVBvaXNvbmVkVW5pcXVlPENvZGVCbG9ja1BvaXNvbiwgVW5jb25kaXRpb25h
bEZpbmFsaXplcj4oKnRoaXMpKQorICAgICwgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyKG1ha2VQ
b2lzb25lZFVuaXF1ZTxDb2RlQmxvY2tQb2lzb24sIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI+KCp0
aGlzKSkKIHsKICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IGZhbHNlOwogCkBAIC00
MjIsMTkgKzQyNiwxOSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAKICAgICBpZiAo
dW5saW5rZWRDb2RlQmxvY2stPnVzZXNHbG9iYWxPYmplY3QoKSkKLSAgICAgICAgbV9jb25zdGFu
dFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50b0Nv
bnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7Cisg
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCh2bSwgdGhpcywgbV9nbG9iYWxPYmpl
Y3QuZ2V0KCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IExpbmtUaW1lQ29uc3Rh
bnRDb3VudDsgaSsrKSB7CiAgICAgICAgIExpbmtUaW1lQ29uc3RhbnQgdHlwZSA9IHN0YXRpY19j
YXN0PExpbmtUaW1lQ29uc3RhbnQ+KGkpOwogICAgICAgICBpZiAodW5zaWduZWQgcmVnaXN0ZXJJ
bmRleCA9IHVubGlua2VkQ29kZUJsb2NrLT5yZWdpc3RlckluZGV4Rm9yTGlua1RpbWVDb25zdGFu
dCh0eXBlKSkKLSAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnaXN0ZXJJbmRleF0u
c2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC0+anNDZWxsRm9yTGlua1RpbWVDb25zdGFu
dCh0eXBlKSk7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZ2lzdGVySW5kZXhd
LnNldCh2bSwgdGhpcywgbV9nbG9iYWxPYmplY3QtPmpzQ2VsbEZvckxpbmtUaW1lQ29uc3RhbnQo
dHlwZSkpOwogICAgIH0KIAogICAgIC8vIFdlIGFscmVhZHkgaGF2ZSB0aGUgY2xvbmVkIHN5bWJv
bCB0YWJsZSBmb3IgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBzaW5jZSB3ZSBuZWVkIHRvIGluc3Rh
bnRpYXRlCiAgICAgLy8gdGhlIG1vZHVsZSBlbnZpcm9ubWVudHMgYmVmb3JlIGxpbmtpbmcgdGhl
IGNvZGUgYmxvY2suIFdlIHJlcGxhY2UgdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUgd2l0aCB0aGUg
YWxyZWFkeSBjbG9uZWQgb25lLgogICAgIGlmIChVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2sqIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA9IGpzRHluYW1pY0Nhc3Q8VW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4odm0sIHVubGlua2VkQ29kZUJsb2NrKSkgewogICAg
ICAgICBTeW1ib2xUYWJsZSogY2xvbmVkU3ltYm9sVGFibGUgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUpLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRh
YmxlKCk7Ci0gICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBpZiAo
dm0udHlwZVByb2ZpbGVyKCkpIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY2xvbmVkU3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICBjbG9uZWRTeW1ib2xU
YWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKICAgICAgICAgfQpAQCAtNDQ3
LDcgKzQ1MSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAg
ICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVu
bGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CiAgICAgICAgIGlmIChzaG91bGRVcGRh
dGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUpCiAgICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291
cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwg
dW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBt
X2Z1bmN0aW9uRGVjbHNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxp
bmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKKyAgICAgICAgbV9mdW5jdGlv
bkRlY2xzW2ldLnNldCh2bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKHZtLCBvd25l
ckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CiAgICAgfQogCiAgICAgbV9mdW5jdGlvbkV4cHJzID0g
UmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkpOwpAQCAtNDU1LDcgKzQ1OSw3IEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJs
b2NrLT5mdW5jdGlvbkV4cHIoaSk7CiAgICAgICAgIGlmIChzaG91bGRVcGRhdGVGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUpCiAgICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUo
KS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5s
aW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRXhw
cnNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93
bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNl
dCh2bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKHZtLCBvd25lckV4ZWN1dGFibGUt
PnNvdXJjZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT5oYXNSYXJl
RGF0YSgpKSB7CkBAIC04NDgsOCArODUyLDkgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgUwogCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewotICAgIGlmIChVTkxJ
S0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKQotICAgICAgICBtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPm5vdGlmeURlc3RydWN0aW9uKHRoaXMpOworICAgIFZNJiB2bSA9ICpt
X3ZtOworICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKQorICAgICAg
ICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5vdGlmeURlc3RydWN0aW9uKHRoaXMpOwogCiAg
ICAgaWYgKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkgPT0gTWl4ZWRUcmlTdGF0
ZSkKICAgICAgICAgdW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoRmFsc2VUcmlT
dGF0ZSk7CkBAIC04NzEsNyArODc2LDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAv
LyBkZXN0cnVjdG9ycy4KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgZm9yIChCYWc8U3RydWN0dXJl
U3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyAr
K2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKSB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViID0gKml0ZXI7CiAg
ICAgICAgIHN0dWItPmFib3V0VG9EaWUoKTsKICAgICAgICAgc3R1Yi0+ZGVyZWYoKTsKQEAgLTkw
NCwzNyArOTA5LDM4IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXQK
IAogdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0
ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiB7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKm1fdm0pOworICAgIFZNJiB2bSA9ICpt
X3ZtOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBBU1NFUlQo
Y29uc3RhbnRzLnNpemUoKSA9PSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2l6
ZSgpKTsKICAgICBzaXplX3QgY291bnQgPSBjb25zdGFudHMuc2l6ZSgpOwogICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnMucmVzaXplVG9GaXQoY291bnQpOwotICAgIGJvb2wgaGFzVHlwZVByb2ZpbGVy
ID0gISFtX3ZtLT50eXBlUHJvZmlsZXIoKTsKKyAgICBib29sIGhhc1R5cGVQcm9maWxlciA9ICEh
dm0udHlwZVByb2ZpbGVyKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBjb25zdGFudHNbaV0uZ2V0KCk7CiAKICAg
ICAgICAgaWYgKCFjb25zdGFudC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4oKm1fdm0sIGNv
bnN0YW50KSkgeworICAgICAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpz
RHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPih2bSwgY29uc3RhbnQpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGhhc1R5cGVQcm9maWxlcikgewogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAg
ICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogY2xvbmUgPSBzeW1ib2xU
YWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxl
KiBjbG9uZSA9IHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCh2bSk7CiAgICAgICAgICAgICAg
ICAgaWYgKHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSkKICAgICAgICAgICAgICAg
ICAgICAgY2xvbmUtPnNldFJhcmVEYXRhQ29kZUJsb2NrKHRoaXMpOwogCiAgICAgICAgICAgICAg
ICAgY29uc3RhbnQgPSBjbG9uZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUZW1wbGF0ZVJl
Z2lzdHJ5S2V5KCptX3ZtLCBjb25zdGFudCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5KHZtLCBjb25zdGFudCkpIHsKICAgICAgICAgICAgICAgICBhdXRv
KiB0ZW1wbGF0ZU9iamVjdCA9IGdsb2JhbE9iamVjdC0+dGVtcGxhdGVSZWdpc3RyeSgpLmdldFRl
bXBsYXRlT2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU1RlbXBsYXRlUmVnaXN0cnlLZXkqPihjb25zdGFu
dCkpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgICAgICAgICAgICAgY29uc3RhbnQgPSB0ZW1wbGF0ZU9iamVjdDsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX3Zt
LCB0aGlzLCBjb25zdGFudCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KHZt
LCB0aGlzLCBjb25zdGFudCk7CiAgICAgfQogCiAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gPSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CkBAIC05ODQs
NyArOTkwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJgogICAg
IC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8g
YXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwogICAgIC8vIGlzIHByb2JhYmx5IHF1aXRlIGNs
b3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVucywg
aXQKICAgICAvLyBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KLSAg
ICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFs
aXplcik7CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKG1fdW5jb25kaXRp
b25hbEZpbmFsaXplci5nZXQoKSk7CiAKICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CkBAIC05OTYsNyArMTAwMiw3IEBAIHZvaWQg
Q29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYKICAgICAvLyBUaGVyZSBhcmUgdHdv
IHRoaW5ncyB0aGF0IHdlIHVzZSB3ZWFrIHJlZmVyZW5jZSBoYXJ2ZXN0ZXJzIGZvcjogREZHIGZp
eHBvaW50IGZvcgogICAgIC8vIGpldHRpc29uaW5nLCBhbmQgdHJ5aW5nIHRvIGZpbmQgc3RydWN0
dXJlcyB0aGF0IHdvdWxkIGJlIGxpdmUgYmFzZWQgb24gc29tZQogICAgIC8vIGlubGluZSBjYWNo
ZS4gU28gaXQgbWFrZXMgc2Vuc2UgdG8gcmVnaXN0ZXIgdGhlbSByZWdhcmRsZXNzLgotICAgIHZp
c2l0b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcigmbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVy
KTsKKyAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIobV93ZWFrUmVmZXJlbmNl
SGFydmVzdGVyLmdldCgpKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIFdlIGdldCBo
ZXJlIGlmIHdlJ3JlIGxpdmUgaW4gdGhlIHNlbnNlIHRoYXQgb3VyIG93bmVyIGV4ZWN1dGFibGUg
aXMgbGl2ZSwKQEAgLTEwNDAsNyArMTA0Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG8KICAgICAvLyBhbmQgamV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBv
ZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSB0aGluZ3MKICAgICAvLyBp
cyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0
IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CiAgICAgLy8gZmlndXJlcyBvdXQgd2hldGhlciBpdCBoYXMg
YW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZt
X3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZp
bmFsaXplcihtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIuZ2V0KCkpOwogCiAgICAgaWYgKENvZGVC
bG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQob3RoZXJCbG9jayk7CkBAIC0xMTU2LDYgKzExNjIs
NyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgaWYgKG1f
YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgVk0m
IHZtID0gKm1fdm07CiAgICAgYm9vbCBhbGxBcmVNYXJrZWRTb0ZhciA9IHRydWU7CiAgICAgICAg
IAogICAgIGlmIChqaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgewpAQCAt
MTE2OSw5ICsxMTc2LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNv
bgogICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlE
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICAgICAgICAgIHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQotICAgICAgICAgICAgICAgICAgICBtX3ZtLT5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOworICAgICAgICAgICAg
ICAgICAgICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwog
ICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQpAQCAtMTE4Niw3ICsxMTkzLDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoSklU
Q29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikKKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7
ICsraXRlcikKICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyICY9ICgqaXRlciktPnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpA
QCAtMTI3NCwxMiArMTI4MSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhj
b25zdCAKIAogdm9pZCBDb2RlQmxvY2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OnZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPQotICAgICAgICBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCi0gICAgICAgICAgICBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVyKSk7Ci0gICAgCi0gICAgY29kZUJsb2NrLT5wcm9wYWdhdGVU
cmFuc2l0aW9ucyhOb0xvY2tpbmdOZWNlc3NhcnksIHZpc2l0b3IpOwotICAgIGNvZGVCbG9jay0+
ZGV0ZXJtaW5lTGl2ZW5lc3MoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2aXNpdG9yKTsKKyAgICBjb2Rl
QmxvY2sucHJvcGFnYXRlVHJhbnNpdGlvbnMoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2aXNpdG9yKTsK
KyAgICBjb2RlQmxvY2suZGV0ZXJtaW5lTGl2ZW5lc3MoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2aXNp
dG9yKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmNsZWFyTExJbnRHZXRCeUlkQ2FjaGUoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMTI5Miw2ICsxMjk1LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmNsZWFyTExJbnRHZXRCeUlkQ2FjaGUoSQogCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTElu
dElubGluZUNhY2hlcygpCiB7CisgICAgVk0mIHZtID0gKm1fdm07CiAgICAgY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKTsKICAgICBmb3IgKHNpemVfdCBzaXplID0gcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewog
ICAgICAgICBJbnN0cnVjdGlvbiogY3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1dOwpAQCAtMTMwMCw3ICsxMzA0LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZQogICAgICAgICBjYXNlIG9wX2dldF9i
eV9pZF9wcm90b19sb2FkOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDogewogICAg
ICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls0XS51
LnN0cnVjdHVyZUlEOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFwOjpp
c01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQp
KSkKKyAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQodm0u
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBwcm9wZXJ0eSBhY2Nlc3MuXG4i
KTsKQEAgLTEzMTEsOCArMTMxNSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGUKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gY3VySW5z
dHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0
cnVjdHVyZUlEID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRDsKICAgICAgICAgICAg
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGN1ckluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hh
aW4uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01h
cmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpKSkg
JiYKLSAgICAgICAgICAgICAgICAoIW5ld1N0cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFya2VkKG1f
dm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCkpKSAmJgorICAg
ICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQodm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpICYmCisgICAgICAgICAgICAg
ICAgKCFuZXdTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpKSkgJiYKICAgICAgICAgICAgICAgICAoIWNoYWlu
IHx8IEhlYXA6OmlzTWFya2VkKGNoYWluKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQpAQCAtMTQwNSw3ICsxNDA5LDcgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgogICAgIGZvciAoYXV0byBp
dGVyID0gY2FsbExpbmtJbmZvc0JlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQogICAgICAgICAoKml0
ZXIpLT52aXNpdFdlYWsoKnZtKCkpOwogCi0gICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+
OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsK
KyAgICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVy
KSB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICoqaXRlcjsKICAgICAg
ICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcyh0aGlzKTsKICAgICB9CkBAIC0xNDE0LDI1
ICsxNDE4LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KIAog
dm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRp
b25hbGx5KCkKIHsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJpdHdpc2VfY2FzdDxDb2Rl
QmxvY2sqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZT
RVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcikpOwotICAgIAotICAgIGNv
ZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICBjb2RlQmxvY2sudXBkYXRlQWxs
UHJlZGljdGlvbnMoKTsKICAgICAKLSAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGNvZGVCbG9jaykp
IHsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVu
Y2UoKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9XZWFrUmVmZXJlbmNlKTsKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKCZjb2RlQmxvY2sp
KSB7CisgICAgICAgIGlmIChjb2RlQmxvY2suc2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVu
Y2UoKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25E
dWVUb1dlYWtSZWZlcmVuY2UpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlQmxvY2st
PmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKTsKKyAgICAgICAgICAgIGNv
ZGVCbG9jay5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGVzKCk7CisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChjb2RlQmxv
Y2suaml0VHlwZSgpKSkKKyAgICAgICAgY29kZUJsb2NrLmZpbmFsaXplTExJbnRJbmxpbmVDYWNo
ZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCEhY29kZUJsb2NrLT5qaXRDb2RlKCkp
Ci0gICAgICAgIGNvZGVCbG9jay0+ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwor
ICAgIGlmICghIWNvZGVCbG9jay5qaXRDb2RlKCkpCisgICAgICAgIGNvZGVCbG9jay5maW5hbGl6
ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIH0KIApAQCAtMTk1NCw2ICsxOTU1
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAorICAgIFZNJiB2bSA9ICptX3ZtOwogICAgIERlZmVy
R0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRvIGFj
Y29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgpAQCAtMTk3MCw3ICsxOTcyLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQogICAgICAgICAvLyBUaGlzIGFjY29tcGxp
c2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQg
aGFzIGFscmVhZHkgaGFwcGVuZWQuCiAgICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24o
KS0+aW52YWxpZGF0ZSgpKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52
YWxpZGF0ZWQuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50
KCkgfHwgKG1fdm0tPmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtl
ZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkg
JiYgIUhlYXA6OmlzTWFya2VkKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAwMiwxMiArMjAwNCwxMSBAQCB2b2lk
IENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAKICAgICAvLyBKZXR0aXNvbiBj
YW4gaGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8gYSBk
ZWFkIGV4ZWN1dGFibGUKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBvYmpl
Y3QgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgotICAgIGlmIChtX3ZtLT5oZWFwLmlzQ3VycmVudFRo
cmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkpKQor
ICAgIGlmICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQo
b3duZXJTY3JpcHRFeGVjdXRhYmxlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGlz
IGFjY29tcGxpc2hlcyAoMikuCi0gICAgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmluc3RhbGxD
b2RlKAotICAgICAgICAqbV92bSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5cGUoKSwgc3BlY2lhbGl6
YXRpb25LaW5kKCkpOworICAgIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh2
bSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5cGUoKSwgc3BlY2lhbGl6YXRpb25LaW5kKCkpOwogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkp
CkBAIC0yNzYyLDE4ICsyNzYzLDE5IEBAIGludCBDb2RlQmxvY2s6OnN0YWNrUG9pbnRlck9mZnNl
dCgpCiAKIHNpemVfdCBDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgpCiB7Cisg
ICAgVk0qIHZtID0gbV92bS51bnBvaXNvbmVkKCk7CiAgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxl
ZCBmcm9tIENvZGVCbG9jazo6Q29kZUJsb2NrIGJlZm9yZSBlaXRoZXIgbV92bSBvciB0aGUKICAg
ICAvLyBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVy
biAwIGJlY2F1c2Ugd2hhdCB3aWxsIHJlYWxseQogICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21w
dXRhdGlvbiBvZiB0aGlzIHZhbHVlIHdoZW4gdGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCi0g
ICAgaWYgKCFtX3ZtKQorICAgIGlmICghdm0pCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAg
IGlmICghKm1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJ
VCkKKyAgICBpZiAoISp2bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2Vs
aW5lSklUKQogICAgICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29kIG9mIGEgcHJlZGljdGlv
biBhcyB3ZSdsbCBnZXQuCiAgICAgCiAgICAgLy8gQmUgY29uc2VydmF0aXZlOiByZXR1cm4gYSBz
aXplIHRoYXQgd2lsbCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2YgdGhlIHRpbWUuCi0gICAg
ZG91YmxlIG11bHRpcGxpZXIgPSBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3Jk
Rm9yQmFzZWxpbmVKSVQtPm1lYW4oKSArCi0gICAgICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQ
ZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsKKyAgICBk
b3VibGUgbXVsdGlwbGllciA9IHZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9y
QmFzZWxpbmVKSVQtPm1lYW4oKSArCisgICAgICAgIHZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0
ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPnN0YW5kYXJkRGV2aWF0aW9uKCk7CiAgICAgCiAgICAg
Ly8gQmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJzLiBTaWxlbnRs
eSBkb2luZyB0aGUgIndyb25nIiB0aGluZwogICAgIC8vIGhlcmUgaXMgT0ssIHNpbmNlIHRoaXMg
d2hvbGUgbWV0aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCkBAIC0zMDYxLDcgKzMwNjMsNyBAQCBz
dGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluCiAgICAgICAgICAgICByZXR1
cm4gY29kZU9yaWdpbjsKICAgICB9CiAKLSAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewor
ICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIp
IHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAqaXRlcjsKICAgICAgICAgaWYg
KHN0dWItPmNvbnRhaW5zUEMocGMpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8
Q29kZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMjYzNDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8
Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTUwLDYgKzUwLDcg
QEAKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNs
dWRlICJKSVRNYXRoSUNGb3J3YXJkcy5oIgorI2luY2x1ZGUgIkpTQ1BvaXNvbi5oIgogI2luY2x1
ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVt
cFRhYmxlLmgiCkBAIC0xMDYsMTIgKzEwNywxNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAKLSAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVi
bGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7IAorICAgIHN0cnVjdCBVbmNvbmRpdGlv
bmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7CisgICAg
ICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoQ29kZUJsb2NrJiBjb2RlQmxvY2spIDogY29kZUJs
b2NrKGNvZGVCbG9jaykgeyB9CiAgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
KSBvdmVycmlkZTsKKyAgICAgICAgQ29kZUJsb2NrJiBjb2RlQmxvY2s7CiAgICAgfTsKIAotICAg
IGNsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgOiBwdWJsaWMgSlNDOjpXZWFrUmVmZXJlbmNl
SGFydmVzdGVyIHsKKyAgICBzdHJ1Y3QgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBK
U0M6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgeworICAgICAgICBXZWFrUmVmZXJlbmNlSGFydmVz
dGVyKENvZGVCbG9jayYgY29kZUJsb2NrKSA6IGNvZGVCbG9jayhjb2RlQmxvY2spIHsgfQogICAg
ICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAg
ICAgICAgQ29kZUJsb2NrJiBjb2RlQmxvY2s7CiAgICAgfTsKIAogcHVibGljOgpAQCAtMjU1LDkg
KzI2MCw5IEBAIHB1YmxpYzoKICAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQXJpdGhQcm9maWxl
Kik7CiAgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSopOwogICAgIEpJVFN1
YklDKiBhZGRKSVRTdWJJQyhBcml0aFByb2ZpbGUqKTsKLSAgICBCYWc8U3RydWN0dXJlU3R1Yklu
Zm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4o
KTsgfQotICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvRW5kKCkg
eyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KLSAgICAKKyAgICBhdXRvIHN0dWJJbmZvQmVn
aW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CisgICAgYXV0byBzdHViSW5mb0Vu
ZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CisKICAgICAvLyBPKG4pIG9wZXJhdGlv
bi4gVXNlIGdldFN0dWJJbmZvTWFwKCkgdW5sZXNzIHlvdSByZWFsbHkgb25seSBpbnRlbmQgdG8g
Z2V0IG9uZQogICAgIC8vIHN0dWIgaW5mby4KICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogZmluZFN0
dWJJbmZvKENvZGVPcmlnaW4pOwpAQCAtMjY1LDggKzI3MCw4IEBAIHB1YmxpYzoKICAgICBCeVZh
bEluZm8qIGFkZEJ5VmFsSW5mbygpOwogCiAgICAgQ2FsbExpbmtJbmZvKiBhZGRDYWxsTGlua0lu
Zm8oKTsKLSAgICBCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0JlZ2lu
KCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7IH0KLSAgICBCYWc8Q2FsbExpbmtJ
bmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0VuZCgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZv
cy5lbmQoKTsgfQorICAgIGF1dG8gY2FsbExpbmtJbmZvc0JlZ2luKCkgeyByZXR1cm4gbV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7IH0KKyAgICBhdXRvIGNhbGxMaW5rSW5mb3NFbmQoKSB7IHJldHVy
biBtX2NhbGxMaW5rSW5mb3MuZW5kKCk7IH0KIAogICAgIC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0
aW9uIGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBpbGluZyBPU1IgZXhpdHMgaW4gdGhlIGNh
c2UKICAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlubGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5
b3Ugd2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxseQpAQCAtMzA4LDExICszMTMsMTEgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHR5cGVkZWYgSlNDOjpJbnN0cnVjdGlvbiBJbnN0cnVjdGlv
bjsKLSAgICB0eXBlZGVmIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIFVucGFja2VkSW5z
dHJ1Y3Rpb25zOworICAgIHR5cGVkZWYgUG9pc29uZWRSZWZDb3VudGVkQXJyYXk8Q29kZUJsb2Nr
UG9pc29uLCBJbnN0cnVjdGlvbj4mIFVucGFja2VkSW5zdHJ1Y3Rpb25zOwogCiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5z
aXplKCk7IH0KLSAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMo
KSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxJ
bnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25z
OyB9CisgICAgUG9pc29uZWRSZWZDb3VudGVkQXJyYXk8Q29kZUJsb2NrUG9pc29uLCBJbnN0cnVj
dGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisgICAgY29u
c3QgUG9pc29uZWRSZWZDb3VudGVkQXJyYXk8Q29kZUJsb2NrUG9pc29uLCBJbnN0cnVjdGlvbj4m
IGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CiAKICAgICBz
aXplX3QgcHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCk7CiAKQEAgLTM2MSw3ICszNjYsNyBAQCBw
dWJsaWM6CiAgICAgRXhlY3V0YWJsZUJhc2UqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CiAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFNjcmlwdEV4ZWN1dGFi
bGUqPihtX293bmVyRXhlY3V0YWJsZS5nZXQoKSk7IH0KIAotICAgIFZNKiB2bSgpIGNvbnN0IHsg
cmV0dXJuIG1fdm07IH0KKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtLnVucG9pc29u
ZWQoKTsgfQogCiAgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNS
ZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQogICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQpA
QCAtODk1LDYgKzkwMCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc1RhaWxDYWxscygpOyB9CiAKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnRwdHJfdCBzX3BvaXNvbiA9IG1ha2VDb25zdEV4cHJQb2lzb24oQ29k
ZUJsb2NrUG9pc29uKTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGlu
ZUNhY2hlcygpOwogICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwpA
QCAtOTY1LDMwICs5NzIsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgfTsKICAgICB9OwogICAgIFdy
aXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9vd25lckV4ZWN1dGFibGU7Ci0gICAgVk0qIG1f
dm07CisgICAgQ29uc3RFeHByUG9pc29uZWQ8Q29kZUJsb2NrUG9pc29uLCBWTSo+IG1fdm07CiAK
LSAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOworICAgIFBv
aXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1Y3Rpb24+IG1faW5z
dHJ1Y3Rpb25zOwogICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwogICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBt
X2hhc2g7CiAKLSAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291cmNlOworICAgIFBvaXNv
bmVkUmVmUHRyPENvZGVCbG9ja1BvaXNvbiwgU291cmNlUHJvdmlkZXI+IG1fc291cmNlOwogICAg
IHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0OwogCiAgICAgUmVmQ291bnRlZEFycmF5PExMSW50Q2FsbExpbmtJbmZvPiBtX2xsaW50
Q2FsbExpbmtJbmZvczsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8s
IEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50
Q2FsbHM7CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50R2V0QnlJZFdhdGNocG9p
bnRNYXA7Ci0gICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKKyAgICBQb2lzb25lZFJlZlB0
cjxDb2RlQmxvY2tQb2lzb24sIEpJVENvZGU+IG1faml0Q29kZTsKICNpZiBFTkFCTEUoSklUKQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gbV9jYWxsZWVTYXZlUmVn
aXN0ZXJzOwotICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgQmFn
PEpJVEFkZElDPiBtX2FkZElDczsKLSAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOwotICAgIEJh
ZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKLSAgICBC
YWc8QnlWYWxJbmZvPiBtX2J5VmFsSW5mb3M7Ci0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxs
TGlua0luZm9zOworICAgIFBvaXNvbmVkQmFnPENvZGVCbG9ja1BvaXNvbiwgU3RydWN0dXJlU3R1
YkluZm8+IG1fc3R1YkluZm9zOworICAgIFBvaXNvbmVkQmFnPENvZGVCbG9ja1BvaXNvbiwgSklU
QWRkSUM+IG1fYWRkSUNzOworICAgIFBvaXNvbmVkQmFnPENvZGVCbG9ja1BvaXNvbiwgSklUTXVs
SUM+IG1fbXVsSUNzOworICAgIFBvaXNvbmVkQmFnPENvZGVCbG9ja1BvaXNvbiwgSklUTmVnSUM+
IG1fbmVnSUNzOworICAgIFBvaXNvbmVkQmFnPENvZGVCbG9ja1BvaXNvbiwgSklUU3ViSUM+IG1f
c3ViSUNzOworICAgIFBvaXNvbmVkQmFnPENvZGVCbG9ja1BvaXNvbiwgQnlWYWxJbmZvPiBtX2J5
VmFsSW5mb3M7CisgICAgUG9pc29uZWRCYWc8Q29kZUJsb2NrUG9pc29uLCBDYWxsTGlua0luZm8+
IG1fY2FsbExpbmtJbmZvczsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBC
YXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAgICAg
U2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIEJhc2ljUmF3U2VudGluZWxO
b2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7
CkBAIC0xMDMwLDggKzEwMzcsOCBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJh
cmVEYXRhPiBtX3JhcmVEYXRhOwogCi0gICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29u
ZGl0aW9uYWxGaW5hbGl6ZXI7Ci0gICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXI7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8Q29kZUJsb2NrUG9pc29uLCBV
bmNvbmRpdGlvbmFsRmluYWxpemVyPiBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CisgICAgUG9p
c29uZWRVbmlxdWVQdHI8Q29kZUJsb2NrUG9pc29uLCBXZWFrUmVmZXJlbmNlSGFydmVzdGVyPiBt
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7CiB9OwogCiBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0
ZTo6cihpbnQgaW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyMjYzNDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDcgKzcxLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiAg
ICAgVk0mIHZtID0gKnByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCi0gICAgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5
dGVjb2RlSW5kZXg7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJvZmls
ZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXg7CiAKICAgICBT
dHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7CiAg
ICAgaWYgKCFzdHJ1Y3R1cmVJRCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkocmV2aXNpb24gMjI2MzQ4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29y
a2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCB2b2lkIGFkanVzdEZyYW1lQW5kU3RhY2tJbk9T
UkV4aXRDb21waWxlCiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgU1AgaXMgY29ycmVjdCBp
biBjYXNlIG9mIGFuIGV4Y2VwdGlvbi4KICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSksIEdQUkluZm86OnJlZ1Qw
KTsKICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCwgQ29kZUJsb2NrOjpqaXRDb2RlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0
LnhvclB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihDb2RlQmxvY2s6OnNfcG9pc29u
KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihKSVRDb2RlVHlwZTo6Y29tbW9uRGF0YU9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDAp
OwogICAgIGppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IENvbW1vbkRhdGE6OmZyYW1lUmVnaXN0ZXJDb3VudE9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDAp
OwogICAgIC8vIFRoaXMgZG9lcyB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVy
Q291bnQgLSAxKSpzaXplb2YoUmVnaXN0ZXIpIHdoZXJlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAyMjYzNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAzLDggKzkwMyw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBJbnN0cnVjdGlvbiogY29waWVkSW5zdHJ1Y3Rpb24oSW5zdHJ1Y3Rpb24qKTsKIAog
ICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKLSAgICAgICAgCi0gICAgICAgIFJl
ZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CisKKyAgICAgICAgUG9p
c29uZWRSZWZDb3VudGVkQXJyYXk8Q29kZUJsb2NrUG9pc29uLCBJbnN0cnVjdGlvbj4gbV9pbnN0
cnVjdGlvbnM7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgICAg
IFZlY3RvcjxMYWJlbD4gbV9sYWJlbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRPZmZsaW5lQXNtQ29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50T2ZmbGluZUFzbUNvbmZpZy5oCShyZXZpc2lvbiAyMjYzNDgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZsaW5lQXNtQ29uZmlnLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgor
I2luY2x1ZGUgPHd0Zi9Qb2lzb25lZC5oPgogCiAjaWYgIUVOQUJMRShKSVQpCiAjZGVmaW5lIE9G
RkxJTkVfQVNNX0NfTE9PUCAxCkBAIC0xNDIsNiArMTQzLDEyIEBACiAjZGVmaW5lIE9GRkxJTkVf
QVNNX0pTVkFMVUU2NCAwCiAjZW5kaWYKIAorI2lmIEVOQUJMRShQT0lTT04pCisjZGVmaW5lIE9G
RkxJTkVfQVNNX1BPSVNPTiAxCisjZWxzZQorI2RlZmluZSBPRkZMSU5FX0FTTV9QT0lTT04gMAor
I2VuZGlmCisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAjZGVmaW5lIE9GRkxJTkVfQVNNX0FTU0VS
VF9FTkFCTEVEIDEKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjI2MzQ4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00NSw2ICs0NSw3IEBAIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKCkKICAgICBsb2Fk
aSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCiAgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1tQQl0sIFBCCisg
ICAgdW5wb2lzb25Db2RlQmxvY2tGaWVsZChQQikKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24o
MSwgdDEpCiAgICAgc3RvcmVxIHIwLCBbY2ZyLCB0MSwgOF0KICAgICB2YWx1ZVByb2ZpbGUocjAs
IChDYWxsT3BDb2RlU2l6ZSAtIDEpLCB0MykKQEAgLTQ4Miw2ICs0ODMsNyBAQCBlbmQKIG1hY3Jv
IHN0cnVjdHVyZUlEVG9TdHJ1Y3R1cmVXaXRoU2NyYXRjaChzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1
cmUsIHNjcmF0Y2gpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHNjcmF0Y2gKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fdm1bc2NyYXRjaF0sIHNjcmF0Y2gKKyAgICB1bnBvaXNvbkNvZGVCbG9j
a0ZpZWxkKHNjcmF0Y2gpCiAgICAgbG9hZHAgVk06OmhlYXAgKyBIZWFwOjptX3N0cnVjdHVyZUlE
VGFibGUgKyBTdHJ1Y3R1cmVJRFRhYmxlOjptX3RhYmxlW3NjcmF0Y2hdLCBzY3JhdGNoCiAgICAg
bG9hZHAgW3NjcmF0Y2gsIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZSwgOF0sIHN0cnVjdHVyZUlE
VGhlblN0cnVjdHVyZQogZW5kCkBAIC00OTUsNiArNDk3LDcgQEAgbWFjcm8gbG9hZFN0cnVjdHVy
ZUFuZENsb2JiZXJGaXJzdEFyZyhjZQogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFtj
ZWxsXSwgc3RydWN0dXJlCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIGNlbGwKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fdm1bY2VsbF0sIGNlbGwKKyAgICB1bnBvaXNvbkNvZGVCbG9ja0ZpZWxk
KGNlbGwpCiAgICAgbG9hZHAgVk06OmhlYXAgKyBIZWFwOjptX3N0cnVjdHVyZUlEVGFibGUgKyBT
dHJ1Y3R1cmVJRFRhYmxlOjptX3RhYmxlW2NlbGxdLCBjZWxsCiAgICAgbG9hZHAgW2NlbGwsIHN0
cnVjdHVyZSwgOF0sIHN0cnVjdHVyZQogZW5kCkBAIC01NTksNiArNTYyLDcgQEAgbWFjcm8gZnVu
Y3Rpb25Bcml0eUNoZWNrKGRvbmVMYWJlbCwgc2xvdwogICAgICMgUmVsb2FkIENvZGVCbG9jayBh
bmQgcmVzZXQgUEMsIHNpbmNlIHRoZSBzbG93X3BhdGggY2xvYmJlcmVkIHRoZW0uCiAgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9u
c1t0MV0sIFBCCisgICAgdW5wb2lzb25Db2RlQmxvY2tGaWVsZChQQikKICAgICBtb3ZlIDAsIFBD
CiAgICAgam1wIGRvbmVMYWJlbAogZW5kCkBAIC0xOTQ5LDE0ICsxOTUzLDE0IEBAIG1hY3JvIGRv
Q2FsbChzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50
ICsgVGFnT2Zmc2V0W2Nmcl0KICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2Fk
T2Zmc2V0W3QzXQogICAgIG1vdmUgdDMsIHNwCi0gICAgaWYgWDg2XzY0X1dJTgotICAgICAgICBw
cmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCB0Miwg
dDMsIHQ0KQotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1h
Y2hpbmVDb2RlVGFyZ2V0W3QxXSkKLSAgICBlbHNlCisgICAgaWYgUE9JU09OCiAgICAgICAgIGxv
YWRwIF9nX2ppdENvZGVQb2lzb24sIHQyCiAgICAgICAgIHhvcnAgTExJbnRDYWxsTGlua0luZm86
Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIKICAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQxLCB0
MywgdDQpCiAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbih0MikKKyAgICBlbHNlCisgICAgICAg
IHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQy
LCB0MywgdDQpCisgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6
bWFjaGluZUNvZGVUYXJnZXRbdDFdKQogICAgIGVuZAogCiAub3BDYWxsU2xvdzoKQEAgLTIwMDMs
NiArMjAwNyw3IEBAIF9sbGludF9vcF9jYXRjaDoKIAogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbUEJdLCBQQgorICAgIHVu
cG9pc29uQ29kZUJsb2NrRmllbGQoUEIpCiAgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVy
UENGb3JUaHJvd1t0M10sIFBDCiAgICAgc3VicCBQQiwgUEMKICAgICByc2hpZnRwIDMsIFBDCkBA
IC0yNDk1LDYgKzI1MDAsNyBAQCBfbGxpbnRfb3BfcHJvZmlsZV90eXBlOgogICAgIHRyYWNlRXhl
Y3V0aW9uKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKICAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1fdm1bdDFdLCB0MQorICAgIHVucG9pc29uQ29kZUJsb2NrRmllbGQodDEpCiAgICAgIyB0
MSBpcyBob2xkaW5nIHRoZSBwb2ludGVyIHRvIHRoZSB0eXBlUHJvZmlsZXJMb2cuCiAgICAgbG9h
ZHAgVk06Om1fdHlwZVByb2ZpbGVyTG9nW3QxXSwgdDEKICAgICAjIHQyIGlzIGhvbGRpbmcgdGhl
IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24g
MjI2MzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykg
MjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjA0LDYgKzIwNCwxMCBAQCBlbHNlCiAgICAgY29uc3QgTG93ZXN0
VGFnID0gRGVsZXRlZFZhbHVlVGFnCiBlbmQKIAoraWYgUE9JU09OCisgICAgY29uc3QgQ29kZUJs
b2NrUG9pc29uID0gY29uc3RleHByIENvZGVCbG9jazo6c19wb2lzb24KK2VuZAorCiAjIFB1dEJ5
SWRGbGFncyBkYXRhCiBjb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrID0gY29uc3RleHByIFB1
dEJ5SWRQcmltYXJ5VHlwZU1hc2sKIGNvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9
IGNvbnN0ZXhwciBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkKQEAgLTc1Miw2ICs3NTYsMTIg
QEAgbWFjcm8gcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKGRlcwogICAgIGVuZAogZW5k
CiAKK21hY3JvIHVucG9pc29uQ29kZUJsb2NrRmllbGQoZmllbGQpCisgICAgaWYgUE9JU09OCisg
ICAgICAgIHhvcnAgQ29kZUJsb2NrUG9pc29uLCBmaWVsZAorICAgIGVuZAorZW5kCisKIG1hY3Jv
IGZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIGlmIFg4NiBvciBYODZfV0lOIG9yIFg4Nl82NCBvciBY
ODZfNjRfV0lOCiAgICAgICAgIHB1c2ggY2ZyCkBAIC0xMDE0LDYgKzEwMjQsNyBAQCBtYWNybyBw
cm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgIyBTZXQgdXAgdGhlIFBDLgog
ICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25z
W3QxXSwgUEIKKyAgICAgICAgdW5wb2lzb25Db2RlQmxvY2tGaWVsZChQQikKICAgICAgICAgbW92
ZSAwLCBQQwogICAgIGVsc2UKICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9u
c1t0MV0sIFBDCkBAIC0xMDI0LDYgKzEwMzUsNyBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tH
ZXR0ZXIsIGNvZGVCbG9jCiAgICAgc3VicCBjZnIsIHQwLCB0MAogICAgIGJwYSB0MCwgY2ZyLCAu
bmVlZFN0YWNrQ2hlY2sKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDFdLCB0MgorICAgIHVu
cG9pc29uQ29kZUJsb2NrRmllbGQodDIpCiAgICAgaWYgQ19MT09QCiAgICAgICAgIGJwYmVxIFZN
OjptX2Nsb29wU3RhY2tMaW1pdFt0Ml0sIHQwLCAuc3RhY2tIZWlnaHRPSwogICAgIGVsc2UKQEAg
LTE2MTEsNiArMTYyMyw3IEBAIF9sbGludF9vcF9jaGVja190cmFwczoKICAgICB0cmFjZUV4ZWN1
dGlvbigpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCiAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX3ZtW3QxXSwgdDEKKyAgICB1bnBvaXNvbkNvZGVCbG9ja0ZpZWxkKHQxKQogICAgIGxvYWRi
IFZNOjptX3RyYXBzK1ZNVHJhcHM6Om1fbmVlZFRyYXBIYW5kbGluZ1t0MV0sIHQwCiAgICAgYnRw
bnogdDAsIC5oYW5kbGVUcmFwcwogLmFmdGVySGFuZGxpbmdUcmFwczoKQEAgLTE2MjYsNiArMTYz
OSw3IEBAIF9sbGludF9vcF9jaGVja190cmFwczoKIG1hY3JvIGFjcXVpcmVTaGFkb3dDaGlja2Vu
UGFja2V0KHNsb3cpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCiAgICAgbG9hZHAgQ29k
ZUJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICB1bnBvaXNvbkNvZGVCbG9ja0ZpZWxkKHQxKQogICAg
IGxvYWRwIFZNOjptX3NoYWRvd0NoaWNrZW5bdDFdLCB0MgogICAgIGxvYWRwIFNoYWRvd0NoaWNr
ZW46Om1fbG9nQ3Vyc29yW3QyXSwgdDAKICAgICBicGFlcSB0MCwgU2hhZG93Q2hpY2tlbjo6bV9s
b2dFbmRbdDJdLCBzbG93CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlu
a2VkU291cmNlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgJKHJldmlzaW9uIDIyNjM0OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIK
ICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApA
QCAtOTgsOSArOTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0IC0gbV9zdGFydE9mZnNldDsgfQogCiAgICAgcHJvdGVj
dGVkOgotICAgICAgICAvLyBGSVhNRTogTWFrZSBpdCBSZWY8U291cmNlUHJvdmlkaWVyPi4KKyAg
ICAgICAgLy8gRklYTUU6IE1ha2UgaXQgUG9pc29uZWRSZWY8U291cmNlUHJvdmlkaWVyPi4KICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODMyNQot
ICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fcHJvdmlkZXI7CisgICAgICAgIFBvaXNv
bmVkUmVmUHRyPFNvdXJjZVByb3ZpZGVyUG9pc29uLCBTb3VyY2VQcm92aWRlcj4gbV9wcm92aWRl
cjsKICAgICAgICAgaW50IG1fc3RhcnRPZmZzZXQ7CiAgICAgICAgIGludCBtX2VuZE9mZnNldDsK
ICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUG9pc29uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUG9pc29uLmgJ
KHJldmlzaW9uIDIyNjM0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1Bv
aXNvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogZW51bSBQb2lzb24gewogICAgIE5vdFBvaXNvbmVkID0gMCwKLSAgICBUcmFuc2l0aW9uTWFw
UG9pc29uLAotICAgIFdlYWtJbXBsUG9pc29uLAorICAgIENvZGVCbG9ja1BvaXNvbiwKKyAgICBK
U0dsb2JhbE9iamVjdFBvaXNvbiwKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrUG9pc29uLAor
ICAgIFNjcmlwdEZldGNoUGFyYW1ldGVyc1BvaXNvbiwKKyAgICBTY3JpcHRGZXRjaGVyUG9pc29u
LAorICAgIFNvdXJjZVByb3ZpZGVyUG9pc29uLAorICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZVBvaXNvbiwKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI2MzQ4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitu
YW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHMs
IHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+CitKU0dsb2JhbE9iamVjdDo6UG9pc29uZWRVbmlxdWVQ
dHI8VD4gbWFrZVBvaXNvbmVkVW5pcXVlKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKK3sKKyAg
ICByZXR1cm4gV1RGOjptYWtlUG9pc29uZWRVbmlxdWU8SlNHbG9iYWxPYmplY3RQb2lzb24sIFQ+
KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwogc3RhdGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShWTSYg
dm0sIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbCA9IGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CkBAIC00MDEsOCArNDExLDggQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAgbV9kZWJ1Z2dlciA9IDA7CiAKICNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
PigqdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlID0gc3RkOjptYWtlX3VuaXF1ZTxK
U0dsb2JhbE9iamVjdERlYnVnZ2FibGU+KCp0aGlzKTsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXIgPSBtYWtlUG9pc29uZWRVbmlxdWU8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3Rv
ckNvbnRyb2xsZXI+KCp0aGlzKTsKKyAgICBtX2luc3BlY3RvckRlYnVnZ2FibGUgPSBtYWtlUG9p
c29uZWRVbmlxdWU8SlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlPigqdGhpcyk7CiAgICAgbV9pbnNw
ZWN0b3JEZWJ1Z2dhYmxlLT5pbml0KCk7CiAgICAgbV9jb25zb2xlQ2xpZW50ID0gbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5jb25zb2xlQ2xpZW50KCk7CiAjZW5kaWYKQEAgLTEwMDYsNjMgKzEwMTYs
NjMgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogCiAgICAgICAg
IHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVw
QWRhcHRpdmVXYXRjaHBvaW50KGFycmF5SXRlcmF0b3JQcm90b3R5cGUsIG1fdm0ucHJvcGVydHlO
YW1lcy0+bmV4dCk7Ci0gICAgICAgICAgICBtX2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0ID0g
c3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJ
bmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9hcnJheUl0ZXJhdG9yUHJvdG9j
b2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQg
PSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9p
bnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fYXJyYXlJdGVyYXRvclBy
b3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX2FycmF5SXRlcmF0b3JQcm90b3R5cGVO
ZXh0LT5pbnN0YWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQodGhp
cy0+YXJyYXlQcm90b3R5cGUoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7
Ci0gICAgICAgICAgICBtX2FycmF5UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50ID0g
c3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJ
bmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9hcnJheUl0ZXJhdG9yUHJvdG9j
b2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJdGVyYXRv
cldhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFw
dGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fYXJy
YXlJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX2FycmF5UHJvdG90
eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50LT5pbnN0YWxsKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBz
ZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtYXBJdGVyYXRvclByb3RvdHlwZSwgbV92bS5wcm9wZXJ0
eU5hbWVzLT5uZXh0KTsKLSAgICAgICAgICAgIG1fbWFwSXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0
Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdh
dGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fbWFwSXRlcmF0
b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9tYXBJdGVyYXRvclByb3RvdHlw
ZU5leHRXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVkVW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdl
QWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBt
X21hcEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKICAgICAgICAgICAgIG1fbWFwSXRlcmF0
b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAgICAgICAg
IHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVw
QWRhcHRpdmVXYXRjaHBvaW50KG1fbWFwUHJvdG90eXBlLmdldCgpLCBtX3ZtLnByb3BlcnR5TmFt
ZXMtPml0ZXJhdG9yU3ltYm9sKTsKLSAgICAgICAgICAgIG1fbWFwUHJvdG90eXBlU3ltYm9sSXRl
cmF0b3JXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFk
YXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9t
YXBJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CisgICAgICAgICAgICBtX21hcFByb3RvdHlw
ZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9w
ZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNv
bmRpdGlvbiwgbV9tYXBJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBt
X21hcFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludC0+aW5zdGFsbCgpOwogICAgICAg
ICB9CiAKICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29u
ZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQoc2V0SXRlcmF0b3JQcm90b3R5cGUsIG1f
dm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7Ci0gICAgICAgICAgICBtX3NldEl0ZXJhdG9yUHJvdG90
eXBlTmV4dFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdl
QWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBt
X3NldEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fc2V0SXRlcmF0
b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9w
ZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNv
bmRpdGlvbiwgbV9zZXRJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBt
X3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAg
fQogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRp
b24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtX3NldFByb3RvdHlwZS5nZXQoKSwgbV92bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0gICAgICAgICAgICBtX3NldFByb3RvdHlw
ZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVy
dHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25k
aXRpb24sIG1fc2V0SXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9z
ZXRQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8
T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNl
dD4+KHZtLCBjb25kaXRpb24sIG1fc2V0SXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOwogICAg
ICAgICAgICAgbV9zZXRQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQtPmluc3RhbGwo
KTsKICAgICAgICAgfQogCiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1fc3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUuZ2V0KCksIG1fdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7Ci0gICAgICAgICAg
ICBtX3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9p
bnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX3N0cmluZ0l0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50
KTsKKyAgICAgICAgICAgIG1fc3RyaW5nSXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9
IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2lu
dDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zdHJpbmdJdGVyYXRvclBy
b3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBl
TmV4dFdhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogICAgICAgICB7CiAgICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0
Y2hwb2ludChtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRvclN5bWJvbCk7Ci0gICAgICAgICAgICBtX3N0cmluZ1Byb3RvdHlwZVN5bWJvbEl0ZXJhdG9y
V2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc3RyaW5n
SXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9zdHJpbmdQcm90b3R5
cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJv
cGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBj
b25kaXRpb24sIG1fc3RyaW5nSXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOwogICAgICAgICAg
ICAgbV9zdHJpbmdQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQtPmluc3RhbGwoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1fbWFwUHJvdG90eXBlLmdl
dCgpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPnNldCk7Ci0gICAgICAgICAgICBtX21hcFByb3RvdHlw
ZVNldFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21h
cFNldFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9tYXBQcm90b3R5cGVTZXRXYXRjaHBvaW50
ID0gbWFrZVBvaXNvbmVkVW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBv
aW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcFNldFdhdGNocG9p
bnQpOwogICAgICAgICAgICAgbV9tYXBQcm90b3R5cGVTZXRXYXRjaHBvaW50LT5pbnN0YWxsKCk7
CiAgICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtX3NldFByb3RvdHlwZS5n
ZXQoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5hZGQpOwotICAgICAgICAgICAgbV9zZXRQcm90b3R5
cGVBZGRXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFk
YXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9z
ZXRBZGRXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fc2V0UHJvdG90eXBlQWRkV2F0Y2hwb2lu
dCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hw
b2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRBZGRXYXRjaHBv
aW50KTsKICAgICAgICAgICAgIG1fc2V0UHJvdG90eXBlQWRkV2F0Y2hwb2ludC0+aW5zdGFsbCgp
OwogICAgICAgICB9CiAKICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQobnVtYmVyUHJvdG90eXBl
KCksIG1fdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcpOwotICAgICAgICAgICAgbV9udW1iZXJQ
cm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29u
ZGl0aW9uLCBtX251bWJlclRvU3RyaW5nV2F0Y2hwb2ludCk7CisgICAgICAgICAgICBtX251bWJl
clByb3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQ
cm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0s
IGNvbmRpdGlvbiwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9u
dW1iZXJQcm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgICAg
IG1fbnVtYmVyUHJvdG9Ub1N0cmluZ0Z1bmN0aW9uLnNldCh2bSwgdGhpcywganNDYXN0PEpTRnVu
Y3Rpb24qPihudW1iZXJQcm90b3R5cGUoKS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT50b1N0cmluZykpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMjYzNDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCisjaW5jbHVk
ZSAiSlNDUG9pc29uLmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oIgpAQCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFz
ZS5oPgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1BvaXNvbmVkVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgog
CiBzdHJ1Y3QgT3BhcXVlSlNDbGFzczsKQEAgLTM5Nyw5ICszOTksMTEgQEAgcHVibGljOgogCiAg
ICAgVk0mIG1fdm07CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBQb2lzb25lZFVu
aXF1ZVB0ciA9IFdURjo6UG9pc29uZWRVbmlxdWVQdHI8SlNHbG9iYWxPYmplY3RQb2lzb24sIFQ+
OworCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgc3RkOjp1bmlxdWVfcHRyPElu
c3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyPiBtX2luc3BlY3RvckNv
bnRyb2xsZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZT4g
bV9pbnNwZWN0b3JEZWJ1Z2dhYmxlOworICAgIFBvaXNvbmVkVW5pcXVlUHRyPEluc3BlY3Rvcjo6
SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyPiBtX2luc3BlY3RvckNvbnRyb2xsZXI7
CisgICAgUG9pc29uZWRVbmlxdWVQdHI8SlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlPiBtX2luc3Bl
Y3RvckRlYnVnZ2FibGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlRMKQpAQCAtNDM0LDE3ICs0
MzgsMTcgQEAgcHVibGljOgogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9zZXRBZGRXYXRjaHBv
aW50OwogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9hcnJheVNwZWNpZXNXYXRjaHBvaW50Owog
ICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElu
bGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBv
aW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0
Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9hcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNo
cG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JX
YXRjaHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0
aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9tYXBJdGVyYXRvclByb3RvdHlw
ZU5leHRXYXRjaHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zZXRQcm90b3R5cGVT
eW1ib2xJdGVyYXRvcldhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX3NldEl0
ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBt
X3N0cmluZ1Byb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hw
b2ludFNldD4+IG1fc3RyaW5nSXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5s
aW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwUHJvdG90eXBlU2V0V2F0Y2hwb2ludDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5l
V2F0Y2hwb2ludFNldD4+IG1fc2V0UHJvdG90eXBlQWRkV2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0
Y2hwb2ludFNldD4+IG1fbnVtYmVyUHJvdG90eXBlVG9TdHJpbmdXYXRjaHBvaW50OworICAgIFBv
aXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElu
bGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBv
aW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVX
YXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5SXRlcmF0b3JQcm90b3R5cGVO
ZXh0OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVX
YXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX21hcFByb3RvdHlwZVN5bWJvbEl0ZXJh
dG9yV2F0Y2hwb2ludDsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9tYXBJdGVyYXRvclBy
b3RvdHlwZU5leHRXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX3NldFBy
b3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludDsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxP
YmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0
Pj4gbV9zZXRJdGVyYXRvclByb3RvdHlwZU5leHRXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5p
cXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNo
cG9pbnRTZXQ+PiBtX3N0cmluZ1Byb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludDsKKyAg
ICBQb2lzb25lZFVuaXF1ZVB0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2lu
dDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zdHJpbmdJdGVyYXRvclByb3RvdHlwZU5leHRXYXRj
aHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRp
dmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX21hcFByb3RvdHlwZVNldFdhdGNo
cG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc2V0UHJvdG90eXBlQWRkV2F0Y2hw
b2ludDsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9udW1iZXJQcm90b3R5cGVUb1N0cmlu
Z1dhdGNocG9pbnQ7CiAKICAgICBib29sIGlzQXJyYXlQcm90b3R5cGVJdGVyYXRvclByb3RvY29s
RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKICAgICBib29sIGlzTWFwUHJvdG90eXBlSXRlcmF0b3JQ
cm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgJKHJldmlz
aW9uIDIyNjM0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0
Y2hQYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDExIEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiSlNDUG9pc29uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlNjcmlwdEZldGNoUGFyYW1l
dGVycy5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTcx
LDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgUmVmPFNjcmlwdEZldGNo
UGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOworICAgIFBvaXNvbmVkUmVmPFNjcmlwdEZldGNoUGFy
YW1ldGVyc1BvaXNvbiwgU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NyaXB0RmV0Y2hlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NyaXB0RmV0Y2hlci5oCShyZXZpc2lvbiAyMjYzNDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsOSArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5j
bHVkZSAiU2NyaXB0RmV0Y2hlci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTcxLDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0g
ICAgUmVmUHRyPFNjcmlwdEZldGNoZXI+IG1fZmV0Y2hlcjsKKyAgICBQb2lzb25lZFJlZlB0cjxT
Y3JpcHRGZXRjaGVyUG9pc29uLCBTY3JpcHRGZXRjaGVyPiBtX2ZldGNoZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAyMjYzNDgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDggKzE4Nyw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgU2luZ2xlU2xvdFRyYW5zaXRpb25XZWFrT3duZXI7Ci0gICAgdXNp
bmcgUG9pc29uZWRUcmFuc2l0aW9uTWFwUHRyID0gQ29uc3RFeHByUG9pc29uZWQ8VHJhbnNpdGlv
bk1hcFBvaXNvbiwgVHJhbnNpdGlvbk1hcCo+OwotICAgIHVzaW5nIFBvaXNvbmVkV2Vha0ltcGxQ
dHIgPSBDb25zdEV4cHJQb2lzb25lZDxXZWFrSW1wbFBvaXNvbiwgV2Vha0ltcGwqPjsKKyAgICB1
c2luZyBQb2lzb25lZFRyYW5zaXRpb25NYXBQdHIgPSBDb25zdEV4cHJQb2lzb25lZDxTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGVQb2lzb24sIFRyYW5zaXRpb25NYXAqPjsKKyAgICB1c2luZyBQb2lz
b25lZFdlYWtJbXBsUHRyID0gQ29uc3RFeHByUG9pc29uZWQ8U3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlUG9pc29uLCBXZWFrSW1wbCo+OwogCiAgICAgYm9vbCBpc1VzaW5nU2luZ2xlU2xvdCgpIGNv
bnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNjM0OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2QKICAgICA6IEJhc2Uodm0sIHZtLndlYkFzc2VtYmx5Q29kZUJsb2NrU3Ry
dWN0dXJlLmdldCgpKQogICAgICwgbV9jb2RlQmxvY2soV1RGTW92ZShjb2RlQmxvY2spKQogewor
ICAgIG1fdW5jb25kaXRpb25hbEZpbmFsaXplciA9IFBvaXNvbmVkVW5pcXVlUHRyPEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpjcmVhdGUoKnRo
aXMpOworCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0byBkbyB0aGlzIHN5bmNo
cm9ub3VzbHkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MDU2NwogICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMucmVzZXJ2ZUNhcGFjaXR5KG1fY29kZUJs
b2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtOTIsMTUgKzk0LDEzIEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7CisgICAgdmlz
aXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25h
bEZpbmFsaXplci5nZXQoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6VW5j
b25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogewotICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBiaXR3aXNlX2Nhc3Q8SlNXZWJBc3Nl
bWJseUNvZGVCbG9jayo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JK
RUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFs
aXplcikpOwotICAgIGZvciAoYXV0byBpdGVyID0gdGhpc09iamVjdC0+bV9jYWxsTGlua0luZm9z
LmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT52aXNpdFdlYWsoKnRo
aXNPYmplY3QtPnZtKCkpOworICAgIGZvciAoYXV0byBpdGVyID0gY29kZUJsb2NrLm1fY2FsbExp
bmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+dmlzaXRX
ZWFrKCpjb2RlQmxvY2sudm0oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjI2MzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgi
CisjaW5jbHVkZSAiSlNDUG9pc29uLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAi
UHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTM2LDYg
KzM3LDcgQEAKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZS5o
IgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvUG9pc29uZWRVbmlxdWVQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODYsMTMg
Kzg4LDE1IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAg
ICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25h
bEZpbmFsaXplciB7CisgICAgc3RydWN0IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMg
SlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFs
aXplcihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrJiBjb2RlQmxvY2spIDogY29kZUJsb2NrKGNvZGVC
bG9jaykgeyB9CiAgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlk
ZTsKKyAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayYgY29kZUJsb2NrOwogICAgIH07CiAK
ICAgICBSZWY8V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBWZWN0b3I8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub0pTRXhpdFN0dWJzOwotICAgIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOworICAgIFBvaXNvbmVkVW5pcXVlUHRy
PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+IG1f
dW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5r
SW5mb3M7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAy
MjYzNDgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw0NCArMjYs
NTAgQEAKICNpZm5kZWYgQmFnX2gKICNkZWZpbmUgQmFnX2gKIAorI2luY2x1ZGUgPHd0Zi9EdW1i
UHRyVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK25hbWVzcGFjZSBQcml2YXRlIHsK
KwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJhZ05vZGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgQmFnTm9kZShBcmdzJiYuLi4gYXJncykKKyAgICAgICAgOiBtX2l0ZW0oc3RkOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKQorICAgIHsgfQorICAgIAorICAgIFQgbV9pdGVtOworICAgIEJhZ05v
ZGUqIG1fbmV4dCB7IG51bGxwdHIgfTsKK307CisKK30gLy9uYW1lc3BhY2UgUHJpdmF0ZQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUcmFpdHMgPSBEdW1iUHRyVHJhaXRzPFBy
aXZhdGU6OkJhZ05vZGU8VD4+PgogY2xhc3MgQmFnIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShCYWcpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHJpdmF0ZToKLSAgICBjbGFz
cyBOb2RlIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBOb2RlKEFyZ3MmJi4u
LiBhcmdzKQotICAgICAgICAgICAgOiBtX2l0ZW0oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFQgbV9pdGVtOwotICAg
ICAgICBOb2RlKiBtX25leHQgeyBudWxscHRyIH07Ci0gICAgfTsKLSAgICAKKyAgICB1c2luZyBO
b2RlID0gUHJpdmF0ZTo6QmFnTm9kZTxUPjsKKwogcHVibGljOgotICAgIEJhZygpCi0gICAgewot
ICAgIH0KKyAgICBCYWcoKSA9IGRlZmF1bHQ7CiAKLSAgICBCYWcoQmFnPFQ+JiYgb3RoZXIpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcoQmFnPFQsIFU+JiYgb3RoZXIpCiAgICAg
ewogICAgICAgICBBU1NFUlQoIW1faGVhZCk7Ci0gICAgICAgIG1faGVhZCA9IG90aGVyLm1faGVh
ZDsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOwogICAgICAgICBvdGhl
ci5tX2hlYWQgPSBudWxscHRyOwogICAgIH0KIAotICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxUPiYm
IG90aGVyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0oQmFn
PFQsIFU+JiYgb3RoZXIpCiAgICAgewotICAgICAgICBtX2hlYWQgPSBvdGhlci5tX2hlYWQ7Cisg
ICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKICAgICAgICAgb3RoZXIubV9o
ZWFkID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTc1LDkgKzgx
LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIHdo
aWxlIChtX2hlYWQpIHsKLSAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSBtX2hlYWQ7Ci0gICAg
ICAgICAgICBtX2hlYWQgPSBjdXJyZW50LT5tX25leHQ7CisgICAgICAgIE5vZGUqIGhlYWQgPSB0
aGlzLT51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIHdoaWxlIChoZWFkKSB7CisgICAgICAgICAg
ICBOb2RlKiBjdXJyZW50ID0gaGVhZDsKKyAgICAgICAgICAgIGhlYWQgPSBjdXJyZW50LT5tX25l
eHQ7CiAgICAgICAgICAgICBkZWxldGUgY3VycmVudDsKICAgICAgICAgfQogICAgICAgICBtX2hl
YWQgPSBudWxscHRyOwpAQCAtODcsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgVCogYWRkKEFyZ3Mm
Ji4uLiBhcmdzKQogICAgIHsKICAgICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ldyBOb2RlKHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgIG5ld05vZGUtPm1fbmV4dCA9IG1faGVh
ZDsKKyAgICAgICAgbmV3Tm9kZS0+bV9uZXh0ID0gdW53cmFwcGVkSGVhZCgpOwogICAgICAgICBt
X2hlYWQgPSBuZXdOb2RlOwogICAgICAgICByZXR1cm4gJm5ld05vZGUtPm1faXRlbTsKICAgICB9
CkBAIC0xMjEsMTQgKzEyOCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBjbGFzcyBXVEY6OkJhZzsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV1RGOjpCYWc7
CiAgICAgICAgIE5vZGUqIG1fbm9kZTsKICAgICB9OwogICAgIAogICAgIGl0ZXJhdG9yIGJlZ2lu
KCkKICAgICB7CiAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fbm9k
ZSA9IG1faGVhZDsKKyAgICAgICAgcmVzdWx0Lm1fbm9kZSA9IHVud3JhcHBlZEhlYWQoKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0xMzcsMTIgKzE0NCwyMCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1faGVhZDsgfQogICAg
IAogcHJpdmF0ZToKLSAgICBOb2RlKiBtX2hlYWQgeyBudWxscHRyIH07CisgICAgTm9kZSogdW53
cmFwcGVkSGVhZCgpIHsgcmV0dXJuIFB0clRyYWl0czo6dW53cmFwKG1faGVhZCk7IH0KKworICAg
IHR5cGVuYW1lIFB0clRyYWl0czo6U3RvcmFnZVR5cGUgbV9oZWFkIHsgbnVsbHB0ciB9OwogfTsK
IAordGVtcGxhdGU8dWludDMyX3Qga2V5LCB0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29uc3RFeHByUG9p
c29uZWRQdHJUcmFpdHM7CisKK3RlbXBsYXRlPHVpbnQzMl90IGtleSwgdHlwZW5hbWUgVD4KK3Vz
aW5nIFBvaXNvbmVkQmFnID0gQmFnPFQsIENvbnN0RXhwclBvaXNvbmVkUHRyVHJhaXRzPGtleSwg
UHJpdmF0ZTo6QmFnTm9kZTxUPj4+OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RG
OjpCYWc7Cit1c2luZyBXVEY6OlBvaXNvbmVkQmFnOwogCiAjZW5kaWYgLy8gQmFnX2gKIApJbmRl
eDogU291cmNlL1dURi93dGYvQmFnVG9IYXNoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQmFnVG9IYXNoTWFwLmgJKHJldmlzaW9uIDIyNjM0OCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0JhZ1RvSGFzaE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFt
ZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFtZSBL
ZXlUeXBlLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlHZXR0ZXJGdW5jdG9yPgotdm9p
ZCB0b0hhc2hNYXAoQmFnPEVsZW1lbnRUeXBlPiYgYmFnLCBLZXlHZXR0ZXJGdW5jdG9yJiBnZXRL
ZXksIEhhc2hNYXA8S2V5VHlwZSwgRWxlbWVudFR5cGUqLCBIYXNoQXJnPiYgcmVzdWx0KQordGVt
cGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIEJhZ1B0clRyYWl0cywgdHlwZW5h
bWUgS2V5VHlwZSwgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5R2V0dGVyRnVuY3Rvcj4K
K3ZvaWQgdG9IYXNoTWFwKEJhZzxFbGVtZW50VHlwZSwgQmFnUHRyVHJhaXRzPiYgYmFnLCBLZXlH
ZXR0ZXJGdW5jdG9yJiBnZXRLZXksIEhhc2hNYXA8S2V5VHlwZSwgRWxlbWVudFR5cGUqLCBIYXNo
QXJnPiYgcmVzdWx0KQogewotICAgIGZvciAodHlwZW5hbWUgQmFnPEVsZW1lbnRUeXBlPjo6aXRl
cmF0b3IgaXRlciA9IGJhZy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgIGZvciAodHlw
ZW5hbWUgQmFnPEVsZW1lbnRUeXBlLCBCYWdQdHJUcmFpdHM+OjppdGVyYXRvciBpdGVyID0gYmFn
LmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIEVsZW1lbnRUeXBlKiBlbGVtZW50
ID0gKml0ZXI7CiAgICAgICAgIEtleVR5cGUga2V5ID0gZ2V0S2V5KCplbGVtZW50KTsKICAgICAg
ICAgcmVzdWx0LmFkZChrZXksIGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dURi93dGYvUG9pc29u
ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Qb2lzb25lZC5oCShyZXZpc2lvbiAy
MjYzNDgpCisrKyBTb3VyY2UvV1RGL3d0Zi9Qb2lzb25lZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTIsNSArMjUyLDYgQEAgc3RydWN0IENvbnN0RXhwclBvaXNvbmVkUHRyVHJhaXRzIHsKIHVzaW5n
IFdURjo6Q29uc3RFeHByUG9pc29uZWQ7CiB1c2luZyBXVEY6OlBvaXNvbmVkOwogdXNpbmcgV1RG
OjpQb2lzb25lZEJpdHM7Cit1c2luZyBXVEY6Om1ha2VDb25zdEV4cHJQb2lzb247CiB1c2luZyBX
VEY6Om1ha2VQb2lzb247CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCShyZXZpc2lv
biAyMjYzNDgpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFJlZkNvdW50ZWRBcnJheV9oCiAjZGVm
aW5lIFJlZkNvdW50ZWRBcnJheV9oCiAKKyNpbmNsdWRlIDx3dGYvRHVtYlB0clRyYWl0cy5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQzLDIwICs0NCwyMSBAQAogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFB0clRyYWl0cyA9IER1bWJQdHJUcmFpdHM8VD4+CiBjbGFzcyBSZWZDb3VudGVkQXJy
YXkgeworICAgIGVudW0gQ29tbW9uQ29weUNvbnN0cnVjdG9yVGFnIHsgQ29tbW9uQ29weUNvbnN0
cnVjdG9yIH07CisKIHB1YmxpYzoKLSAgICBSZWZDb3VudGVkQXJyYXkoKQotICAgICAgICA6IG1f
ZGF0YSgwKQotICAgIHsKLSAgICB9CisgICAgUmVmQ291bnRlZEFycmF5KCkgPSBkZWZhdWx0Owog
ICAgIAogICAgIFJlZkNvdW50ZWRBcnJheShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKQot
ICAgICAgICA6IG1fZGF0YShvdGhlci5tX2RhdGEpCi0gICAgewotICAgICAgICBpZiAobV9kYXRh
KQotICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCsrOwot
ICAgIH0KKyAgICAgICAgOiBSZWZDb3VudGVkQXJyYXkoQ29tbW9uQ29weUNvbnN0cnVjdG9yLCBv
dGhlcikKKyAgICB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzPgorICAg
IFJlZkNvdW50ZWRBcnJheShjb25zdCBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBv
dGhlcikKKyAgICAgICAgOiBSZWZDb3VudGVkQXJyYXkoQ29tbW9uQ29weUNvbnN0cnVjdG9yLCBv
dGhlcikKKyAgICB7IH0KIAogICAgIGV4cGxpY2l0IFJlZkNvdW50ZWRBcnJheShzaXplX3Qgc2l6
ZSkKICAgICB7CkBAIC02NSwxOCArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgbV9kYXRhID0gKHN0YXRpY19jYXN0PEhlYWRlcio+KGZh
c3RNYWxsb2MoSGVhZGVyOjpzaXplKCkgKyBzaXplb2YoVCkgKiBzaXplKSkpLT5wYXlsb2FkKCk7
Ci0gICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQgPSAxOwotICAg
ICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9IHNpemU7Ci0gICAgICAg
IEFTU0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9PSBzaXplKTsKKyAg
ICAgICAgVCogZGF0YSA9IChzdGF0aWNfY2FzdDxIZWFkZXIqPihmYXN0TWFsbG9jKEhlYWRlcjo6
c2l6ZSgpICsgc2l6ZW9mKFQpICogc2l6ZSkpKS0+cGF5bG9hZCgpOworICAgICAgICBtX2RhdGEg
PSBkYXRhOworICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5yZWZDb3VudCA9IDE7
CisgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPmxlbmd0aCA9IHNpemU7CisgICAg
ICAgIEFTU0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5ndGggPT0gc2l6ZSk7CiAg
ICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojppbml0aWFsaXplKGJlZ2luKCksIGVuZCgp
KTsKICAgICB9CiAKLSAgICBSZWZDb3VudGVkQXJyYXkgY2xvbmUoKSBjb25zdAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzID0gUHRyVHJhaXRzPgorICAgIFJlZkNvdW50ZWRBcnJh
eTxULCBPdGhlclRyYWl0cz4gY2xvbmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgUmVmQ291bnRl
ZEFycmF5IHJlc3VsdChzaXplKCkpOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJU
cmFpdHM+IHJlc3VsdChzaXplKCkpOworICAgICAgICBjb25zdCBUKiBkYXRhID0gdGhpcy0+ZGF0
YSgpOworICAgICAgICBUKiByZXN1bHREYXRhID0gcmVzdWx0LmRhdGEoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgcmVzdWx0W2ldID0gYXQo
aSk7CisgICAgICAgICAgICByZXN1bHREYXRhW2ldID0gZGF0YVtpXTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKQEAgLTg4LDIwICs5NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fZGF0YSA9IChzdGF0aWNf
Y2FzdDxIZWFkZXIqPihmYXN0TWFsbG9jKEhlYWRlcjo6c2l6ZSgpICsgc2l6ZW9mKFQpICogb3Ro
ZXIuc2l6ZSgpKSkpLT5wYXlsb2FkKCk7Ci0gICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9k
YXRhKS0+cmVmQ291bnQgPSAxOwotICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSkt
Pmxlbmd0aCA9IG90aGVyLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKEhlYWRlcjo6ZnJvbVBheWxv
YWQobV9kYXRhKS0+bGVuZ3RoID09IG90aGVyLnNpemUoKSk7Ci0gICAgICAgIFZlY3RvclR5cGVP
cGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQo
KSwgbV9kYXRhKTsKLSAgICB9Ci0gICAgCi0gICAgUmVmQ291bnRlZEFycmF5JiBvcGVyYXRvcj0o
Y29uc3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIFQqIG9sZERhdGEg
PSBtX2RhdGE7Ci0gICAgICAgIG1fZGF0YSA9IG90aGVyLm1fZGF0YTsKLSAgICAgICAgaWYgKG1f
ZGF0YSkKLSAgICAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQr
KzsKLSAgICAgICAgCisgICAgICAgIFQqIGRhdGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVyKj4oZmFz
dE1hbGxvYyhIZWFkZXI6OnNpemUoKSArIHNpemVvZihUKSAqIG90aGVyLnNpemUoKSkpKS0+cGF5
bG9hZCgpOworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBIZWFkZXI6OmZyb21QYXls
b2FkKGRhdGEpLT5yZWZDb3VudCA9IDE7CisgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0
YSktPmxlbmd0aCA9IG90aGVyLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKEhlYWRlcjo6ZnJvbVBh
eWxvYWQoZGF0YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOworICAgICAgICBWZWN0b3JUeXBl
T3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5k
KCksIGRhdGEpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0
cyA9IFB0clRyYWl0cz4KKyAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZD
b3VudGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBvdGhlcikKKyAgICB7CisgICAgICAgIFQqIG9s
ZERhdGEgPSBkYXRhKCk7CisgICAgICAgIFQqIG90aGVyRGF0YSA9IGNvbnN0X2Nhc3Q8VCo+KG90
aGVyLmRhdGEoKSk7CisgICAgICAgIGlmIChvdGhlckRhdGEpCisgICAgICAgICAgICBIZWFkZXI6
OmZyb21QYXlsb2FkKG90aGVyRGF0YSktPnJlZkNvdW50Kys7CisgICAgICAgIG1fZGF0YSA9IG90
aGVyRGF0YTsKKwogICAgICAgICBpZiAoIW9sZERhdGEpCiAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgICAgIGlmICgtLUhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0YSktPnJlZkNvdW50
KQpAQCAtMTEwLDQ0ICsxMTksNDcgQEAgcHVibGljOgogICAgICAgICBmYXN0RnJlZShIZWFkZXI6
OmZyb21QYXlsb2FkKG9sZERhdGEpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLSAg
ICAKKyAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkm
IG90aGVyKSB7IHJldHVybiB0aGlzLT5vcGVyYXRvcj08UHRyVHJhaXRzPihvdGhlcik7IH0KKwog
ICAgIH5SZWZDb3VudGVkQXJyYXkoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2RhdGEpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgtLUhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRh
KS0+cmVmQ291bnQpCisgICAgICAgIFQqIGRhdGEgPSB0aGlzLT5kYXRhKCk7CisgICAgICAgIGlm
ICgtLUhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPnJlZkNvdW50KQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6ZGVzdHJ1Y3QoYmVnaW4oKSwg
ZW5kKCkpOwotICAgICAgICBmYXN0RnJlZShIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSkpOwor
ICAgICAgICBmYXN0RnJlZShIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpKTsKICAgICB9CiAgICAg
CiAgICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2Rh
dGEpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIEhlYWRlcjo6ZnJvbVBh
eWxvYWQobV9kYXRhKS0+cmVmQ291bnQ7CisgICAgICAgIHJldHVybiBIZWFkZXI6OmZyb21QYXls
b2FkKGRhdGEoKSktPnJlZkNvdW50OwogICAgIH0KICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoIW1fZGF0YSkKICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGg7CisgICAg
ICAgIHJldHVybiBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEoKSktPmxlbmd0aDsKICAgICB9CiAg
ICAgCiAgICAgc2l6ZV90IGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpICogc2l6ZW9m
KFQpOyB9CiAgICAgCi0gICAgVCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQotICAgIFQqIGJl
Z2luKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgVCogZGF0YSgpIHsgcmV0dXJuIFB0clRyYWl0
czo6dW53cmFwKG1fZGF0YSk7IH0KKyAgICBUKiBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQog
ICAgIFQqIGVuZCgpCiAgICAgewogICAgICAgICBpZiAoIW1fZGF0YSkKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICByZXR1cm4gbV9kYXRhICsgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2Rh
dGEpLT5sZW5ndGg7CisgICAgICAgIFQqIGRhdGEgPSB0aGlzLT5kYXRhKCk7CisgICAgICAgIHJl
dHVybiBkYXRhICsgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+bGVuZ3RoOwogICAgIH0KICAg
ICAKLSAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgY29u
c3QgVCogYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBjb25zdCBUKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxSZWZDb3VudGVkQXJyYXkqPih0aGlzKS0+ZGF0
YSgpOyB9CisgICAgY29uc3QgVCogYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PFJl
ZkNvdW50ZWRBcnJheSo+KHRoaXMpLT5iZWdpbigpOyB9CiAgICAgY29uc3QgVCogZW5kKCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxSZWZDb3VudGVkQXJyYXkqPih0aGlzKS0+ZW5kKCk7IH0K
ICAgICAKICAgICBUJiBhdChzaXplX3QgaSkKQEAgLTE2NSwyMSArMTc3LDI1IEBAIHB1YmxpYzoK
ICAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIGNvbnN0
IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAKLSAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikgY29uc3QKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0cyA9IFB0clRyYWl0cz4KKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgUmVmQ291bnRlZEFycmF5PFQsIE90aGVyVHJhaXRzPiYgb3RoZXIpIGNvbnN0
CiAgICAgewotICAgICAgICBpZiAobV9kYXRhID09IG90aGVyLm1fZGF0YSkKKyAgICAgICAgVCog
ZGF0YSA9IGNvbnN0X2Nhc3Q8VCo+KHRoaXMtPmRhdGEoKSk7CisgICAgICAgIFQqIG90aGVyRGF0
YSA9IGNvbnN0X2Nhc3Q8VCo+KG90aGVyLmRhdGEoKSk7CisgICAgICAgIGlmIChkYXRhID09IG90
aGVyRGF0YSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIW1fZGF0YSB8
fCAhb3RoZXIubV9kYXRhKQorICAgICAgICBpZiAoIWRhdGEgfHwgIW90aGVyRGF0YSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gSGVhZGVyOjpm
cm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGg7Ci0gICAgICAgIGlmIChsZW5ndGggIT0gSGVhZGVy
Ojpmcm9tUGF5bG9hZChvdGhlci5tX2RhdGEpLT5sZW5ndGgpCisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPmxlbmd0aDsKKyAgICAgICAgaWYgKGxl
bmd0aCAhPSBIZWFkZXI6OmZyb21QYXlsb2FkKG90aGVyRGF0YSktPmxlbmd0aCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9kYXRhW2ldICE9IG90aGVyLm1fZGF0YVtpXSkK
KyAgICAgICAgICAgIGlmIChkYXRhW2ldICE9IG90aGVyRGF0YVtpXSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKSBjb25zdCB7
IHJldHVybiB0aGlzLT5vcGVyYXRvcj09PFB0clRyYWl0cz4ob3RoZXIpOyB9CiAgICAgCiBwcml2
YXRlOgogICAgIHN0cnVjdCBIZWFkZXIgewpAQCAtMjAyLDEzICsyMTgsMzIgQEAgcHJpdmF0ZToK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYWRl
cio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBheWxvYWQpIC0gc2l6ZSgpKTsKICAgICAgICAg
fQorCisgICAgICAgIHN0YXRpYyBjb25zdCBIZWFkZXIqIGZyb21QYXlsb2FkKGNvbnN0IFQqIHBh
eWxvYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmcm9tUGF5bG9hZChjb25zdF9j
YXN0PFQqPihwYXlsb2FkKSk7CisgICAgICAgIH0KICAgICB9OwotICAgIAotICAgIFQqIG1fZGF0
YTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzPgorICAgIFJlZkNvdW50ZWRB
cnJheShDb21tb25Db3B5Q29uc3RydWN0b3JUYWcsIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxULCBP
dGhlclRyYWl0cz4mIG90aGVyKQorICAgICAgICA6IG1fZGF0YShjb25zdF9jYXN0PFQqPihvdGhl
ci5kYXRhKCkpKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIEhlYWRl
cjo6ZnJvbVBheWxvYWQoZGF0YSgpKS0+cmVmQ291bnQrKzsKKyAgICB9CisKKyAgICB0eXBlbmFt
ZSBQdHJUcmFpdHM6OlN0b3JhZ2VUeXBlIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKK3RlbXBs
YXRlPHVpbnQzMl90IGtleSwgdHlwZW5hbWUgVD4gc3RydWN0IENvbnN0RXhwclBvaXNvbmVkUHRy
VHJhaXRzOworCit0ZW1wbGF0ZTx1aW50MzJfdCBrZXksIHR5cGVuYW1lIFQ+Cit1c2luZyBQb2lz
b25lZFJlZkNvdW50ZWRBcnJheSA9IFJlZkNvdW50ZWRBcnJheTxULCBDb25zdEV4cHJQb2lzb25l
ZFB0clRyYWl0czxrZXksIFQ+PjsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6
UG9pc29uZWRSZWZDb3VudGVkQXJyYXk7CiB1c2luZyBXVEY6OlJlZkNvdW50ZWRBcnJheTsKIAog
I2VuZGlmIC8vIFJlZkNvdW50ZWRBcnJheV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZBc3Nl
cnRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XVEZBc3NlcnRpb25zLmNw
cAkocmV2aXNpb24gMjI2MzQ4KQorKysgU291cmNlL1dURi93dGYvV1RGQXNzZXJ0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxNCBAQAogCiAjaW5jbHVkZSA8d3RmL1BvaXNv
bmVkLmg+CiAjaW5jbHVkZSA8d3RmL1BvaXNvbmVkVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKIG5hbWVzcGFjZSB7CiBzdHJ1Y3QgRHVtbXlTdHJ1Y3QgeyB9OworY29uc3QgdWlu
dDMyX3QgZHVtbXlQb2lzb24gPSAweGZmZmY7CiB9CiAKICNpZiBFTkFCTEUoUE9JU09OKQpAQCAt
NjYsMTQgKzY4LDE2IEBAIHN0YXRpY19hc3NlcnQoIShtYWtlQ29uc3RFeHByUG9pc29uKDB4ZmYK
ICNlbmRpZiAvLyBFTkFCTEUoUE9JU09OKQogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihSZWY8RHVt
bXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOwotc3RhdGljX2Fzc2VydChz
aXplb2YoUG9pc29uZWRSZWY8MHhmZmZmLCBEdW1teVN0cnVjdD4pID09IHNpemVvZihEdW1teVN0
cnVjdCopLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFJlZjxkdW1teVBvaXNv
biwgRHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOwogCiBzdGF0aWNf
YXNzZXJ0KHNpemVvZihSZWZQdHI8RHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3Qq
KSwgIiIpOwotc3RhdGljX2Fzc2VydChzaXplb2YoUG9pc29uZWRSZWZQdHI8MHhmZmZmLCBEdW1t
eVN0cnVjdD4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNp
emVvZihQb2lzb25lZFJlZlB0cjxkdW1teVBvaXNvbiwgRHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2Yo
RHVtbXlTdHJ1Y3QqKSwgIiIpOwogCi1zdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFVuaXF1
ZVB0cjwweGZmZmYsIER1bW15U3RydWN0PikgPT0gc2l6ZW9mKER1bW15U3RydWN0KiksICIiKTsK
LXN0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkVW5pcXVlUHRyPDB4ZmZmZiwgaW50W10+KSA9
PSBzaXplb2YoaW50KiksICIiKTsKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkVW5pcXVl
UHRyPDB4ZmZmZiwgRHVtbXlTdHJ1Y3RbXT4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7
CitzdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFVuaXF1ZVB0cjxkdW1teVBvaXNvbiwgRHVt
bXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOworc3RhdGljX2Fzc2VydChz
aXplb2YoUG9pc29uZWRVbmlxdWVQdHI8ZHVtbXlQb2lzb24sIGludFtdPikgPT0gc2l6ZW9mKGlu
dCopLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFVuaXF1ZVB0cjxkdW1teVBv
aXNvbiwgRHVtbXlTdHJ1Y3RbXT4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7CisKK3N0
YXRpY19hc3NlcnQoc2l6ZW9mKFJlZkNvdW50ZWRBcnJheTxEdW1teVN0cnVjdD4pID09IHNpemVv
Zih2b2lkKiksICIiKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>330662</attachid>
            <date>2018-01-07 15:31:07 -0800</date>
            <delta_ts>2018-01-07 15:31:07 -0800</delta_ts>
            <desc>x86_64 benchmark results.</desc>
            <filename>bench-results-x86_64.txt</filename>
            <type>text/plain</type>
            <size>8286</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">JCBzbGVlcCA1ICYmIC4uL3dzMi9JbnRlcm5hbC9Ub29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2ht
YXJrcyAtLW91dGVyIDYgYmFzZTpiYXNlL2pzYyBuZXc6bmV3L2pzYyAtLXN1bnNwaWRlciAtLW9j
dGFuZSAtLWtyYWtlbgoKQmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBPY3RhbmUsIGFu
ZCBLcmFrZW4gb24gQ2hyb25vbiAoTWFjQm9va1BybzExLDEpLgoKVk1zIHRlc3RlZDoKImJhc2Ui
IGF0IC9Wb2x1bWVzL0RhdGEvYmVuY2gvYmFzZS9qc2MKIm5ldyIgYXQgL1ZvbHVtZXMvRGF0YS9i
ZW5jaC9uZXcvanNjCgpDb2xsZWN0ZWQgNiBzYW1wbGVzIHBlciBiZW5jaG1hcmsvVk0sIHdpdGgg
NiBWTSBpbnZvY2F0aW9ucyBwZXIgYmVuY2htYXJrLiBFbWl0dGVkIGEgY2FsbCB0byBnYygpIGJl
dHdlZW4gc2FtcGxlCm1lYXN1cmVtZW50cy4gVXNlZCAxIGJlbmNobWFyayBpdGVyYXRpb24gcGVy
IFZNIGludm9jYXRpb24gZm9yIHdhcm0tdXAuIFVzZWQgdGhlIGpzYy1zcGVjaWZpYyBwcmVjaXNl
VGltZSgpIGZ1bmN0aW9uIHRvCmdldCBtaWNyb3NlY29uZC1sZXZlbCB0aW1pbmcuIFJlcG9ydGlu
ZyBiZW5jaG1hcmsgZXhlY3V0aW9uIHRpbWVzIHdpdGggOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxz
IGluIG1pbGxpc2Vjb25kcy4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2UgICAgICAgICAgICAgICAgICAgICAgbmV3ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIApTdW5TcGlkZXI6CiAgIDNkLWN1YmUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA2LjQ4OTgrLTAuMjkwMiAgICAgPyAgICAgIDYuNjU4
MCstMC42MTQzICAgICAgICA/IG1pZ2h0IGJlIDEuMDI1OXggc2xvd2VyCiAgIDNkLW1vcnBoICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjA3NTUrLTAuNDk4OCAgICAgPyAgICAg
IDcuNzA2MCstMS4xOTk2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDg5MXggc2xvd2VyCiAgIDNkLXJh
eXRyYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjI2ODErLTEuMTA1MiAgICAg
ICAgICAgIDcuMDczMCstMC45NDUxICAgICAgICAgIG1pZ2h0IGJlIDEuMDI3NnggZmFzdGVyCiAg
IGFjY2Vzcy1iaW5hcnktdHJlZXMgICAgICAgICAgICAgICAgICAgICAgICA0LjUwMDgrLTEuMzIx
MyAgICAgICAgICAgIDQuNDM5MCstMS4zMTgzICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzOXggZmFz
dGVyCiAgIGFjY2Vzcy1mYW5ua3VjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjE4NDYr
LTAuMzI5NyAgICAgPyAgICAgIDkuNTE1MSstMS40MDcyICAgICAgICA/IG1pZ2h0IGJlIDEuMDM2
MHggc2xvd2VyCiAgIGFjY2Vzcy1uYm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0
LjIwMTArLTAuNTg0MyAgICAgPyAgICAgIDQuODIyOCstMi4yNjA1ICAgICAgICA/IG1pZ2h0IGJl
IDEuMTQ4MHggc2xvd2VyCiAgIGFjY2Vzcy1uc2lldmUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA0LjczOTgrLTEuMzQ1MCAgICAgICAgICAgIDQuNzIxMCstMS4yNjQxICAgICAgICAKICAg
Yml0b3BzLTNiaXQtYml0cy1pbi1ieXRlICAgICAgICAgICAgICAgICAgIDEuODc3MSstMC4xNjgz
ICAgICA/ICAgICAgMi4wMzgyKy0wLjU1MjMgICAgICAgID8gbWlnaHQgYmUgMS4wODU4eCBzbG93
ZXIKICAgYml0b3BzLWJpdHMtaW4tYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgIDQuODgzMyst
MC41MTQ3ICAgICA/ICAgICAgNS4wMTY2Ky0xLjIwMjEgICAgICAgID8gbWlnaHQgYmUgMS4wMjcz
eCBzbG93ZXIKICAgYml0b3BzLWJpdHdpc2UtYW5kICAgICAgICAgICAgICAgICAgICAgICAgIDMu
MzU5NistMC45MDQ2ICAgICA/ICAgICAgMy41MTIyKy0xLjA5MDAgICAgICAgID8gbWlnaHQgYmUg
MS4wNDU0eCBzbG93ZXIKICAgYml0b3BzLW5zaWV2ZS1iaXRzICAgICAgICAgICAgICAgICAgICAg
ICAgIDYuMDI4MistMC45NTU2ICAgICA/ICAgICAgNi4xMTkzKy0wLjYwMjggICAgICAgID8gbWln
aHQgYmUgMS4wMTUxeCBzbG93ZXIKICAgY29udHJvbGZsb3ctcmVjdXJzaXZlICAgICAgICAgICAg
ICAgICAgICAgIDUuMTIyMSstMS4zNTA2ICAgICAgICAgICAgNC4zMjI0Ky0wLjgyOTYgICAgICAg
ICAgbWlnaHQgYmUgMS4xODUweCBmYXN0ZXIKICAgY3J5cHRvLWFlcyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDYuNDcwNCstMC42MjY3ICAgICA/ICAgICAgNi43NjE5Ky0xLjEwMzMg
ICAgICAgID8gbWlnaHQgYmUgMS4wNDUweCBzbG93ZXIKICAgY3J5cHRvLW1kNSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQuNjc1MSstMC45NjE1ICAgICA/ICAgICAgNC45MjYyKy0w
LjY2NTggICAgICAgID8gbWlnaHQgYmUgMS4wNTM3eCBzbG93ZXIKICAgY3J5cHRvLXNoYTEgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNTI0NCstMC44NjUxICAgICA/ICAgICAgNC43
OTE4Ky0wLjgzNjQgICAgICAgID8gbWlnaHQgYmUgMS4wNTkxeCBzbG93ZXIKICAgZGF0ZS1mb3Jt
YXQtdG9mdGUgICAgICAgICAgICAgICAgICAgICAgICAgMTAuODEyNystMC45NjAyICAgICAgICAg
ICAxMC41NDU3Ky0xLjAwNTkgICAgICAgICAgbWlnaHQgYmUgMS4wMjUzeCBmYXN0ZXIKICAgZGF0
ZS1mb3JtYXQteHBhcmIgICAgICAgICAgICAgICAgICAgICAgICAgIDguNTg2NistMS4zMzg0ICAg
ICA/ICAgICAgOC43NDYxKy0yLjQ0NTAgICAgICAgID8gbWlnaHQgYmUgMS4wMTg2eCBzbG93ZXIK
ICAgbWF0aC1jb3JkaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNjY1NystMS4w
MjIxICAgICAgICAgICAgNC42NDM3Ky0xLjA1NDkgICAgICAgIAogICBtYXRoLXBhcnRpYWwtc3Vt
cyAgICAgICAgICAgICAgICAgICAgICAgICAgNi4yOTg2Ky0wLjk1ODUgICAgICAgICAgICA1Ljg5
ODkrLTAuNjY3MCAgICAgICAgICBtaWdodCBiZSAxLjA2Nzh4IGZhc3RlcgogICBtYXRoLXNwZWN0
cmFsLW5vcm0gICAgICAgICAgICAgICAgICAgICAgICAgMy4xOTY4Ky0wLjg0NzIgICAgID8gICAg
ICAzLjM0ODErLTEuMDU5NiAgICAgICAgPyBtaWdodCBiZSAxLjA0NzN4IHNsb3dlcgogICByZWdl
eHAtZG5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC45MzIwKy0wLjU1OTkgICAg
ICAgICAgICA4Ljg4NTMrLTAuMzQ0NyAgICAgICAgCiAgIHN0cmluZy1iYXNlNjQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA2LjMyMjYrLTAuOTYzMiAgICAgPyAgICAgIDYuNTI4MistMS4x
NTAyICAgICAgICA/IG1pZ2h0IGJlIDEuMDMyNXggc2xvd2VyCiAgIHN0cmluZy1mYXN0YSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA5LjAwNDgrLTAuOTgzMCAgICAgPyAgICAgIDkuMDkz
OCstMS41NjA2ICAgICAgICA/CiAgIHN0cmluZy10YWdjbG91ZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEyLjc1MzIrLTAuNDk4NCAgICAgICAgICAgMTIuMjkwNCstMC42NjU0ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDM3N3ggZmFzdGVyCiAgIHN0cmluZy11bnBhY2stY29kZSAgICAgICAgICAg
ICAgICAgICAgICAgIDI3LjMzNTErLTAuNjI4MyAgICAgICAgICAgMjYuMDE1MystMC43NTUwICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDUwN3ggZmFzdGVyCiAgIHN0cmluZy12YWxpZGF0ZS1pbnB1dCAg
ICAgICAgICAgICAgICAgICAgICA3LjE1MDcrLTAuNDI2NSAgICAgPyAgICAgIDcuNjEyMCstMS4z
MTcxICAgICAgICA/IG1pZ2h0IGJlIDEuMDY0NXggc2xvd2VyCgogICA8YXJpdGhtZXRpYz4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNy4xMzMwKy0wLjE0MTAgICAgID8gICAgICA3LjE1
NTArLTAuMjU2OSAgICAgICAgPyBtaWdodCBiZSAxLjAwMzF4IHNsb3dlcgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAgICAgICAgICAgICAg
ICAgICAgICBuZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCk9jdGFu
ZToKICAgZW5jcnlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMjgxNSst
MC4wMDQ2OSAgICAgICAgICAwLjIyNTM2Ky0wLjAwMjIxICAgICAgICAgbWlnaHQgYmUgMS4wMTI0
eCBmYXN0ZXIKICAgZGVjcnlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4z
MTgyMCstMC4xNDkyNCAgICAgICAgICA0LjIxNjczKy0wLjEzNTA5ICAgICAgICAgbWlnaHQgYmUg
MS4wMjQxeCBmYXN0ZXIKICAgZGVsdGFibHVlICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAg
ICAgMC4xNzUwMistMC4wMDY4NyAgICAgICAgICAwLjE3NDgxKy0wLjAxMDg5ICAgICAgIAogICBl
YXJsZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQzMzgxKy0wLjAwNjg3
ICAgICAgICAgIDAuNDMzMTMrLTAuMDEwNDggICAgICAgCiAgIGJveWVyICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDcuNzc4MDkrLTAuMTM4MTQgICAgPyAgICAgOC4wMTEwMyst
MC40MzE0MCAgICAgICA/IG1pZ2h0IGJlIDEuMDI5OXggc2xvd2VyCiAgIG5hdmllci1zdG9rZXMg
ICAgICAgICAgICAgICAgICAgIHgyICAgICAgIDYuOTI0NzgrLTAuMTI5MDYgICAgICAgICAgNi44
MjczMystMC4wMjk4MCAgICAgICAgIG1pZ2h0IGJlIDEuMDE0M3ggZmFzdGVyCiAgIHJheXRyYWNl
ICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgIDEuMDkzMzcrLTAuMDEwNTYgICAgICAg
ICAgMS4wODk2MSstMC4wMTUxNiAgICAgICAKICAgcmljaGFyZHMgICAgICAgICAgICAgICAgICAg
ICAgICAgeDIgICAgICAgMC4xMTA0MSstMC4wMDI0MSAgICAgICAgICAwLjEwOTU4Ky0wLjAwMTcy
ICAgICAgIAogICBzcGxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgICAwLjU1
OTExKy0wLjA0MTMzICAgICAgICAgIDAuNTQ1NTMrLTAuMDA2MzAgICAgICAgICBtaWdodCBiZSAx
LjAyNDl4IGZhc3RlcgogICByZWdleHAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAg
IDI0LjY0NDA2Ky0wLjQyMDM3ICAgICAgICAgMjQuNjI1NTYrLTAuNDU2NDIgICAgICAgCiAgIHBk
ZmpzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgNTQuNDY5NjArLTEuMDM2NTYg
ICAgPyAgICA1NS40NDk0NistMy45NzAwOSAgICAgICA/IG1pZ2h0IGJlIDEuMDE4MHggc2xvd2Vy
CiAgIG1hbmRyZWVsICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgODEuMTM3MTYrLTYu
MDYxNTggICAgICAgICA3OS44MTI3MSstMC42MjQxNSAgICAgICAgIG1pZ2h0IGJlIDEuMDE2Nngg
ZmFzdGVyCiAgIGdiZW11ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgNTQuMjk2
MzIrLTcuNjU2MTggICAgICAgICA1MS4xMTMwNCstMC45MTI3OCAgICAgICAgIG1pZ2h0IGJlIDEu
MDYyM3ggZmFzdGVyCiAgIGNsb3N1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAuNjk4MjErLTAuMDQzNzUgICAgICAgICAgMC42OTE5NistMC4wMDQyMSAgICAgICAKICAganF1
ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS4yODE2MystMC4wNTQ1MCAg
ICA/ICAgICA5LjM1MTA3Ky0wLjA2NzkzICAgICAgID8KICAgYm94MmQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeDIgICAgICAxMy43MDY2NistMC4yMDY4NiAgICAgICAgIDEzLjUyNjYwKy0w
LjE5NTM1ICAgICAgICAgbWlnaHQgYmUgMS4wMTMzeCBmYXN0ZXIKICAgemxpYiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeDIgICAgIDUyOS4xNjUzNistNC4xMTM1MyAgICA/ICAgNTYwLjYx
MjIxKy00NC4wMzQ4OSAgICAgID8gbWlnaHQgYmUgMS4wNTk0eCBzbG93ZXIKICAgdHlwZXNjcmlw
dCAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgMTA1My40NTY1OCstMTcuNTI0NjEgICAgICAx
MDM0Ljc1ODI2Ky0zMi42NzYzNSAgICAgICAgbWlnaHQgYmUgMS4wMTgxeCBmYXN0ZXIKCiAgIDxn
ZW9tZXRyaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNjE5OTUrLTAuMTE0OTAg
ICAgICAgICAgNy41Nzc0MystMC4wNzY2MSAgICAgICAgIG1pZ2h0IGJlIDEuMDA1NnggZmFzdGVy
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
ICAgICAgICAgICAgICAgICAgICAgIG5ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKS3Jha2VuOgogICBhaS1hc3RhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxMzguNzMxKy01LjEwMiAgICAgID8gICAgIDE0MS4zNDQrLTguNjYyICAgICAgICAgPyBt
aWdodCBiZSAxLjAxODh4IHNsb3dlcgogICBhdWRpby1iZWF0LWRldGVjdGlvbiAgICAgICAgICAg
ICAgICAgICAgICAgNjYuODc4Ky0xLjYwMyAgICAgID8gICAgICA2Ny4wMDArLTEuNTA3ICAgICAg
ICAgPwogICBhdWRpby1kZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTUuNDQ2
Ky0zLjU5OCAgICAgID8gICAgIDE3OC40MDcrLTU3LjUyNCAgICAgICAgPyBtaWdodCBiZSAxLjE0
Nzd4IHNsb3dlcgogICBhdWRpby1mZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NTAuMTU1Ky0xLjQ1MSAgICAgID8gICAgICA1Mi4zMTQrLTYuMDQ4ICAgICAgICAgPyBtaWdodCBi
ZSAxLjA0MzB4IHNsb3dlcgogICBhdWRpby1vc2NpbGxhdG9yICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNjYuODc4Ky0xLjYxOSAgICAgICAgICAgICA2Ni40NDkrLTEuNDk1ICAgICAgICAgCiAg
IGltYWdpbmctZGFya3Jvb20gICAgICAgICAgICAgICAgICAgICAgICAgICA4OC44MjgrLTEwLjY3
NCAgICAgICAgICAgIDgyLjQyMSstMS40MjIgICAgICAgICAgIG1pZ2h0IGJlIDEuMDc3N3ggZmFz
dGVyCiAgIGltYWdpbmctZGVzYXR1cmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICA5MS4yNTMr
LTYuMTgyICAgICAgICAgICAgIDg2LjUxNCstNS40NDcgICAgICAgICAgIG1pZ2h0IGJlIDEuMDU0
OHggZmFzdGVyCiAgIGltYWdpbmctZ2F1c3NpYW4tYmx1ciAgICAgICAgICAgICAgICAgICAgIDEw
OS4xMzErLTUuMTM5ICAgICAgPyAgICAgMTEzLjU2NCstOC4xMDggICAgICAgICA/IG1pZ2h0IGJl
IDEuMDQwNnggc2xvd2VyCiAgIGpzb24tcGFyc2UtZmluYW5jaWFsICAgICAgICAgICAgICAgICAg
ICAgICA0Ni41NDIrLTEuMTkxICAgICAgPyAgICAgIDQ3LjA1NystMi4xODMgICAgICAgICA/IG1p
Z2h0IGJlIDEuMDExMXggc2xvd2VyCiAgIGpzb24tc3RyaW5naWZ5LXRpbmRlcmJveCAgICAgICAg
ICAgICAgICAgICAyOC41OTUrLTEuOTc5ICAgICAgICAgICAgIDI4LjIwMCstMi4yNTMgICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDE0MHggZmFzdGVyCiAgIHN0YW5mb3JkLWNyeXB0by1hZXMgICAgICAg
ICAgICAgICAgICAgICAgICA1NS41OTMrLTIuMDcwICAgICAgPyAgICAgIDU1LjcwMCstMy42MTQg
ICAgICAgICA/CiAgIHN0YW5mb3JkLWNyeXB0by1jY20gICAgICAgICAgICAgICAgICAgICAgICA1
MS41MjMrLTQuNjY5ICAgICAgPyAgICAgIDUzLjQ5NistNS43MzQgICAgICAgICA/IG1pZ2h0IGJl
IDEuMDM4M3ggc2xvd2VyCiAgIHN0YW5mb3JkLWNyeXB0by1wYmtkZjIgICAgICAgICAgICAgICAg
ICAgICA5MC4zMDgrLTYuOTE2ICAgICAgICAgICAgIDg5LjM0NCstMi45ODMgICAgICAgICAgIG1p
Z2h0IGJlIDEuMDEwOHggZmFzdGVyCiAgIHN0YW5mb3JkLWNyeXB0by1zaGEyNTYtaXRlcmF0aXZl
ICAgICAgICAgICAyOC4wODArLTAuODg0ICAgICAgICAgICAgIDI3Ljc5MystMC44NDIgICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDEwM3ggZmFzdGVyCgogICA8YXJpdGhtZXRpYz4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNzYuMjgxKy0wLjYwNyAgICAgID8gICAgICA3Ny44MjkrLTUuMzI5
ICAgICAgICAgPyBtaWdodCBiZSAxLjAyMDN4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAgICAgICAgICAgICAgICAgICAgICBu
ZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkdlb21lYW4gb2YgcHJl
ZmVycmVkIG1lYW5zOgogICA8c2NhbGVkLXJlc3VsdD4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAxNi4wNjQzKy0wLjE2MjUgICAgID8gICAgIDE2LjE1MDIrLTAuMzM0MyAgICAgICAgPyBtaWdo
dCBiZSAxLjAwNTN4IHNsb3dlcgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330665</attachid>
            <date>2018-01-07 18:06:43 -0800</date>
            <delta_ts>2018-01-08 10:12:48 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-181096.patch</filename>
            <type>text/plain</type>
            <size>78690</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI2NDk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE4LTAxLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
cHBseSBwb2lzb25pbmcgdG8gbW9yZSBwb2ludGVycyBpbiBKU0MuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEwOTYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM2MTgyOTcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjp4b3JQdHIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvcjY0KToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnhvcjY0KToKKyAgICAgICAgLSBBZGQgeG9yUHRyIGltcGxl
bWVudGF0aW9uLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjppbmZlcnJlZE5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp2aXNpdFdlYWtseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OnZpc2l0V2Vha1Jl
ZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVD
YWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxp
bmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6
ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
ZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVT
aXplKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxG
aW5hbGl6ZXI6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvQmVnaW4pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnN0dWJJbmZvRW5kKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsTGlua0lu
Zm9zQmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxMaW5rSW5mb3NFbmQpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aW5zdHJ1Y3Rpb25zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2
bSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOgorICAg
ICAgICAoSlNDOjpERkc6OmFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRDb21waWxlclRodW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogbGxpbnQvTExJbnRPZmZsaW5lQXNt
Q29uZmlnLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBwYXJzZXIv
VW5saW5rZWRTb3VyY2VDb2RlLmg6CisgICAgICAgICogcnVudGltZS9KU0NQb2lzb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OmluaXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmg6CisgICAgICAgICogcnVu
dGltZS9KU1NjcmlwdEZldGNoZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6VW5jb25kaXRp
b25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorCiAyMDE4LTAxLTA2ICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eU5hbWVzIGluY2x1ZGVzICJhcmd1bWVudHMiIGFuZCAiY2FsbGVyIiBmb3IgYm91bmQgZnVuY3Rp
b25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTIsNiArNjUyLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgeG9yMzIoaW1tLCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICB2
b2lkIHhvclB0cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsK
KyAgICAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAg
IHZvaWQgeG9yUHRyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICB4b3IzMihzcmMsIGRlc3QpOwpAQCAtOTkxLDYgKzk5NiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHhvcjY0KGltbSwgc3JjRGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB4b3JQdHIoVHJ1c3RlZElt
bVB0ciBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW02NChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGxvYWRQdHIoSW1wbGlj
aXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGxvYWQ2
NChhZGRyZXNzLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTk5MSw2ICs5OTEsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fQogCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CisgICAgeworICAgICAgICB4b3I2NChpbW0sIHNyY0Rlc3QsIHNyY0Rlc3QpOworICAgIH0KKwog
ICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgJKHJldmlzaW9uIDIyNjQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwOSw2ICs4
MDksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2lyKGltbS5tX3ZhbHVl
LCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW02NCBpbW0sIFJl
Z2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0
ZXIoKSk7CisgICAgICAgIHhvcjY0KHNjcmF0Y2hSZWdpc3RlcigpLCBzcmNEZXN0KTsKKyAgICB9
CisKICAgICB2b2lkIG5vdDY0KFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLm5vdHFfcihzcmNEZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNo
IDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTAxLDYgKzEw
MSwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzLCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgor
UG9pc29uZWRVbmlxdWVQdHI8Q29kZUJsb2NrUG9pc29uLCBUPiBtYWtlUG9pc29uZWRVbmlxdWUo
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBXVEY6Om1ha2VQb2lzb25l
ZFVuaXF1ZTxDb2RlQmxvY2tQb2lzb24sIFQ+KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogY29uc3QgQ2xhc3NJ
bmZvIENvZGVCbG9jazo6c19pbmZvID0gewogICAgICJDb2RlQmxvY2siLCBudWxscHRyLCBudWxs
cHRyLCBudWxscHRyLAogICAgIENSRUFURV9NRVRIT0RfVEFCTEUoQ29kZUJsb2NrKQpAQCAtMzA3
LDEyICszMTcsMTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25zdHJ1Y3RvcikKICAgICAsIG1faXNT
dHJpY3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQogICAgICwgbV9jb2RlVHlwZShvdGhlci5t
X2NvZGVUeXBlKQotICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fdm0sIHRoaXMsIG90aGVy
Lm1fdW5saW5rZWRDb2RlLmdldCgpKQorICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLnZtKCks
IHRoaXMsIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwgbV9udW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICwgbV9oYXNE
ZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKICAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9k
ZURpc2FibGVkKQogICAgICwgbV9udW1CcmVha3BvaW50cygwKQotICAgICwgbV9vd25lckV4ZWN1
dGFibGUoKm90aGVyLm1fdm0sIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQor
ICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJF
eGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVj
dGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5t
X3RoaXNSZWdpc3RlcikKQEAgLTMyOSw2ICszMzksOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQog
ICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogICAgICwgbV9jcmVhdGlvblRp
bWUoTW9ub3RvbmljVGltZTo6bm93KCkpCisgICAgLCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIo
bWFrZVBvaXNvbmVkVW5pcXVlPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+KCp0aGlzKSkKKyAgICAs
IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcihtYWtlUG9pc29uZWRVbmlxdWU8V2Vha1JlZmVyZW5j
ZUhhcnZlc3Rlcj4oKnRoaXMpKQogewogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0g
ZmFsc2U7CiAKQEAgLTM4Nyw2ICszOTksOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwg
bV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogICAgICwgbV9jcmVhdGlvblRpbWUoTW9u
b3RvbmljVGltZTo6bm93KCkpCisgICAgLCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIobWFrZVBv
aXNvbmVkVW5pcXVlPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+KCp0aGlzKSkKKyAgICAsIG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcihtYWtlUG9pc29uZWRVbmlxdWU8V2Vha1JlZmVyZW5jZUhhcnZl
c3Rlcj4oKnRoaXMpKQogewogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0gZmFsc2U7
CiAKQEAgLTQyMiwxOSArNDM2LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFMKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKIAog
ICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9iamVjdCgpKQotICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3Rl
cigpLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50SW5kZXgoKV0uc2V0KHZtLCB0aGlzLCBtX2ds
b2JhbE9iamVjdC5nZXQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGlua1Rp
bWVDb25zdGFudENvdW50OyBpKyspIHsKICAgICAgICAgTGlua1RpbWVDb25zdGFudCB0eXBlID0g
c3RhdGljX2Nhc3Q8TGlua1RpbWVDb25zdGFudD4oaSk7CiAgICAgICAgIGlmICh1bnNpZ25lZCBy
ZWdpc3RlckluZGV4ID0gdW5saW5rZWRDb2RlQmxvY2stPnJlZ2lzdGVySW5kZXhGb3JMaW5rVGlt
ZUNvbnN0YW50KHR5cGUpKQotICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tyZWdpc3Rl
ckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LT5qc0NlbGxGb3JMaW5rVGlt
ZUNvbnN0YW50KHR5cGUpKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnaXN0
ZXJJbmRleF0uc2V0KHZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC0+anNDZWxsRm9yTGlua1RpbWVD
b25zdGFudCh0eXBlKSk7CiAgICAgfQogCiAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIHRoZSBjbG9u
ZWQgc3ltYm9sIHRhYmxlIGZvciB0aGUgbW9kdWxlIGVudmlyb25tZW50IHNpbmNlIHdlIG5lZWQg
dG8gaW5zdGFudGlhdGUKICAgICAvLyB0aGUgbW9kdWxlIGVudmlyb25tZW50cyBiZWZvcmUgbGlu
a2luZyB0aGUgY29kZSBibG9jay4gV2UgcmVwbGFjZSB0aGUgc3RvcmVkIHN5bWJvbCB0YWJsZSB3
aXRoIHRoZSBhbHJlYWR5IGNsb25lZCBvbmUuCiAgICAgaWYgKFVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrID0ganNEeW5hbWljQ2Fz
dDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPih2bSwgdW5saW5rZWRDb2RlQmxvY2sp
KSB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiBjbG9uZWRTeW1ib2xUYWJsZSA9IGpzQ2FzdDxNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSktPm1vZHVsZUVudmlyb25tZW50
U3ltYm9sVGFibGUoKTsKLSAgICAgICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKSB7CisgICAg
ICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgIGNsb25l
ZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwogICAgICAgICB9
CkBAIC00NDcsNyArNDYxLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRh
YmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChpKTsKICAgICAgICAgaWYgKHNo
b3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSkKICAgICAgICAgICAgIHZtLmZ1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRh
YmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9m
ZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7Ci0g
ICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQoKm1fdm0sIHRoaXMsIHVubGlua2VkRXhlY3V0
YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgICAgICBt
X2Z1bmN0aW9uRGVjbHNbaV0uc2V0KHZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmso
dm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICB9CiAKICAgICBtX2Z1bmN0aW9u
RXhwcnMgPSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+
KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7CkBAIC00NTUsNyAr
NDY5LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5r
ZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSkKICAgICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJ
RCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7Ci0gICAgICAgIG1fZnVu
Y3Rpb25FeHByc1tpXS5zZXQoKm1fdm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygq
bV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgICAgICBtX2Z1bmN0aW9uRXhw
cnNbaV0uc2V0KHZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsodm0sIG93bmVyRXhl
Y3V0YWJsZS0+c291cmNlKCkpKTsKICAgICB9CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2st
Pmhhc1JhcmVEYXRhKCkpIHsKQEAgLTg1Myw4ICs4NjcsOSBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7Ci0gICAg
aWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpCi0gICAgICAgIG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CisgICAgVk0m
IHZtID0gKm1fdm07CisgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikp
CisgICAgICAgIHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhp
cyk7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSA9PSBNaXhl
ZFRyaVN0YXRlKQogICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5zZXREaWRPcHRpbWl6ZShG
YWxzZVRyaVN0YXRlKTsKQEAgLTg3Niw3ICs4OTEsNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogICAgIC8vIGRlc3RydWN0b3JzLgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKEJhZzxT
dHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAq
aXRlcjsKICAgICAgICAgc3R1Yi0+YWJvdXRUb0RpZSgpOwogICAgICAgICBzdHViLT5kZXJlZigp
OwpAQCAtOTA5LDM3ICs5MjQsMzggQEAgdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRp
ZmllclNldAogCiB2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikK
IHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqbV92bSk7CisgICAgVk0m
IHZtID0gKm1fdm07CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAg
IEFTU0VSVChjb25zdGFudHMuc2l6ZSgpID09IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbi5zaXplKCkpOwogICAgIHNpemVfdCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAg
bV9jb25zdGFudFJlZ2lzdGVycy5yZXNpemVUb0ZpdChjb3VudCk7Ci0gICAgYm9vbCBoYXNUeXBl
UHJvZmlsZXIgPSAhIW1fdm0tPnR5cGVQcm9maWxlcigpOworICAgIGJvb2wgaGFzVHlwZVByb2Zp
bGVyID0gISF2bS50eXBlUHJvZmlsZXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50c1tpXS5nZXQo
KTsKIAogICAgICAgICBpZiAoIWNvbnN0YW50LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYg
KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPigq
bV92bSwgY29uc3RhbnQpKSB7CisgICAgICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KHZtLCBjb25zdGFudCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaGFzVHlwZVByb2ZpbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBjbG9uZSA9
IHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCgqbV92bSk7CisgICAgICAgICAgICAgICAgU3lt
Ym9sVGFibGUqIGNsb25lID0gc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KHZtKTsKICAgICAg
ICAgICAgICAgICBpZiAod2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpKQogICAgICAg
ICAgICAgICAgICAgICBjbG9uZS0+c2V0UmFyZURhdGFDb2RlQmxvY2sodGhpcyk7CiAKICAgICAg
ICAgICAgICAgICBjb25zdGFudCA9IGNsb25lOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc1Rl
bXBsYXRlUmVnaXN0cnlLZXkoKm1fdm0sIGNvbnN0YW50KSkgeworICAgICAgICAgICAgfSBlbHNl
IGlmIChpc1RlbXBsYXRlUmVnaXN0cnlLZXkodm0sIGNvbnN0YW50KSkgewogICAgICAgICAgICAg
ICAgIGF1dG8qIHRlbXBsYXRlT2JqZWN0ID0gZ2xvYmFsT2JqZWN0LT50ZW1wbGF0ZVJlZ2lzdHJ5
KCkuZ2V0VGVtcGxhdGVPYmplY3QoZXhlYywganNDYXN0PEpTVGVtcGxhdGVSZWdpc3RyeUtleSo+
KGNvbnN0YW50KSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICAgICAgICAgICAgICBjb25zdGFudCA9IHRlbXBsYXRlT2JqZWN0OwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5z
ZXQoKm1fdm0sIHRoaXMsIGNvbnN0YW50KTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tp
XS5zZXQodm0sIHRoaXMsIGNvbnN0YW50KTsKICAgICB9CiAKICAgICBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsK
QEAgLTk4OSw3ICsxMDA1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNp
dG9yJgogICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRp
bmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwogICAgIC8vIGlzIHByb2JhYmx5
IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4g
aXQgcnVucywgaXQKICAgICAvLyBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0
byBkby4KLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRp
b25hbEZpbmFsaXplcik7CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKG1f
dW5jb25kaXRpb25hbEZpbmFsaXplci5nZXQoKSk7CiAKICAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CkBAIC0xMDAxLDcgKzEwMTcs
NyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgLy8gVGhl
cmUgYXJlIHR3byB0aGluZ3MgdGhhdCB3ZSB1c2Ugd2VhayByZWZlcmVuY2UgaGFydmVzdGVycyBm
b3I6IERGRyBmaXhwb2ludCBmb3IKICAgICAvLyBqZXR0aXNvbmluZywgYW5kIHRyeWluZyB0byBm
aW5kIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBiZSBsaXZlIGJhc2VkIG9uIHNvbWUKICAgICAvLyBp
bmxpbmUgY2FjaGUuIFNvIGl0IG1ha2VzIHNlbnNlIHRvIHJlZ2lzdGVyIHRoZW0gcmVnYXJkbGVz
cy4KLSAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoJm1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3Rlcik7CisgICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5nZXQoKSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBXZSBnZXQgaGVyZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0IG91ciBvd25lciBl
eGVjdXRhYmxlIGlzIGxpdmUsCkBAIC0xMDQ1LDcgKzEwNjEsNyBAQCB2b2lkIENvZGVCbG9jazo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvCiAgICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUgcHJv
YmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdz
CiAgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBt
YXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAogICAgIC8vIGZpZ3VyZXMgb3V0IHdoZXRo
ZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZp
bmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKKyAgICB2aXNpdG9yLmFkZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIobV91bmNvbmRpdGlvbmFsRmluYWxpemVyLmdldCgpKTsKIAogICAg
IGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgp
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG90aGVyQmxvY2spOwpAQCAtMTE2
MSw2ICsxMTc3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
ICAgIGlmIChtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQpCiAgICAgICAgIHJldHVybjsK
IAorICAgIFZNJiB2bSA9ICptX3ZtOwogICAgIGJvb2wgYWxsQXJlTWFya2VkU29GYXIgPSB0cnVl
OwogICAgICAgICAKICAgICBpZiAoaml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspIHsKQEAgLTExNzQsOSArMTE5MSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8ICFuZXdT
dHJ1Y3R1cmVJRCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQotICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOworICAgICAgICAgICAgICAg
ICAgICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KLSAgICAgICAgICAgICAgICAg
ICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAg
ICAgICAgICAgICAgICAgICAgdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJl
KSkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTExOTEsNyArMTIwOCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKLSAgICAgICAgZm9yIChCYWc8U3Ry
dWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpCisgICAgICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpCiAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciAmPSAoKml0
ZXIpLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKICAgICB9CiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKQEAgLTEyNzksMTIgKzEyOTYsOCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5l
TGl2ZW5lc3MoY29uc3QgCiAKIHZvaWQgQ29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVy
Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0KLSAgICAgICAgYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAotICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikpOwotICAgIAotICAgIGNvZGVCbG9jay0+
cHJvcGFnYXRlVHJhbnNpdGlvbnMoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2aXNpdG9yKTsKLSAgICBj
b2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7
CisgICAgY29kZUJsb2NrLnByb3BhZ2F0ZVRyYW5zaXRpb25zKE5vTG9ja2luZ05lY2Vzc2FyeSwg
dmlzaXRvcik7CisgICAgY29kZUJsb2NrLmRldGVybWluZUxpdmVuZXNzKE5vTG9ja2luZ05lY2Vz
c2FyeSwgdmlzaXRvcik7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENh
Y2hlKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTEyOTcsNiArMTMxMCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENhY2hlKEkKIAogdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogeworICAgIFZNJiB2bSA9ICptX3ZtOwogICAgIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxp
bmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChzaXplX3Qg
c2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmluc3RydWN0
aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKQEAgLTEzMDUsNyArMTMxOSw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9hZDoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5z
ZXQ6IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gY3VySW5zdHJ1
Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQg
fHwgSGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKSkpCisgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6Omlz
TWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHJvcGVydHkg
YWNjZXNzLlxuIik7CkBAIC0xMzE2LDkgKzEzMzAsOSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJ
RCA9IGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7CiAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQ7CiAg
ICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBjdXJJbnN0cnVjdGlvbls3XS51LnN0
cnVjdHVyZUNoYWluLmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwg
SGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVj
dHVyZUlEKSkpICYmCi0gICAgICAgICAgICAgICAgKCFuZXdTdHJ1Y3R1cmVJRCB8fCBIZWFwOjpp
c01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQp
KSkgJiYKLSAgICAgICAgICAgICAgICAoIWNoYWluIHx8IEhlYXA6OmlzTWFya2VkKGNoYWluKSkp
CisgICAgICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtlZCh2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpKSkKKyAgICAgICAgICAg
ICAgICAmJiAoIW5ld1N0cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFya2VkKHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCkpKQorICAgICAgICAgICAgICAgICYmICgh
Y2hhaW4gfHwgSGVhcDo6aXNNYXJrZWQoY2hhaW4pKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHB1dCB0cmFuc2l0aW9uLlxuIik7CkBAIC0xNDEwLDcg
KzE0MjQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluCiAgICAg
Zm9yIChhdXRvIGl0ZXIgPSBjYWxsTGlua0luZm9zQmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCiAg
ICAgICAgICgqaXRlciktPnZpc2l0V2Vhaygqdm0oKSk7CiAKLSAgICBmb3IgKEJhZzxTdHJ1Y3R1
cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7
ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKipp
dGVyOwogICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2VzKHRoaXMpOwogICAgIH0K
QEAgLTE0MTksMjUgKzE0MzMsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVK
SVRJbmxpbgogCiB2b2lkIENvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoKQogewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYml0d2lz
ZV9jYXN0PENvZGVCbG9jayo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7Ci0g
ICAgCi0gICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgIGNvZGVCbG9j
ay51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
Y29kZUJsb2NrKSkgewotICAgICAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRv
V2Vha1JlZmVyZW5jZSgpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
JmNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay5zaG91bGRKZXR0aXNvbkR1ZVRv
V2Vha1JlZmVyZW5jZSgpKQorICAgICAgICAgICAgY29kZUJsb2NrLmpldHRpc29uKFByb2ZpbGVy
OjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpOworICAg
ICAgICAgICAgY29kZUJsb2NrLmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50
ZXJwcmV0ZWQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBjb2RlQmxvY2stPmZpbmFs
aXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJl
dGVkKGNvZGVCbG9jay5qaXRUeXBlKCkpKQorICAgICAgICBjb2RlQmxvY2suZmluYWxpemVMTElu
dElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoISFjb2RlQmxvY2st
PmppdENvZGUoKSkKLSAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUJhc2VsaW5lSklUSW5saW5l
Q2FjaGVzKCk7CisgICAgaWYgKCEhY29kZUJsb2NrLmppdENvZGUoKSkKKyAgICAgICAgY29kZUJs
b2NrLmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogfQogCkBAIC0x
OTU5LDYgKzE5NzAsNyBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRp
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCisgICAgVk0mIHZtID0gKm1fdm07
CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwogICAgIAogICAgIC8vIFdl
IHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6CkBAIC0xOTc1LDcgKzE5ODcsNyBA
QCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgICAgIC8vIFRo
aXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQg
d2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KICAgICAgICAgaWYgKCFqaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0g
cmVwbGFjZW1lbnQoKSB8fCAobV92bS0+aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhl
YXA6OmlzTWFya2VkKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRo
cmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDA3LDEyICsyMDE5
LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKIAogICAgIC8v
IEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwg
Y29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQg
YSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCi0gICAgaWYgKG1fdm0tPmhlYXAu
aXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1
dGFibGUoKSkpCisgICAgaWYgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFw
Ojppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgyKS4KLSAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUo
KS0+aW5zdGFsbENvZGUoCi0gICAgICAgICptX3ZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgp
LCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlu
c3RhbGxDb2RlKHZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFsaXphdGlvbktp
bmQoKSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSkKQEAgLTI3NjcsMTggKzI3NzgsMTkgQEAgaW50IENvZGVCbG9jazo6c3RhY2tQ
b2ludGVyT2Zmc2V0KCkKIAogc2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVT
aXplKCkKIHsKKyAgICBWTSogdm0gPSBtX3ZtLnVucG9pc29uZWQoKTsKICAgICAvLyBUaGlzIHdp
bGwgYmUgY2FsbGVkIGZyb20gQ29kZUJsb2NrOjpDb2RlQmxvY2sgYmVmb3JlIGVpdGhlciBtX3Zt
IG9yIHRoZQogICAgIC8vIGluc3RydWN0aW9ucyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuIEl0J3Mg
T0sgdG8gcmV0dXJuIDAgYmVjYXVzZSB3aGF0IHdpbGwgcmVhbGx5CiAgICAgLy8gbWF0dGVyIGlz
IHRoZSByZWNvbXB1dGF0aW9uIG9mIHRoaXMgdmFsdWUgd2hlbiB0aGUgc2xvdyBwYXRoIGlzIHRy
aWdnZXJlZC4KLSAgICBpZiAoIW1fdm0pCisgICAgaWYgKCF2bSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgCi0gICAgaWYgKCEqbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZv
ckJhc2VsaW5lSklUKQorICAgIGlmICghKnZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVX
b3JkRm9yQmFzZWxpbmVKSVQpCiAgICAgICAgIHJldHVybiAwOyAvLyBJdCdzIGFzIGdvb2Qgb2Yg
YSBwcmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4KICAgICAKICAgICAvLyBCZSBjb25zZXJ2YXRpdmU6
IHJldHVybiBhIHNpemUgdGhhdCB3aWxsIGJlIGFuIG92ZXJlc3RpbWF0aW9uIDg0JSBvZiB0aGUg
dGltZS4KLSAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+bWVhbigpICsKLSAgICAgICAgbV92bS0+bWFjaGlu
ZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5zdGFuZGFyZERldmlhdGlv
bigpOworICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRl
Y29kZVdvcmRGb3JCYXNlbGluZUpJVC0+bWVhbigpICsKKyAgICAgICAgdm0tPm1hY2hpbmVDb2Rl
Qnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsK
ICAgICAKICAgICAvLyBCZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGll
cnMuIFNpbGVudGx5IGRvaW5nIHRoZSAid3JvbmciIHRoaW5nCiAgICAgLy8gaGVyZSBpcyBPSywg
c2luY2UgdGhpcyB3aG9sZSBtZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KQEAgLTMwNjYsNyAr
MzA3OCw3IEBAIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW4KICAgICAg
ICAgICAgIHJldHVybiBjb2RlT3JpZ2luOwogICAgIH0KIAotICAgIGZvciAoQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsg
KytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0
ZXI7ICsraXRlcikgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOwog
ICAgICAgICBpZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViLT5jb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIyNjQ5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJv
biBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29k
ZS5oIgogI2luY2x1ZGUgIkpJVE1hdGhJQ0ZvcndhcmRzLmgiCisjaW5jbHVkZSAiSlNDUG9pc29u
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJKdW1wVGFibGUuaCIKQEAgLTEwNiwxMiArMTA3LDIwIEBAIGNsYXNzIENvZGVCbG9j
ayA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCisgICAgc3RydWN0
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxp
emVyIHsKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcihDb2RlQmxvY2smIGNvZGVCbG9j
aykKKyAgICAgICAgICAgIDogY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgeyB9CiAgICAg
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICAgICAgQ29k
ZUJsb2NrJiBjb2RlQmxvY2s7CiAgICAgfTsKIAotICAgIGNsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIgOiBwdWJsaWMgSlNDOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICBzdHJ1Y3Qg
V2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIgeworICAgICAgICBXZWFrUmVmZXJlbmNlSGFydmVzdGVyKENvZGVCbG9jayYgY29kZUJsb2Nr
KQorICAgICAgICAgICAgOiBjb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICB7IH0KICAgICAg
ICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
ICAgIENvZGVCbG9jayYgY29kZUJsb2NrOwogICAgIH07CiAKIHB1YmxpYzoKQEAgLTI1NSw5ICsy
NjQsOSBAQCBwdWJsaWM6CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSop
OwogICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqKTsKICAgICBKSVRTdWJJ
QyogYWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZv
Pjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7
IH0KLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0VuZCgpIHsg
cmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9Ci0gICAgCisgICAgYXV0byBzdHViSW5mb0JlZ2lu
KCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4oKTsgfQorICAgIGF1dG8gc3R1YkluZm9FbmQo
KSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQorCiAgICAgLy8gTyhuKSBvcGVyYXRpb24u
IFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5kIHRvIGdl
dCBvbmUKICAgICAvLyBzdHViIGluZm8uCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGZpbmRTdHVi
SW5mbyhDb2RlT3JpZ2luKTsKQEAgLTI2NSw4ICsyNzQsOCBAQCBwdWJsaWM6CiAgICAgQnlWYWxJ
bmZvKiBhZGRCeVZhbEluZm8oKTsKIAogICAgIENhbGxMaW5rSW5mbyogYWRkQ2FsbExpbmtJbmZv
KCk7Ci0gICAgQmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NCZWdpbigp
IHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyB9Ci0gICAgQmFnPENhbGxMaW5rSW5m
bz46Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NFbmQoKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3Mu
ZW5kKCk7IH0KKyAgICBhdXRvIGNhbGxMaW5rSW5mb3NCZWdpbigpIHsgcmV0dXJuIG1fY2FsbExp
bmtJbmZvcy5iZWdpbigpOyB9CisgICAgYXV0byBjYWxsTGlua0luZm9zRW5kKCkgeyByZXR1cm4g
bV9jYWxsTGlua0luZm9zLmVuZCgpOyB9CiAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlv
biBjYWxsIHVzZWQgcHJpbWFyaWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNl
CiAgICAgLy8gdGhhdCB0aGVyZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91
IHdhbnQgdG8gdXNlIHRoaXMsIHlvdSdyZSByZWFsbHkKQEAgLTMwOCwxMSArMzE3LDExIEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247
Ci0gICAgdHlwZWRlZiBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3Ry
dWN0aW9uczsKKyAgICB0eXBlZGVmIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1Bv
aXNvbiwgSW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3RydWN0aW9uczsKIAogICAgIHVuc2lnbmVk
IG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6
ZSgpOyB9Ci0gICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkg
eyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KLSAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8SW5z
dHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9uczsg
fQorICAgIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1Y3Rp
b24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQorICAgIGNvbnN0
IFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1Y3Rpb24+JiBp
bnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQogCiAgICAgc2l6
ZV90IHByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgpOwogCkBAIC0zNjEsNyArMzcwLDcgQEAgcHVi
bGljOgogICAgIEV4ZWN1dGFibGVCYXNlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVy
biBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxl
Kj4obV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpOyB9CiAKLSAgICBWTSogdm0oKSBjb25zdCB7IHJl
dHVybiBtX3ZtOyB9CisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bS51bnBvaXNvbmVk
KCk7IH0KIAogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVn
aXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KQEAg
LTg5NSw2ICs5MDQsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNUYWlsQ2FsbHMoKTsgfQogCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3Qgc19wb2lzb24gPSBtYWtlQ29uc3RFeHByUG9pc29uKENvZGVC
bG9ja1BvaXNvbik7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVD
YWNoZXMoKTsKICAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKQEAg
LTk2NSwzMCArOTc2LDMwIEBAIHByaXZhdGU6CiAgICAgICAgIH07CiAgICAgfTsKICAgICBXcml0
ZUJhcnJpZXI8RXhlY3V0YWJsZUJhc2U+IG1fb3duZXJFeGVjdXRhYmxlOwotICAgIFZNKiBtX3Zt
OworICAgIENvbnN0RXhwclBvaXNvbmVkPENvZGVCbG9ja1BvaXNvbiwgVk0qPiBtX3ZtOwogCi0g
ICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKKyAgICBQb2lz
b25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxvY2tQb2lzb24sIEluc3RydWN0aW9uPiBtX2luc3Ry
dWN0aW9uczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKICAgICBtdXRhYmxlIENvZGVCbG9ja0hhc2ggbV9o
YXNoOwogCi0gICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKKyAgICBQb2lzb25l
ZFJlZlB0cjxDb2RlQmxvY2tQb2lzb24sIFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKICAgICB1
bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZUNvbHVtbk9m
ZnNldDsKIAogICAgIFJlZkNvdW50ZWRBcnJheTxMTEludENhbGxMaW5rSW5mbz4gbV9sbGludENh
bGxMaW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBC
YXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdMTEludENh
bGxzOwogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50
TWFwOwotICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgUG9pc29uZWRSZWZQdHI8
Q29kZUJsb2NrUG9pc29uLCBKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IG1fY2FsbGVlU2F2ZVJlZ2lz
dGVyczsKLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwotICAgIEJhZzxK
SVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICBCYWc8
SklUTmVnSUM+IG1fbmVnSUNzOwotICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Ci0gICAgQmFn
PEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExp
bmtJbmZvczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIFN0cnVjdHVyZVN0dWJJ
bmZvPiBtX3N0dWJJbmZvczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEpJVEFk
ZElDPiBtX2FkZElDczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEpJVE11bElD
PiBtX211bElDczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEpJVE5lZ0lDPiBt
X25lZ0lDczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEpJVFN1YklDPiBtX3N1
YklDczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEJ5VmFsSW5mbz4gbV9ieVZh
bEluZm9zOworICAgIFBvaXNvbmVkQmFnPENvZGVCbG9ja1BvaXNvbiwgQ2FsbExpbmtJbmZvPiBt
X2NhbGxMaW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgIFNl
bnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwpA
QCAtMTAzMCw4ICsxMDQxLDggQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJl
RGF0YT4gbV9yYXJlRGF0YTsKIAotICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRp
dGlvbmFsRmluYWxpemVyOwotICAgIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgbV93ZWFrUmVmZXJl
bmNlSGFydmVzdGVyOworICAgIFBvaXNvbmVkVW5pcXVlUHRyPENvZGVCbG9ja1BvaXNvbiwgVW5j
b25kaXRpb25hbEZpbmFsaXplcj4gbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOworICAgIFBvaXNv
bmVkVW5pcXVlUHRyPENvZGVCbG9ja1BvaXNvbiwgV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj4gbV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVyOwogfTsKIAogaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6
OnIoaW50IGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg3LDYgKzg3LDcgQEAgdm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0
Q29tcGlsZQogICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIFNQIGlzIGNvcnJlY3QgaW4gY2Fz
ZSBvZiBhbiBleGNlcHRpb24uCiAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCBHUFJJbmZvOjpyZWdUMCk7CiAg
ICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6aml0Q29kZU9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC54b3JQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoQ29kZUJsb2NrOjpzX3BvaXNvbiksIEdQ
UkluZm86OnJlZ1QwKTsKICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSklUQ29kZVR5cGU6OmNvbW1vbkRhdGFPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKICAg
ICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb21t
b25EYXRhOjpmcmFtZVJlZ2lzdGVyQ291bnRPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKICAg
ICAvLyBUaGlzIGRvZXMgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50
IC0gMSkqc2l6ZW9mKFJlZ2lzdGVyKSB3aGVyZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkwMyw4ICs5MDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSW5zdHJ1Y3Rpb24qIGNvcGllZEluc3RydWN0aW9uKEluc3RydWN0aW9uKik7CiAKICAgICAg
ICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7Ci0gICAgICAgIAotICAgICAgICBSZWZDb3Vu
dGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOworCisgICAgICAgIFBvaXNvbmVk
UmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rp
b25zOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogICAgICAgICBWZWN0
b3I8TGFiZWw+IG1fbGFiZWxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50T2ZmbGluZUFzbUNvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludE9mZmxpbmVBc21Db25maWcuaAkocmV2aXNpb24gMjI2NDk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2ZmbGluZUFzbUNvbmZpZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkxMSW50Q29tbW9uLmgiCiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KKyNpbmNs
dWRlIDx3dGYvUG9pc29uZWQuaD4KIAogI2lmICFFTkFCTEUoSklUKQogI2RlZmluZSBPRkZMSU5F
X0FTTV9DX0xPT1AgMQpAQCAtMTQyLDYgKzE0MywxMiBAQAogI2RlZmluZSBPRkZMSU5FX0FTTV9K
U1ZBTFVFNjQgMAogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUE9JU09OKQorI2RlZmluZSBPRkZMSU5F
X0FTTV9QT0lTT04gMQorI2Vsc2UKKyNkZWZpbmUgT0ZGTElORV9BU01fUE9JU09OIDAKKyNlbmRp
ZgorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogI2RlZmluZSBPRkZMSU5FX0FTTV9BU1NFUlRfRU5B
QkxFRCAxCiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIyNjQ5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDUsNiArNDUsNyBAQCBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbCgpCiAgICAgbG9hZGkgQXJn
dW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbUEJdLCBQQgorICAgIHVu
cG9pc29uKENvZGVCbG9ja1BvaXNvbiwgUEIpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQxKQogICAgIHN0b3JlcSByMCwgW2NmciwgdDEsIDhdCiAgICAgdmFsdWVQcm9maWxlKHIwLCAo
Q2FsbE9wQ29kZVNpemUgLSAxKSwgdDMpCkBAIC00ODIsNiArNDgzLDcgQEAgZW5kCiBtYWNybyBz
dHJ1Y3R1cmVJRFRvU3RydWN0dXJlV2l0aFNjcmF0Y2goc3RydWN0dXJlSURUaGVuU3RydWN0dXJl
LCBzY3JhdGNoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBzY3JhdGNoCiAgICAgbG9hZHAg
Q29kZUJsb2NrOjptX3ZtW3NjcmF0Y2hdLCBzY3JhdGNoCisgICAgdW5wb2lzb24oQ29kZUJsb2Nr
UG9pc29uLCBzY3JhdGNoKQogICAgIGxvYWRwIFZNOjpoZWFwICsgSGVhcDo6bV9zdHJ1Y3R1cmVJ
RFRhYmxlICsgU3RydWN0dXJlSURUYWJsZTo6bV90YWJsZVtzY3JhdGNoXSwgc2NyYXRjaAogICAg
IGxvYWRwIFtzY3JhdGNoLCBzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUsIDhdLCBzdHJ1Y3R1cmVJ
RFRoZW5TdHJ1Y3R1cmUKIGVuZApAQCAtNDk1LDYgKzQ5Nyw3IEBAIG1hY3JvIGxvYWRTdHJ1Y3R1
cmVBbmRDbG9iYmVyRmlyc3RBcmcoY2UKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURb
Y2VsbF0sIHN0cnVjdHVyZQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBjZWxsCiAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX3ZtW2NlbGxdLCBjZWxsCisgICAgdW5wb2lzb24oQ29kZUJsb2NrUG9p
c29uLCBjZWxsKQogICAgIGxvYWRwIFZNOjpoZWFwICsgSGVhcDo6bV9zdHJ1Y3R1cmVJRFRhYmxl
ICsgU3RydWN0dXJlSURUYWJsZTo6bV90YWJsZVtjZWxsXSwgY2VsbAogICAgIGxvYWRwIFtjZWxs
LCBzdHJ1Y3R1cmUsIDhdLCBzdHJ1Y3R1cmUKIGVuZApAQCAtNTU5LDYgKzU2Miw3IEBAIG1hY3Jv
IGZ1bmN0aW9uQXJpdHlDaGVjayhkb25lTGFiZWwsIHNsb3cKICAgICAjIFJlbG9hZCBDb2RlQmxv
Y2sgYW5kIHJlc2V0IFBDLCBzaW5jZSB0aGUgc2xvd19wYXRoIGNsb2JiZXJlZCB0aGVtLgogICAg
IGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVj
dGlvbnNbdDFdLCBQQgorICAgIHVucG9pc29uKENvZGVCbG9ja1BvaXNvbiwgUEIpCiAgICAgbW92
ZSAwLCBQQwogICAgIGptcCBkb25lTGFiZWwKIGVuZApAQCAtMTk0OSwxNCArMTk1MywxNCBAQCBt
YWNybyBkb0NhbGwoc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsg
UGF5bG9hZE9mZnNldFt0M10KICAgICBtb3ZlIHQzLCBzcAotICAgIGlmIFg4Nl82NF9XSU4KLSAg
ICAgICAgcHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3Qx
XSwgdDIsIHQzLCB0NCkKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJ
bmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0pCi0gICAgZWxzZQorICAgIGlmIFBPSVNPTgogICAg
ICAgICBsb2FkcCBfZ19qaXRDb2RlUG9pc29uLCB0MgogICAgICAgICB4b3JwIExMSW50Q2FsbExp
bmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyCiAgICAgICAgIHByZXBhcmVDYWxsKHQy
LCB0MSwgdDMsIHQ0KQogICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24odDIpCisgICAgZWxzZQor
ICAgICAgICBwcmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRb
dDFdLCB0MiwgdDMsIHQ0KQorICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlu
a0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSkKICAgICBlbmQKIAogLm9wQ2FsbFNsb3c6CkBA
IC0yMDAzLDYgKzIwMDcsNyBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAKICAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zW1BCXSwgUEIK
KyAgICB1bnBvaXNvbihDb2RlQmxvY2tQb2lzb24sIFBCKQogICAgIGxvYWRwIFZNOjp0YXJnZXRJ
bnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwogICAgIHN1YnAgUEIsIFBDCiAgICAgcnNoaWZ0
cCAzLCBQQwpAQCAtMjQ5NSw2ICsyNTAwLDcgQEAgX2xsaW50X29wX3Byb2ZpbGVfdHlwZToKICAg
ICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCiAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICB1bnBvaXNvbihDb2RlQmxvY2tQb2lzb24s
IHQxKQogICAgICMgdDEgaXMgaG9sZGluZyB0aGUgcG9pbnRlciB0byB0aGUgdHlwZVByb2ZpbGVy
TG9nLgogICAgIGxvYWRwIFZNOjptX3R5cGVQcm9maWxlckxvZ1t0MV0sIHQxCiAgICAgIyB0MiBp
cyBob2xkaW5nIHRoZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHJldmlzaW9uIDIyNjQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNCw2ICsyMDQsMTAgQEAgZWxzZQogICAg
IGNvbnN0IExvd2VzdFRhZyA9IERlbGV0ZWRWYWx1ZVRhZwogZW5kCiAKK2lmIFBPSVNPTgorICAg
IGNvbnN0IENvZGVCbG9ja1BvaXNvbiA9IGNvbnN0ZXhwciBDb2RlQmxvY2s6OnNfcG9pc29uCitl
bmQKKwogIyBQdXRCeUlkRmxhZ3MgZGF0YQogY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9
IGNvbnN0ZXhwciBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrCiBjb25zdCBQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgPSBjb25zdGV4cHIgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5CkBAIC03
NTIsNiArNzU2LDEyIEBAIG1hY3JvIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChkZXMK
ICAgICBlbmQKIGVuZAogCittYWNybyB1bnBvaXNvbihwb2lzb24sIGZpZWxkKQorICAgIGlmIFBP
SVNPTgorICAgICAgICB4b3JwIHBvaXNvbiwgZmllbGQKKyAgICBlbmQKK2VuZAorCiBtYWNybyBm
dW5jdGlvblByb2xvZ3VlKCkKICAgICBpZiBYODYgb3IgWDg2X1dJTiBvciBYODZfNjQgb3IgWDg2
XzY0X1dJTgogICAgICAgICBwdXNoIGNmcgpAQCAtMTAxNCw2ICsxMDI0LDcgQEAgbWFjcm8gcHJv
bG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgICMgU2V0IHVwIHRoZSBQQy4KICAg
ICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1t0
MV0sIFBCCisgICAgICAgIHVucG9pc29uKENvZGVCbG9ja1BvaXNvbiwgUEIpCiAgICAgICAgIG1v
dmUgMCwgUEMKICAgICBlbHNlCiAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlv
bnNbdDFdLCBQQwpAQCAtMTAyNCw2ICsxMDM1LDcgQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2Nr
R2V0dGVyLCBjb2RlQmxvYwogICAgIHN1YnAgY2ZyLCB0MCwgdDAKICAgICBicGEgdDAsIGNmciwg
Lm5lZWRTdGFja0NoZWNrCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDIKKyAgICB1
bnBvaXNvbihDb2RlQmxvY2tQb2lzb24sIHQyKQogICAgIGlmIENfTE9PUAogICAgICAgICBicGJl
cSBWTTo6bV9jbG9vcFN0YWNrTGltaXRbdDJdLCB0MCwgLnN0YWNrSGVpZ2h0T0sKICAgICBlbHNl
CkBAIC0xNjExLDYgKzE2MjMsNyBAQCBfbGxpbnRfb3BfY2hlY2tfdHJhcHM6CiAgICAgdHJhY2VF
eGVjdXRpb24oKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAgIGxvYWRwIENvZGVC
bG9jazo6bV92bVt0MV0sIHQxCisgICAgdW5wb2lzb24oQ29kZUJsb2NrUG9pc29uLCB0MSkKICAg
ICBsb2FkYiBWTTo6bV90cmFwcytWTVRyYXBzOjptX25lZWRUcmFwSGFuZGxpbmdbdDFdLCB0MAog
ICAgIGJ0cG56IHQwLCAuaGFuZGxlVHJhcHMKIC5hZnRlckhhbmRsaW5nVHJhcHM6CkBAIC0xNjI2
LDYgKzE2MzksNyBAQCBfbGxpbnRfb3BfY2hlY2tfdHJhcHM6CiBtYWNybyBhY3F1aXJlU2hhZG93
Q2hpY2tlblBhY2tldChzbG93KQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAgIGxv
YWRwIENvZGVCbG9jazo6bV92bVt0MV0sIHQxCisgICAgdW5wb2lzb24oQ29kZUJsb2NrUG9pc29u
LCB0MSkKICAgICBsb2FkcCBWTTo6bV9zaGFkb3dDaGlja2VuW3QxXSwgdDIKICAgICBsb2FkcCBT
aGFkb3dDaGlja2VuOjptX2xvZ0N1cnNvclt0Ml0sIHQwCiAgICAgYnBhZXEgdDAsIFNoYWRvd0No
aWNrZW46Om1fbG9nRW5kW3QyXSwgc2xvdwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtOTgsOSArOTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0IC0gbV9zdGFydE9mZnNl
dDsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICAvLyBGSVhNRTogTWFrZSBpdCBSZWY8U291
cmNlUHJvdmlkaWVyPi4KKyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgUG9pc29uZWRSZWY8U291
cmNlUHJvdmlkaWVyPi4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2ODMyNQotICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fcHJvdmlk
ZXI7CisgICAgICAgIFBvaXNvbmVkUmVmUHRyPFVubGlua2VkU291cmNlQ29kZVBvaXNvbiwgU291
cmNlUHJvdmlkZXI+IG1fcHJvdmlkZXI7CiAgICAgICAgIGludCBtX3N0YXJ0T2Zmc2V0OwogICAg
ICAgICBpbnQgbV9lbmRPZmZzZXQ7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ1BvaXNvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ1BvaXNvbi5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTQgKzMw
LDIyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBQb2lzb24gewotICAgIE5vdFBvaXNvbmVk
ID0gMCwKKyAgICBOb3RQb2lzb25lZCA9IDAsIC8vIFJlc2VydmVkIChhbmQgdW51c2VkKSBzbyB0
aGF0IHBvaXNvbiBrZXlzIGFyZSBuZXZlciAwLgorCisgICAgLy8gQWRkIG5ldyBwb2lzb24ga2V5
cyBiZWxvdyBpbiBhbHBoYWJldGljYWwgb3JkZXIuIFRoZSBvcmRlciBkb2Vzbid0IHJlYWxseQor
ICAgIC8vIG1hdHRlciwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwga2VlcCB0aGVtIGluIGFscGhhYmV0
aWNhbGx5IG9yZGVyIGZvcgorICAgIC8vIGdyZWF0ZXIgcmVhZGFiaWxpdHkuCisgICAgQ29kZUJs
b2NrUG9pc29uLAorICAgIEpTR2xvYmFsT2JqZWN0UG9pc29uLAorICAgIEpTU2NyaXB0RmV0Y2hQ
YXJhbWV0ZXJzUG9pc29uLAorICAgIEpTU2NyaXB0RmV0Y2hlclBvaXNvbiwKICAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrUG9pc29uLAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZVBvaXNvbiwK
ICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5UG9pc29uLAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGVQ
b2lzb24sCiAgICAgSlNXZWJBc3NlbWJseVRhYmxlUG9pc29uLAotICAgIFRyYW5zaXRpb25NYXBQ
b2lzb24sCi0gICAgV2Vha0ltcGxQb2lzb24sCisgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
UG9pc29uLAorICAgIFVubGlua2VkU291cmNlQ29kZVBvaXNvbiwKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endh
cmljaEB1d2F0ZXJsb28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODgsNiArMTg4LDE2IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHMsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+CitKU0dsb2Jh
bE9iamVjdDo6UG9pc29uZWRVbmlxdWVQdHI8VD4gbWFrZVBvaXNvbmVkVW5pcXVlKEFyZ3VtZW50
cyYmLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gV1RGOjptYWtlUG9pc29uZWRVbmlxdWU8
SlNHbG9iYWxPYmplY3RQb2lzb24sIFQ+KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogc3RhdGljIEpTVmFsdWUg
Y3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CkBA
IC00MDEsOCArNDExLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAg
bV9kZWJ1Z2dlciA9IDA7CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6SlNHbG9iYWxP
YmplY3RJbnNwZWN0b3JDb250cm9sbGVyPigqdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JEZWJ1Z2dh
YmxlID0gc3RkOjptYWtlX3VuaXF1ZTxKU0dsb2JhbE9iamVjdERlYnVnZ2FibGU+KCp0aGlzKTsK
KyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSBtYWtlUG9pc29uZWRVbmlxdWU8SW5zcGVjdG9y
OjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI+KCp0aGlzKTsKKyAgICBtX2luc3Bl
Y3RvckRlYnVnZ2FibGUgPSBtYWtlUG9pc29uZWRVbmlxdWU8SlNHbG9iYWxPYmplY3REZWJ1Z2dh
YmxlPigqdGhpcyk7CiAgICAgbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLT5pbml0KCk7CiAgICAgbV9j
b25zb2xlQ2xpZW50ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jb25zb2xlQ2xpZW50KCk7CiAj
ZW5kaWYKQEAgLTEwMTEsNjMgKzEwMjEsNjMgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcgogCiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KGFycmF5SXRlcmF0b3JQ
cm90b3R5cGUsIG1fdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7Ci0gICAgICAgICAgICBtX2FycmF5
SXRlcmF0b3JQcm90b3R5cGVOZXh0ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNo
YW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlv
biwgbV9hcnJheUl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fYXJy
YXlJdGVyYXRvclByb3RvdHlwZU5leHQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVy
dHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25k
aXRpb24sIG1fYXJyYXlJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBt
X2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LT5pbnN0YWxsKCk7CiAgICAgICAgIH0KICAgICAg
ICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0
dXBBZGFwdGl2ZVdhdGNocG9pbnQodGhpcy0+YXJyYXlQcm90b3R5cGUoKSwgbV92bS5wcm9wZXJ0
eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0gICAgICAgICAgICBtX2FycmF5UHJvdG90eXBlU3lt
Ym9sSXRlcmF0b3JXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNo
YW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlv
biwgbV9hcnJheUl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fYXJy
YXlQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8
T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNl
dD4+KHZtLCBjb25kaXRpb24sIG1fYXJyYXlJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAg
ICAgICAgICAgICBtX2FycmF5UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50LT5pbnN0
YWxsKCk7CiAgICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtYXBJdGVyYXRv
clByb3RvdHlwZSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5uZXh0KTsKLSAgICAgICAgICAgIG1fbWFw
SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0
UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZt
LCBjb25kaXRpb24sIG1fbWFwSXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAg
ICAgbV9tYXBJdGVyYXRvclByb3RvdHlwZU5leHRXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVkVW5p
cXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9p
bnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsK
ICAgICAgICAgICAgIG1fbWFwSXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludC0+aW5zdGFs
bCgpOwogICAgICAgICB9CiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1fbWFwUHJvdG90eXBl
LmdldCgpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKTsKLSAgICAgICAgICAg
IG1fbWFwUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1
ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50
U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9tYXBJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7Cisg
ICAgICAgICAgICBtX21hcFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IG1ha2VQ
b2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxp
bmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9tYXBJdGVyYXRvclByb3RvY29sV2F0
Y2hwb2ludCk7CiAgICAgICAgICAgICBtX21hcFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hw
b2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAKICAgICAgICAgewogICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQo
c2V0SXRlcmF0b3JQcm90b3R5cGUsIG1fdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7Ci0gICAgICAg
ICAgICBtX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9p
bnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX3NldEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsK
KyAgICAgICAgICAgIG1fc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IG1ha2VQ
b2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxp
bmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRJdGVyYXRvclByb3RvY29sV2F0
Y2hwb2ludCk7CiAgICAgICAgICAgICBtX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9p
bnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtX3Nl
dFByb3RvdHlwZS5nZXQoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0g
ICAgICAgICAgICBtX3NldFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IHN0ZDo6
bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5l
V2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc2V0SXRlcmF0b3JQcm90b2NvbFdhdGNo
cG9pbnQpOworICAgICAgICAgICAgbV9zZXRQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9p
bnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNo
cG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc2V0SXRlcmF0b3JQ
cm90b2NvbFdhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9zZXRQcm90b3R5cGVTeW1ib2xJdGVy
YXRvcldhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVX
YXRjaHBvaW50KG1fc3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuZ2V0KCksIG1fdm0ucHJvcGVydHlO
YW1lcy0+bmV4dCk7Ci0gICAgICAgICAgICBtX3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dFdh
dGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVX
YXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX3N0cmluZ0l0
ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fc3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0
eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRp
dGlvbiwgbV9zdHJpbmdJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBt
X3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAg
ICAgfQogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25k
aXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSwg
bV92bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0gICAgICAgICAgICBtX3N0cmlu
Z1Byb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2Jq
ZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+
KHZtLCBjb25kaXRpb24sIG1fc3RyaW5nSXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAg
ICAgICAgICAgbV9zdHJpbmdQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQgPSBtYWtl
UG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5s
aW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc3RyaW5nSXRlcmF0b3JQcm90b2Nv
bFdhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9zdHJpbmdQcm90b3R5cGVTeW1ib2xJdGVyYXRv
cldhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKICAgICAgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRj
aHBvaW50KG1fbWFwUHJvdG90eXBlLmdldCgpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPnNldCk7Ci0g
ICAgICAgICAgICBtX21hcFByb3RvdHlwZVNldFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRT
ZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcFNldFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9t
YXBQcm90b3R5cGVTZXRXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVkVW5pcXVlPE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29u
ZGl0aW9uLCBtX21hcFNldFdhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9tYXBQcm90b3R5cGVT
ZXRXYXRjaHBvaW50LT5pbnN0YWxsKCk7CiAgICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0
Y2hwb2ludChtX3NldFByb3RvdHlwZS5nZXQoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5hZGQpOwot
ICAgICAgICAgICAgbV9zZXRQcm90b3R5cGVBZGRXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1
ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50
U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRBZGRXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1f
c2V0UHJvdG90eXBlQWRkV2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9w
ZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNv
bmRpdGlvbiwgbV9zZXRBZGRXYXRjaHBvaW50KTsKICAgICAgICAgICAgIG1fc2V0UHJvdG90eXBl
QWRkV2F0Y2hwb2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAKICAgICAgICAgewogICAgICAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdh
dGNocG9pbnQobnVtYmVyUHJvdG90eXBlKCksIG1fdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcp
OwotICAgICAgICAgICAgbV9udW1iZXJQcm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGlu
ZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX251bWJlclRvU3RyaW5nV2F0Y2hwb2lu
dCk7CisgICAgICAgICAgICBtX251bWJlclByb3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludCA9IG1h
a2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJ
bmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9udW1iZXJUb1N0cmluZ1dhdGNo
cG9pbnQpOwogICAgICAgICAgICAgbV9udW1iZXJQcm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQt
Pmluc3RhbGwoKTsKICAgICAgICAgICAgIG1fbnVtYmVyUHJvdG9Ub1N0cmluZ0Z1bmN0aW9uLnNl
dCh2bSwgdGhpcywganNDYXN0PEpTRnVuY3Rpb24qPihudW1iZXJQcm90b3R5cGUoKS0+Z2V0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZykpKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCIKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmgiCkBAIC00Niw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUG9pc29uZWRVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAKIHN0cnVjdCBPcGFxdWVKU0NsYXNzOwpAQCAtMzk5LDkgKzQwMSwxMSBA
QCBwdWJsaWM6CiAKICAgICBWTSYgbV92bTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVz
aW5nIFBvaXNvbmVkVW5pcXVlUHRyID0gV1RGOjpQb2lzb25lZFVuaXF1ZVB0cjxKU0dsb2JhbE9i
amVjdFBvaXNvbiwgVD47CisKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI+
IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNHbG9iYWxPYmpl
Y3REZWJ1Z2dhYmxlPiBtX2luc3BlY3RvckRlYnVnZ2FibGU7CisgICAgUG9pc29uZWRVbmlxdWVQ
dHI8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVj
dG9yQ29udHJvbGxlcjsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxKU0dsb2JhbE9iamVjdERlYnVn
Z2FibGU+IG1faW5zcGVjdG9yRGVidWdnYWJsZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEwp
CkBAIC00MzYsMTcgKzQ0MCwxNyBAQCBwdWJsaWM6CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBt
X3NldEFkZFdhdGNocG9pbnQ7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FycmF5U3BlY2ll
c1dhdGNocG9pbnQ7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX251bWJlclRvU3RyaW5nV2F0
Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJ
dGVyYXRvcldhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5SXRlcmF0
b3JQcm90b3R5cGVOZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9tYXBQcm90b3R5cGVT
eW1ib2xJdGVyYXRvcldhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX21hcEl0
ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBt
X3NldFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2lu
dFNldD4+IG1fc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0
Y2hwb2ludFNldD4+IG1fc3RyaW5nUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2lu
dDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zdHJpbmdJdGVyYXRvclByb3RvdHlwZU5leHRXYXRj
aHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9tYXBQcm90b3R5cGVTZXRXYXRjaHBv
aW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0
Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zZXRQcm90b3R5cGVBZGRXYXRjaHBvaW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hw
b2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9udW1iZXJQcm90b3R5cGVUb1N0cmluZ1dhdGNo
cG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJ
dGVyYXRvcldhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlD
aGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlJdGVy
YXRvclByb3RvdHlwZU5leHQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlD
aGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwUHJvdG90
eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBt
X21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQ
dHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2lu
dFNldD4+IG1fc2V0UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50OworICAgIFBvaXNv
bmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGlu
ZVdhdGNocG9pbnRTZXQ+PiBtX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7Cisg
ICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9p
bnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc3RyaW5nUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JX
YXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX3N0cmluZ0l0ZXJhdG9yUHJv
dG90eXBlTmV4dFdhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVy
dHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwUHJv
dG90eXBlU2V0V2F0Y2hwb2ludDsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxPYmplY3RQcm9wZXJ0
eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zZXRQcm90
b3R5cGVBZGRXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5
Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX251bWJlclBy
b3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludDsKIAogICAgIGJvb2wgaXNBcnJheVByb3RvdHlwZUl0
ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogICAgIGJvb2wgaXNNYXBQcm90
b3R5cGVJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFt
ZXRlcnMuaAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOSArMjYsMTEg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0
RmV0Y2hQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIApAQCAtNzEsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWY8
U2NyaXB0RmV0Y2hQYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAgUG9pc29uZWRSZWY8SlNT
Y3JpcHRGZXRjaFBhcmFtZXRlcnNQb2lzb24sIFNjcmlwdEZldGNoUGFyYW1ldGVycz4gbV9wYXJh
bWV0ZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAkocmV2aXNpb24gMjI2NDk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3Vr
ZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDkgKzI2LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiSlND
UG9pc29uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgogI2luY2x1ZGUgIlNjcmlwdEZldGNoZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03MSw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgIH0KIAotICAgIFJlZlB0cjxTY3JpcHRGZXRjaGVyPiBtX2ZldGNoZXI7CisgICAgUG9pc29u
ZWRSZWZQdHI8SlNTY3JpcHRGZXRjaGVyUG9pc29uLCBTY3JpcHRGZXRjaGVyPiBtX2ZldGNoZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lv
biAyMjY0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4Nyw4ICsxODcsOCBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093
bmVyOwotICAgIHVzaW5nIFBvaXNvbmVkVHJhbnNpdGlvbk1hcFB0ciA9IENvbnN0RXhwclBvaXNv
bmVkPFRyYW5zaXRpb25NYXBQb2lzb24sIFRyYW5zaXRpb25NYXAqPjsKLSAgICB1c2luZyBQb2lz
b25lZFdlYWtJbXBsUHRyID0gQ29uc3RFeHByUG9pc29uZWQ8V2Vha0ltcGxQb2lzb24sIFdlYWtJ
bXBsKj47CisgICAgdXNpbmcgUG9pc29uZWRUcmFuc2l0aW9uTWFwUHRyID0gQ29uc3RFeHByUG9p
c29uZWQ8U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlUG9pc29uLCBUcmFuc2l0aW9uTWFwKj47Cisg
ICAgdXNpbmcgUG9pc29uZWRXZWFrSW1wbFB0ciA9IENvbnN0RXhwclBvaXNvbmVkPFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZVBvaXNvbiwgV2Vha0ltcGwqPjsKIAogICAgIGJvb2wgaXNVc2luZ1Np
bmdsZVNsb3QoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAy
MjY0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw2ICs1MSw4IEBAIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OkpTV2ViQXNzZW1ibHlDb2QKICAgICA6IEJhc2Uodm0sIHZtLndlYkFzc2VtYmx5Q29k
ZUJsb2NrU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9jb2RlQmxvY2soV1RGTW92ZShjb2RlQmxv
Y2spKQogeworICAgIG1fdW5jb25kaXRpb25hbEZpbmFsaXplciA9IFBvaXNvbmVkVW5pcXVlUHRy
PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+Ojpj
cmVhdGUoKnRoaXMpOworCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0byBkbyB0
aGlzIHN5bmNocm9ub3VzbHkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDU2NwogICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMucmVzZXJ2ZUNhcGFjaXR5
KG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtOTIsMTUgKzk0LDEzIEBA
IHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKIAogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICB2aXNpdG9yLmFkZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7
CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXNPYmplY3QtPm1fdW5j
b25kaXRpb25hbEZpbmFsaXplci5nZXQoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQog
ewotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBiaXR3aXNlX2Nhc3Q8
SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpIC0gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcikpOwotICAgIGZvciAoYXV0byBpdGVyID0gdGhpc09iamVjdC0+bV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT52aXNp
dFdlYWsoKnRoaXNPYmplY3QtPnZtKCkpOworICAgIGZvciAoYXV0byBpdGVyID0gY29kZUJsb2Nr
Lm1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKKyAgICAgICAgKCppdGVy
KS0+dmlzaXRXZWFrKCpjb2RlQmxvY2sudm0oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Nb2R1
bGUuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL1BvaXNvbmVkVW5pcXVl
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtODgsMTMgKzg5LDE3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKLSAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5j
b25kaXRpb25hbEZpbmFsaXplciB7CisgICAgc3RydWN0IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIg
OiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICAgICAgVW5jb25kaXRp
b25hbEZpbmFsaXplcihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgICAg
ICAgICA6IGNvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgIHsgfQogICAgICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgICAgIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2smIGNvZGVCbG9jazsKICAgICB9OwogCiAgICAgUG9pc29uZWRSZWY8SlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1BvaXNvbiwgV2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBW
ZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub0pTRXhpdFN0dWJzOwotICAgIFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOworICAgIFBvaXNv
bmVkVW5pcXVlUHRyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXI+IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQzIEBACisyMDE4LTAxLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KKworICAgICAgICBBcHBseSBwb2lzb25pbmcgdG8gbW9yZSBwb2ludGVycyBpbiBKU0Mu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEwOTYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MTgyOTcwPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFBvaXNvbmVkQmFn
IGFuZCBQb2lzb25lZFJlZkNvdW50ZWRBcnJheS4KKworICAgICAgICAqIHd0Zi9CYWcuaDoKKyAg
ICAgICAgKFdURjo6UHJpdmF0ZTo6QmFnTm9kZTo6QmFnTm9kZSk6CisgICAgICAgIChXVEY6OkJh
Zzo6QmFnKToKKyAgICAgICAgKFdURjo6QmFnOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpC
YWc6OmNsZWFyKToKKyAgICAgICAgKFdURjo6QmFnOjphZGQpOgorICAgICAgICAoV1RGOjpCYWc6
OmJlZ2luKToKKyAgICAgICAgKFdURjo6QmFnOjp1bndyYXBwZWRIZWFkKToKKyAgICAgICAgKFdU
Rjo6QmFnOjpOb2RlOjpOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvQmFnVG9IYXNoTWFw
Lmg6CisgICAgICAgIChXVEY6OnRvSGFzaE1hcCk6CisgICAgICAgICogd3RmL1BvaXNvbmVkLmg6
CisgICAgICAgIChXVEY6OmNvbnN0RXhwclBvaXNvblJhbmRvbSk6CisgICAgICAgIChXVEY6Om1h
a2VDb25zdEV4cHJQb2lzb24pOgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuaDoKKyAg
ICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpSZWZDb3VudGVkQXJyYXkpOgorICAgICAgICAo
V1RGOjpSZWZDb3VudGVkQXJyYXk6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRlZEFycmF5OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6On5S
ZWZDb3VudGVkQXJyYXkpOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OnJlZkNvdW50
IGNvbnN0KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpzaXplIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpkYXRhKToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRlZEFycmF5OjpiZWdpbik6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6ZW5kKToK
KyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6UmVmQ291bnRlZEFycmF5OjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50
ZWRBcnJheTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJh
eTo6SGVhZGVyOjpmcm9tUGF5bG9hZCk6CisgICAgICAgICogd3RmL1dURkFzc2VydGlvbnMuY3Bw
OgorCiAyMDE4LTAxLTA1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWJBc3NlbWJseTogcG9pc29uIEpTIG9iamVjdCdzIHNlY3JldHMKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZp
c2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw0
NCArMjYsNTAgQEAKICNpZm5kZWYgQmFnX2gKICNkZWZpbmUgQmFnX2gKIAorI2luY2x1ZGUgPHd0
Zi9EdW1iUHRyVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK25hbWVzcGFjZSBQcml2
YXRlIHsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJhZ05vZGUgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgQmFnTm9kZShBcmdzJiYuLi4gYXJncykKKyAgICAgICAgOiBtX2l0ZW0oc3RkOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKQorICAgIHsgfQorICAgIAorICAgIFQgbV9pdGVtOworICAg
IEJhZ05vZGUqIG1fbmV4dCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFByaXZh
dGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHJhaXRzID0gRHVtYlB0clRy
YWl0czxQcml2YXRlOjpCYWdOb2RlPFQ+Pj4KIGNsYXNzIEJhZyB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQmFnKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXByaXZhdGU6Ci0g
ICAgY2xhc3MgTm9kZSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1
YmxpYzoKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgTm9kZShB
cmdzJiYuLi4gYXJncykKLSAgICAgICAgICAgIDogbV9pdGVtKHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLikKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBUIG1faXRl
bTsKLSAgICAgICAgTm9kZSogbV9uZXh0IHsgbnVsbHB0ciB9OwotICAgIH07Ci0gICAgCisgICAg
dXNpbmcgTm9kZSA9IFByaXZhdGU6OkJhZ05vZGU8VD47CisKIHB1YmxpYzoKLSAgICBCYWcoKQot
ICAgIHsKLSAgICB9CisgICAgQmFnKCkgPSBkZWZhdWx0OwogCi0gICAgQmFnKEJhZzxUPiYmIG90
aGVyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnKEJhZzxULCBVPiYmIG90aGVy
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2hlYWQpOwotICAgICAgICBtX2hlYWQgPSBvdGhl
ci5tX2hlYWQ7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKICAgICAg
ICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBCYWcmIG9wZXJhdG9yPShC
YWc8VD4mJiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0
b3I9KEJhZzxULCBVPiYmIG90aGVyKQogICAgIHsKLSAgICAgICAgbV9oZWFkID0gb3RoZXIubV9o
ZWFkOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CiAgICAgICAgIG90
aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC03
NSw5ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAg
ICAgICB3aGlsZSAobV9oZWFkKSB7Ci0gICAgICAgICAgICBOb2RlKiBjdXJyZW50ID0gbV9oZWFk
OwotICAgICAgICAgICAgbV9oZWFkID0gY3VycmVudC0+bV9uZXh0OworICAgICAgICBOb2RlKiBo
ZWFkID0gdGhpcy0+dW53cmFwcGVkSGVhZCgpOworICAgICAgICB3aGlsZSAoaGVhZCkgeworICAg
ICAgICAgICAgTm9kZSogY3VycmVudCA9IGhlYWQ7CisgICAgICAgICAgICBoZWFkID0gY3VycmVu
dC0+bV9uZXh0OwogICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CiAgICAgICAgIH0KICAgICAg
ICAgbV9oZWFkID0gbnVsbHB0cjsKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgIFQqIGFk
ZChBcmdzJiYuLi4gYXJncykKICAgICB7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9k
ZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICAgICBuZXdOb2RlLT5tX25leHQg
PSBtX2hlYWQ7CisgICAgICAgIG5ld05vZGUtPm1fbmV4dCA9IHVud3JhcHBlZEhlYWQoKTsKICAg
ICAgICAgbV9oZWFkID0gbmV3Tm9kZTsKICAgICAgICAgcmV0dXJuICZuZXdOb2RlLT5tX2l0ZW07
CiAgICAgfQpAQCAtMTIxLDE0ICsxMjgsMTQgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBmcmllbmQgY2xhc3MgV1RGOjpC
YWc7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIFdU
Rjo6QmFnOwogICAgICAgICBOb2RlKiBtX25vZGU7CiAgICAgfTsKICAgICAKICAgICBpdGVyYXRv
ciBiZWdpbigpCiAgICAgewogICAgICAgICBpdGVyYXRvciByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX25vZGUgPSBtX2hlYWQ7CisgICAgICAgIHJlc3VsdC5tX25vZGUgPSB1bndyYXBwZWRIZWFk
KCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTM3LDEyICsxNDQs
MjAgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2hlYWQ7
IH0KICAgICAKIHByaXZhdGU6Ci0gICAgTm9kZSogbV9oZWFkIHsgbnVsbHB0ciB9OworICAgIE5v
ZGUqIHVud3JhcHBlZEhlYWQoKSB7IHJldHVybiBQdHJUcmFpdHM6OnVud3JhcChtX2hlYWQpOyB9
CisKKyAgICB0eXBlbmFtZSBQdHJUcmFpdHM6OlN0b3JhZ2VUeXBlIG1faGVhZCB7IG51bGxwdHIg
fTsKIH07CiAKK3RlbXBsYXRlPHVpbnQzMl90IGtleSwgdHlwZW5hbWUgVD4gc3RydWN0IENvbnN0
RXhwclBvaXNvbmVkUHRyVHJhaXRzOworCit0ZW1wbGF0ZTx1aW50MzJfdCBrZXksIHR5cGVuYW1l
IFQ+Cit1c2luZyBQb2lzb25lZEJhZyA9IEJhZzxULCBDb25zdEV4cHJQb2lzb25lZFB0clRyYWl0
czxrZXksIFByaXZhdGU6OkJhZ05vZGU8VD4+PjsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6QmFnOwordXNpbmcgV1RGOjpQb2lzb25lZEJhZzsKIAogI2VuZGlmIC8vIEJhZ19o
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZ1RvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0JhZ1RvSGFzaE1hcC5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9CYWdUb0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMCArMzEsMTAg
QEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0
eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlHZXR0ZXJGdW5j
dG9yPgotdm9pZCB0b0hhc2hNYXAoQmFnPEVsZW1lbnRUeXBlPiYgYmFnLCBLZXlHZXR0ZXJGdW5j
dG9yJiBnZXRLZXksIEhhc2hNYXA8S2V5VHlwZSwgRWxlbWVudFR5cGUqLCBIYXNoQXJnPiYgcmVz
dWx0KQordGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIEJhZ1B0clRyYWl0
cywgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5R2V0dGVy
RnVuY3Rvcj4KK3ZvaWQgdG9IYXNoTWFwKEJhZzxFbGVtZW50VHlwZSwgQmFnUHRyVHJhaXRzPiYg
YmFnLCBLZXlHZXR0ZXJGdW5jdG9yJiBnZXRLZXksIEhhc2hNYXA8S2V5VHlwZSwgRWxlbWVudFR5
cGUqLCBIYXNoQXJnPiYgcmVzdWx0KQogewotICAgIGZvciAodHlwZW5hbWUgQmFnPEVsZW1lbnRU
eXBlPjo6aXRlcmF0b3IgaXRlciA9IGJhZy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAg
IGZvciAodHlwZW5hbWUgQmFnPEVsZW1lbnRUeXBlLCBCYWdQdHJUcmFpdHM+OjppdGVyYXRvciBp
dGVyID0gYmFnLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIEVsZW1lbnRUeXBl
KiBlbGVtZW50ID0gKml0ZXI7CiAgICAgICAgIEtleVR5cGUga2V5ID0gZ2V0S2V5KCplbGVtZW50
KTsKICAgICAgICAgcmVzdWx0LmFkZChrZXksIGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dURi93
dGYvUG9pc29uZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Qb2lzb25lZC5oCShy
ZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Qb2lzb25lZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw2ICs4Nyw3IEBAIGFzUmVmZXJlbmNlKFQgcHRyKSB7IHJldHVybiAqcHRyOyB9
CiAKIH0gLy8gbmFtZXNwYWNlIFBvaXNvbmVkSW1wbEhlbHBlcgogCisvLyBGaVhNRTogb25jZSB3
ZSBoYXZlIEMrKzE3LCB3ZSBjYW4gbWFrZSB0aGUga2V5IG9mIHR5cGUgYXV0byBhbmQgcmVtb3Zl
IHRoZSBuZWVkIGZvciBLZXlUeXBlLgogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgS2V5VHlw
ZSBrZXksIHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Bv
aW50ZXI8VD46OnZhbHVlPj4KIGNsYXNzIFBvaXNvbmVkSW1wbCB7CiBwdWJsaWM6CkBAIC0yMjcs
MTMgKzIyOCwxOCBAQCBpbmxpbmUgdm9pZCBzd2FwKFBvaXNvbmVkSW1wbDxLMSwgazEsIFQxCiAK
IFdURl9FWFBPUlRfUFJJVkFURSB1aW50cHRyX3QgbWFrZVBvaXNvbigpOwogCisvLyBGSVhNRTog
b25jZSB3ZSBoYXZlIEMrKzE3LCB3ZSBjYW4gbWFrZSB0aGlzIGEgbGFtYmRhIGluIG1ha2VDb25z
dEV4cHJQb2lzb24oKS4KK2lubGluZSBjb25zdGV4cHIgdWludHB0cl90IGNvbnN0RXhwclBvaXNv
blJhbmRvbSh1aW50cHRyX3Qgc2VlZCkKK3sKKyAgICB1aW50cHRyX3QgcmVzdWx0MSA9IHNlZWQg
KiA2OTA2OTY5MDY5ICsgMTIzNDU2NzsKKyAgICB1aW50cHRyX3QgcmVzdWx0MiA9IHNlZWQgKiA4
MjUzNzI5ICsgMjM5NjQwMzsKKyAgICByZXR1cm4gKHJlc3VsdDEgPDwgMykgXiAocmVzdWx0MiA8
PCAxNik7Cit9CisKIGlubGluZSBjb25zdGV4cHIgdWludHB0cl90IG1ha2VDb25zdEV4cHJQb2lz
b24odWludDMyX3Qga2V5KQogewogI2lmIEVOQUJMRShQT0lTT04pCi0gICAgdWludHB0cl90IHVp
bnRwdHJLZXkgPSBrZXk7Ci0gICAgdWludHB0cl90IHBvaXNvbjEgPSB1aW50cHRyS2V5ICogNjkw
Njk2OTA2OSArIDEyMzQ1Njc7Ci0gICAgdWludHB0cl90IHBvaXNvbjIgPSB1aW50cHRyS2V5ICog
ODI1MzcyOSArIDIzOTY0MDM7Ci0gICAgdWludHB0cl90IHBvaXNvbiA9IChwb2lzb24xIDw8IDMp
IF4gKHBvaXNvbjIgPDwgMTYpOworICAgIHVpbnRwdHJfdCBwb2lzb24gPSBjb25zdEV4cHJQb2lz
b25SYW5kb20oa2V5KTsKICAgICBwb2lzb24gJj0gfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDB4
ZmZmZikgPDwgNDgpOyAvLyBFbnN1cmUgdGhhdCBwb2lzb25lZCBiaXRzIGxvb2sgbGlrZSBhIHBv
aW50ZXIuCiAgICAgcG9pc29uIHw9ICgxIDw8IDIpOyAvLyBFbnN1cmUgdGhhdCBwb2lzb25lZCBi
aXRzIGNhbm5vdCBiZSAwLgogICAgIHJldHVybiBwb2lzb247CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9SZWZDb3VudGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWZDb3Vu
dGVkQXJyYXkuaAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL1dURi93dGYvUmVmQ291bnRl
ZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBSZWZD
b3VudGVkQXJyYXlfaAogI2RlZmluZSBSZWZDb3VudGVkQXJyYXlfaAogCisjaW5jbHVkZSA8d3Rm
L0R1bWJQdHJUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00MywyMCAr
NDQsMjEgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUcmFpdHMgPSBEdW1iUHRyVHJhaXRzPFQ+Pgog
Y2xhc3MgUmVmQ291bnRlZEFycmF5IHsKKyAgICBlbnVtIENvbW1vbkNvcHlDb25zdHJ1Y3RvclRh
ZyB7IENvbW1vbkNvcHlDb25zdHJ1Y3RvciB9OworCiBwdWJsaWM6Ci0gICAgUmVmQ291bnRlZEFy
cmF5KCkKLSAgICAgICAgOiBtX2RhdGEoMCkKLSAgICB7Ci0gICAgfQorICAgIFJlZkNvdW50ZWRB
cnJheSgpID0gZGVmYXVsdDsKICAgICAKICAgICBSZWZDb3VudGVkQXJyYXkoY29uc3QgUmVmQ291
bnRlZEFycmF5JiBvdGhlcikKLSAgICAgICAgOiBtX2RhdGEob3RoZXIubV9kYXRhKQotICAgIHsK
LSAgICAgICAgaWYgKG1fZGF0YSkKLSAgICAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9k
YXRhKS0+cmVmQ291bnQrKzsKLSAgICB9CisgICAgICAgIDogUmVmQ291bnRlZEFycmF5KENvbW1v
bkNvcHlDb25zdHJ1Y3Rvciwgb3RoZXIpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPdGhlclRyYWl0cz4KKyAgICBSZWZDb3VudGVkQXJyYXkoY29uc3QgUmVmQ291bnRlZEFycmF5
PFQsIE90aGVyVHJhaXRzPiYgb3RoZXIpCisgICAgICAgIDogUmVmQ291bnRlZEFycmF5KENvbW1v
bkNvcHlDb25zdHJ1Y3Rvciwgb3RoZXIpCisgICAgeyB9CiAKICAgICBleHBsaWNpdCBSZWZDb3Vu
dGVkQXJyYXkoc2l6ZV90IHNpemUpCiAgICAgewpAQCAtNjUsMTggKzY3LDIyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fZGF0YSA9IChzdGF0
aWNfY2FzdDxIZWFkZXIqPihmYXN0TWFsbG9jKEhlYWRlcjo6c2l6ZSgpICsgc2l6ZW9mKFQpICog
c2l6ZSkpKS0+cGF5bG9hZCgpOwotICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSkt
PnJlZkNvdW50ID0gMTsKLSAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5n
dGggPSBzaXplOwotICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5s
ZW5ndGggPT0gc2l6ZSk7CisgICAgICAgIFQqIGRhdGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVyKj4o
ZmFzdE1hbGxvYyhIZWFkZXI6OnNpemUoKSArIHNpemVvZihUKSAqIHNpemUpKSktPnBheWxvYWQo
KTsKKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChk
YXRhKS0+cmVmQ291bnQgPSAxOworICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5s
ZW5ndGggPSBzaXplOworICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+
bGVuZ3RoID09IHNpemUpOwogICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6aW5pdGlh
bGl6ZShiZWdpbigpLCBlbmQoKSk7CiAgICAgfQogCi0gICAgUmVmQ291bnRlZEFycmF5IGNsb25l
KCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0cyA9IFB0clRyYWl0cz4K
KyAgICBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+IGNsb25lKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIFJlZkNvdW50ZWRBcnJheSByZXN1bHQoc2l6ZSgpKTsKKyAgICAgICAgUmVmQ291
bnRlZEFycmF5PFQsIE90aGVyVHJhaXRzPiByZXN1bHQoc2l6ZSgpKTsKKyAgICAgICAgY29uc3Qg
VCogZGF0YSA9IHRoaXMtPmRhdGEoKTsKKyAgICAgICAgVCogcmVzdWx0RGF0YSA9IHJlc3VsdC5k
YXRhKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKLSAgICAgICAg
ICAgIHJlc3VsdFtpXSA9IGF0KGkpOworICAgICAgICAgICAgcmVzdWx0RGF0YVtpXSA9IGRhdGFb
aV07CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC04OCwyMCArOTQsMjMgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBtX2RhdGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVyKj4oZmFzdE1hbGxvYyhIZWFkZXI6OnNpemUo
KSArIHNpemVvZihUKSAqIG90aGVyLnNpemUoKSkpKS0+cGF5bG9hZCgpOwotICAgICAgICBIZWFk
ZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPnJlZkNvdW50ID0gMTsKLSAgICAgICAgSGVhZGVyOjpm
cm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGggPSBvdGhlci5zaXplKCk7Ci0gICAgICAgIEFTU0VS
VChIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOwot
ICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkob3RoZXIu
YmVnaW4oKSwgb3RoZXIuZW5kKCksIG1fZGF0YSk7Ci0gICAgfQotICAgIAotICAgIFJlZkNvdW50
ZWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IFJlZkNvdW50ZWRBcnJheSYgb3RoZXIpCi0gICAgewot
ICAgICAgICBUKiBvbGREYXRhID0gbV9kYXRhOwotICAgICAgICBtX2RhdGEgPSBvdGhlci5tX2Rh
dGE7Ci0gICAgICAgIGlmIChtX2RhdGEpCi0gICAgICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2Fk
KG1fZGF0YSktPnJlZkNvdW50Kys7Ci0gICAgICAgIAorICAgICAgICBUKiBkYXRhID0gKHN0YXRp
Y19jYXN0PEhlYWRlcio+KGZhc3RNYWxsb2MoSGVhZGVyOjpzaXplKCkgKyBzaXplb2YoVCkgKiBv
dGhlci5zaXplKCkpKSktPnBheWxvYWQoKTsKKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICAg
ICAgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+cmVmQ291bnQgPSAxOworICAgICAgICBIZWFk
ZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5ndGggPSBvdGhlci5zaXplKCk7CisgICAgICAgIEFT
U0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5ndGggPT0gb3RoZXIuc2l6ZSgpKTsK
KyAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVy
LmJlZ2luKCksIG90aGVyLmVuZCgpLCBkYXRhKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3RoZXJUcmFpdHMgPSBQdHJUcmFpdHM+CisgICAgUmVmQ291bnRlZEFycmF5JiBv
cGVyYXRvcj0oY29uc3QgUmVmQ291bnRlZEFycmF5PFQsIE90aGVyVHJhaXRzPiYgb3RoZXIpCisg
ICAgeworICAgICAgICBUKiBvbGREYXRhID0gZGF0YSgpOworICAgICAgICBUKiBvdGhlckRhdGEg
PSBjb25zdF9jYXN0PFQqPihvdGhlci5kYXRhKCkpOworICAgICAgICBpZiAob3RoZXJEYXRhKQor
ICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChvdGhlckRhdGEpLT5yZWZDb3VudCsrOwor
ICAgICAgICBtX2RhdGEgPSBvdGhlckRhdGE7CisKICAgICAgICAgaWYgKCFvbGREYXRhKQogICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICBpZiAoLS1IZWFkZXI6OmZyb21QYXlsb2Fk
KG9sZERhdGEpLT5yZWZDb3VudCkKQEAgLTExMCw0NCArMTE5LDQ4IEBAIHB1YmxpYzoKICAgICAg
ICAgZmFzdEZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKSk7CiAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9Ci0gICAgCisKKyAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShj
b25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKSB7IHJldHVybiB0aGlzLT5vcGVyYXRvcj08UHRy
VHJhaXRzPihvdGhlcik7IH0KKwogICAgIH5SZWZDb3VudGVkQXJyYXkoKQogICAgIHsKICAgICAg
ICAgaWYgKCFtX2RhdGEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgtLUhlYWRl
cjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQpCisgICAgICAgIFQqIGRhdGEgPSB0aGlz
LT5kYXRhKCk7CisgICAgICAgIGlmICgtLUhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPnJlZkNv
dW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxU
Pjo6ZGVzdHJ1Y3QoYmVnaW4oKSwgZW5kKCkpOwotICAgICAgICBmYXN0RnJlZShIZWFkZXI6OmZy
b21QYXlsb2FkKG1fZGF0YSkpOworICAgICAgICBmYXN0RnJlZShIZWFkZXI6OmZyb21QYXlsb2Fk
KGRhdGEpKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
cmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQ7CisgICAgICAgIHJl
dHVybiBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEoKSktPnJlZkNvdW50OwogICAgIH0KICAgICAK
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fZGF0YSkKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5bG9hZCht
X2RhdGEpLT5sZW5ndGg7CisgICAgICAgIHJldHVybiBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEo
KSktPmxlbmd0aDsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGJ5dGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZSgpICogc2l6ZW9mKFQpOyB9CiAgICAgCi0gICAgVCogZGF0YSgpIHsgcmV0dXJu
IG1fZGF0YTsgfQotICAgIFQqIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgVCogZGF0
YSgpIHsgcmV0dXJuIFB0clRyYWl0czo6dW53cmFwKG1fZGF0YSk7IH0KKyAgICBUKiBiZWdpbigp
IHsgcmV0dXJuIGRhdGEoKTsgfQogICAgIFQqIGVuZCgpCiAgICAgewogICAgICAgICBpZiAoIW1f
ZGF0YSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9kYXRhICsgSGVh
ZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGg7CisgICAgICAgIFQqIGRhdGEgPSB0aGlz
LT5kYXRhKCk7CisgICAgICAgIHJldHVybiBkYXRhICsgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRh
KS0+bGVuZ3RoOwogICAgIH0KICAgICAKLSAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9Ci0gICAgY29uc3QgVCogYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KKyAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxSZWZDb3Vu
dGVkQXJyYXkqPih0aGlzKS0+ZGF0YSgpOyB9CisgICAgY29uc3QgVCogYmVnaW4oKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PFJlZkNvdW50ZWRBcnJheSo+KHRoaXMpLT5iZWdpbigpOyB9CiAg
ICAgY29uc3QgVCogZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxSZWZDb3VudGVkQXJy
YXkqPih0aGlzKS0+ZW5kKCk7IH0KICAgICAKICAgICBUJiBhdChzaXplX3QgaSkKQEAgLTE2NSwy
MSArMTc4LDI2IEBAIHB1YmxpYzoKICAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVy
biBhdChpKTsgfQogICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0
dXJuIGF0KGkpOyB9CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmQ291bnRlZEFycmF5
JiBvdGhlcikgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0cyA9IFB0clRy
YWl0cz4KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmQ291bnRlZEFycmF5PFQsIE90aGVy
VHJhaXRzPiYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAobV9kYXRhID09IG90aGVy
Lm1fZGF0YSkKKyAgICAgICAgVCogZGF0YSA9IGNvbnN0X2Nhc3Q8VCo+KHRoaXMtPmRhdGEoKSk7
CisgICAgICAgIFQqIG90aGVyRGF0YSA9IGNvbnN0X2Nhc3Q8VCo+KG90aGVyLmRhdGEoKSk7Cisg
ICAgICAgIGlmIChkYXRhID09IG90aGVyRGF0YSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIW1fZGF0YSB8fCAhb3RoZXIubV9kYXRhKQorICAgICAgICBpZiAoIWRhdGEg
fHwgIW90aGVyRGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGg7Ci0gICAgICAg
IGlmIChsZW5ndGggIT0gSGVhZGVyOjpmcm9tUGF5bG9hZChvdGhlci5tX2RhdGEpLT5sZW5ndGgp
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPmxl
bmd0aDsKKyAgICAgICAgaWYgKGxlbmd0aCAhPSBIZWFkZXI6OmZyb21QYXlsb2FkKG90aGVyRGF0
YSktPmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9kYXRhW2ld
ICE9IG90aGVyLm1fZGF0YVtpXSkKKyAgICAgICAgICAgIGlmIChkYXRhW2ldICE9IG90aGVyRGF0
YVtpXSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZkNvdW50
ZWRBcnJheSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPT08UHRyVHJhaXRz
PihvdGhlcik7IH0KICAgICAKIHByaXZhdGU6CiAgICAgc3RydWN0IEhlYWRlciB7CkBAIC0yMDIs
MTMgKzIyMCwzMiBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdF9wdHI8SGVhZGVyKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGF5bG9h
ZCkgLSBzaXplKCkpOwogICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGNvbnN0IEhlYWRlciog
ZnJvbVBheWxvYWQoY29uc3QgVCogcGF5bG9hZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZyb21QYXlsb2FkKGNvbnN0X2Nhc3Q8VCo+KHBheWxvYWQpKTsKKyAgICAgICAgfQogICAg
IH07Ci0gICAgCi0gICAgVCogbV9kYXRhOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJU
cmFpdHM+CisgICAgUmVmQ291bnRlZEFycmF5KENvbW1vbkNvcHlDb25zdHJ1Y3RvclRhZywgY29u
c3QgUmVmQ291bnRlZEFycmF5PFQsIE90aGVyVHJhaXRzPiYgb3RoZXIpCisgICAgICAgIDogbV9k
YXRhKGNvbnN0X2Nhc3Q8VCo+KG90aGVyLmRhdGEoKSkpCisgICAgeworICAgICAgICBpZiAobV9k
YXRhKQorICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKCkpLT5yZWZDb3VudCsr
OworICAgIH0KKworICAgIHR5cGVuYW1lIFB0clRyYWl0czo6U3RvcmFnZVR5cGUgbV9kYXRhIHsg
bnVsbHB0ciB9OwogfTsKIAordGVtcGxhdGU8dWludDMyX3Qga2V5LCB0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29uc3RFeHByUG9pc29uZWRQdHJUcmFpdHM7CisKK3RlbXBsYXRlPHVpbnQzMl90IGtleSwg
dHlwZW5hbWUgVD4KK3VzaW5nIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5ID0gUmVmQ291bnRlZEFy
cmF5PFQsIENvbnN0RXhwclBvaXNvbmVkUHRyVHJhaXRzPGtleSwgVD4+OworCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAordXNpbmcgV1RGOjpQb2lzb25lZFJlZkNvdW50ZWRBcnJheTsKIHVzaW5nIFdU
Rjo6UmVmQ291bnRlZEFycmF5OwogCiAjZW5kaWYgLy8gUmVmQ291bnRlZEFycmF5X2gKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1dURkFzc2VydGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1dURkFzc2VydGlvbnMuY3BwCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9XVEZBc3NlcnRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE3IEBA
CiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRl
IDx3dGYvUG9pc29uZWQuaD4KICNpbmNsdWRlIDx3dGYvUG9pc29uZWRVbmlxdWVQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
CiBuYW1lc3BhY2UgV1RGIHsKIAogbmFtZXNwYWNlIHsKIHN0cnVjdCBEdW1teVN0cnVjdCB7IH07
Citjb25zdCB1aW50MzJfdCBkdW1teVBvaXNvbiA9IDB4ZmZmZjsKIH0KIAogI2lmIEVOQUJMRShQ
T0lTT04pCkBAIC02NSwxNSArNjgsMjEgQEAgc3RhdGljX2Fzc2VydCghKG1ha2VDb25zdEV4cHJQ
b2lzb24oMTAwMAogc3RhdGljX2Fzc2VydCghKG1ha2VDb25zdEV4cHJQb2lzb24oMHhmZmZmZmZm
ZikgJiAweDMpLCAiZW5zdXJlIGJvdHRvbSAyIGFsaWdubWVudCBiaXRzIGFyZSBhdmFpbGFibGUg
Zm9yIHVzZSBhcyBmbGFnIGJpdHMuIik7CiAjZW5kaWYgLy8gRU5BQkxFKFBPSVNPTikKIAorc3Rh
dGljX2Fzc2VydChzaXplb2YoQmFnPER1bW15U3RydWN0PikgPT0gc2l6ZW9mKHZvaWQqKSwgIiIp
Oworc3RhdGljX2Fzc2VydChzaXplb2YoUG9pc29uZWRCYWc8ZHVtbXlQb2lzb24sIER1bW15U3Ry
dWN0PikgPT0gc2l6ZW9mKHZvaWQqKSwgIiIpOworCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihSZWY8
RHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOwotc3RhdGljX2Fzc2Vy
dChzaXplb2YoUG9pc29uZWRSZWY8MHhmZmZmLCBEdW1teVN0cnVjdD4pID09IHNpemVvZihEdW1t
eVN0cnVjdCopLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFJlZjxkdW1teVBv
aXNvbiwgRHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOwogCiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihSZWZQdHI8RHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlTdHJ1
Y3QqKSwgIiIpOwotc3RhdGljX2Fzc2VydChzaXplb2YoUG9pc29uZWRSZWZQdHI8MHhmZmZmLCBE
dW1teVN0cnVjdD4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7Ci0KLXN0YXRpY19hc3Nl
cnQoc2l6ZW9mKFBvaXNvbmVkVW5pcXVlUHRyPDB4ZmZmZiwgRHVtbXlTdHJ1Y3Q+KSA9PSBzaXpl
b2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOwotc3RhdGljX2Fzc2VydChzaXplb2YoUG9pc29uZWRVbmlx
dWVQdHI8MHhmZmZmLCBpbnRbXT4pID09IHNpemVvZihpbnQqKSwgIiIpOwotc3RhdGljX2Fzc2Vy
dChzaXplb2YoUG9pc29uZWRVbmlxdWVQdHI8MHhmZmZmLCBEdW1teVN0cnVjdFtdPikgPT0gc2l6
ZW9mKER1bW15U3RydWN0KiksICIiKTsKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkUmVm
UHRyPGR1bW15UG9pc29uLCBEdW1teVN0cnVjdD4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAi
Iik7CiAKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkVW5pcXVlUHRyPGR1bW15UG9pc29u
LCBEdW1teVN0cnVjdD4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7CitzdGF0aWNfYXNz
ZXJ0KHNpemVvZihQb2lzb25lZFVuaXF1ZVB0cjxkdW1teVBvaXNvbiwgaW50W10+KSA9PSBzaXpl
b2YoaW50KiksICIiKTsKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkVW5pcXVlUHRyPGR1
bW15UG9pc29uLCBEdW1teVN0cnVjdFtdPikgPT0gc2l6ZW9mKER1bW15U3RydWN0KiksICIiKTsK
Kworc3RhdGljX2Fzc2VydChzaXplb2YoUmVmQ291bnRlZEFycmF5PER1bW15U3RydWN0PikgPT0g
c2l6ZW9mKHZvaWQqKSwgIiIpOworc3RhdGljX2Fzc2VydChzaXplb2YoUG9pc29uZWRSZWZDb3Vu
dGVkQXJyYXk8ZHVtbXlQb2lzb24sIER1bW15U3RydWN0PikgPT0gc2l6ZW9mKHZvaWQqKSwgIiIp
OworICAgIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330712</attachid>
            <date>2018-01-08 10:12:48 -0800</date>
            <delta_ts>2018-01-08 12:10:27 -0800</delta_ts>
            <desc>proposed patch w/ 32-bit build fix.</desc>
            <filename>bug-181096.patch</filename>
            <type>text/plain</type>
            <size>78718</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI2NDk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE4LTAxLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
cHBseSBwb2lzb25pbmcgdG8gbW9yZSBwb2ludGVycyBpbiBKU0MuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEwOTYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM2MTgyOTcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjp4b3JQdHIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvcjY0KToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnhvcjY0KToKKyAgICAgICAgLSBBZGQgeG9yUHRyIGltcGxl
bWVudGF0aW9uLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjppbmZlcnJlZE5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp2aXNpdFdlYWtseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OnZpc2l0V2Vha1Jl
ZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVD
YWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxp
bmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6
ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
ZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVT
aXplKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxG
aW5hbGl6ZXI6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvQmVnaW4pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnN0dWJJbmZvRW5kKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsTGlua0lu
Zm9zQmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxMaW5rSW5mb3NFbmQpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aW5zdHJ1Y3Rpb25zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2
bSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOgorICAg
ICAgICAoSlNDOjpERkc6OmFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRDb21waWxlclRodW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogbGxpbnQvTExJbnRPZmZsaW5lQXNt
Q29uZmlnLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBwYXJzZXIv
VW5saW5rZWRTb3VyY2VDb2RlLmg6CisgICAgICAgICogcnVudGltZS9KU0NQb2lzb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OmluaXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmg6CisgICAgICAgICogcnVu
dGltZS9KU1NjcmlwdEZldGNoZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6VW5jb25kaXRp
b25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorCiAyMDE4LTAxLTA2ICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eU5hbWVzIGluY2x1ZGVzICJhcmd1bWVudHMiIGFuZCAiY2FsbGVyIiBmb3IgYm91bmQgZnVuY3Rp
b25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTIsNiArNjUyLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgeG9yMzIoaW1tLCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICB2
b2lkIHhvclB0cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsK
KyAgICAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAg
IHZvaWQgeG9yUHRyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICB4b3IzMihzcmMsIGRlc3QpOwpAQCAtOTkxLDYgKzk5NiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHhvcjY0KGltbSwgc3JjRGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB4b3JQdHIoVHJ1c3RlZElt
bVB0ciBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW02NChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGxvYWRQdHIoSW1wbGlj
aXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGxvYWQ2
NChhZGRyZXNzLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTk5MSw2ICs5OTEsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fQogCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CisgICAgeworICAgICAgICB4b3I2NChpbW0sIHNyY0Rlc3QsIHNyY0Rlc3QpOworICAgIH0KKwog
ICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgJKHJldmlzaW9uIDIyNjQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwOSw2ICs4
MDksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2lyKGltbS5tX3ZhbHVl
LCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW02NCBpbW0sIFJl
Z2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0
ZXIoKSk7CisgICAgICAgIHhvcjY0KHNjcmF0Y2hSZWdpc3RlcigpLCBzcmNEZXN0KTsKKyAgICB9
CisKICAgICB2b2lkIG5vdDY0KFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLm5vdHFfcihzcmNEZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNo
IDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTAxLDYgKzEw
MSwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzLCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgor
UG9pc29uZWRVbmlxdWVQdHI8Q29kZUJsb2NrUG9pc29uLCBUPiBtYWtlUG9pc29uZWRVbmlxdWUo
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBXVEY6Om1ha2VQb2lzb25l
ZFVuaXF1ZTxDb2RlQmxvY2tQb2lzb24sIFQ+KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogY29uc3QgQ2xhc3NJ
bmZvIENvZGVCbG9jazo6c19pbmZvID0gewogICAgICJDb2RlQmxvY2siLCBudWxscHRyLCBudWxs
cHRyLCBudWxscHRyLAogICAgIENSRUFURV9NRVRIT0RfVEFCTEUoQ29kZUJsb2NrKQpAQCAtMzA3
LDEyICszMTcsMTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25zdHJ1Y3RvcikKICAgICAsIG1faXNT
dHJpY3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQogICAgICwgbV9jb2RlVHlwZShvdGhlci5t
X2NvZGVUeXBlKQotICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fdm0sIHRoaXMsIG90aGVy
Lm1fdW5saW5rZWRDb2RlLmdldCgpKQorICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLnZtKCks
IHRoaXMsIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwgbV9udW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICwgbV9oYXNE
ZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKICAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9k
ZURpc2FibGVkKQogICAgICwgbV9udW1CcmVha3BvaW50cygwKQotICAgICwgbV9vd25lckV4ZWN1
dGFibGUoKm90aGVyLm1fdm0sIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQor
ICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJF
eGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVj
dGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5t
X3RoaXNSZWdpc3RlcikKQEAgLTMyOSw2ICszMzksOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQog
ICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogICAgICwgbV9jcmVhdGlvblRp
bWUoTW9ub3RvbmljVGltZTo6bm93KCkpCisgICAgLCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIo
bWFrZVBvaXNvbmVkVW5pcXVlPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+KCp0aGlzKSkKKyAgICAs
IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcihtYWtlUG9pc29uZWRVbmlxdWU8V2Vha1JlZmVyZW5j
ZUhhcnZlc3Rlcj4oKnRoaXMpKQogewogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0g
ZmFsc2U7CiAKQEAgLTM4Nyw2ICszOTksOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwg
bV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogICAgICwgbV9jcmVhdGlvblRpbWUoTW9u
b3RvbmljVGltZTo6bm93KCkpCisgICAgLCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIobWFrZVBv
aXNvbmVkVW5pcXVlPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+KCp0aGlzKSkKKyAgICAsIG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcihtYWtlUG9pc29uZWRVbmlxdWU8V2Vha1JlZmVyZW5jZUhhcnZl
c3Rlcj4oKnRoaXMpKQogewogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0gZmFsc2U7
CiAKQEAgLTQyMiwxOSArNDM2LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFMKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKIAog
ICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9iamVjdCgpKQotICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3Rl
cigpLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50SW5kZXgoKV0uc2V0KHZtLCB0aGlzLCBtX2ds
b2JhbE9iamVjdC5nZXQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGlua1Rp
bWVDb25zdGFudENvdW50OyBpKyspIHsKICAgICAgICAgTGlua1RpbWVDb25zdGFudCB0eXBlID0g
c3RhdGljX2Nhc3Q8TGlua1RpbWVDb25zdGFudD4oaSk7CiAgICAgICAgIGlmICh1bnNpZ25lZCBy
ZWdpc3RlckluZGV4ID0gdW5saW5rZWRDb2RlQmxvY2stPnJlZ2lzdGVySW5kZXhGb3JMaW5rVGlt
ZUNvbnN0YW50KHR5cGUpKQotICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tyZWdpc3Rl
ckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LT5qc0NlbGxGb3JMaW5rVGlt
ZUNvbnN0YW50KHR5cGUpKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnaXN0
ZXJJbmRleF0uc2V0KHZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC0+anNDZWxsRm9yTGlua1RpbWVD
b25zdGFudCh0eXBlKSk7CiAgICAgfQogCiAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIHRoZSBjbG9u
ZWQgc3ltYm9sIHRhYmxlIGZvciB0aGUgbW9kdWxlIGVudmlyb25tZW50IHNpbmNlIHdlIG5lZWQg
dG8gaW5zdGFudGlhdGUKICAgICAvLyB0aGUgbW9kdWxlIGVudmlyb25tZW50cyBiZWZvcmUgbGlu
a2luZyB0aGUgY29kZSBibG9jay4gV2UgcmVwbGFjZSB0aGUgc3RvcmVkIHN5bWJvbCB0YWJsZSB3
aXRoIHRoZSBhbHJlYWR5IGNsb25lZCBvbmUuCiAgICAgaWYgKFVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrID0ganNEeW5hbWljQ2Fz
dDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPih2bSwgdW5saW5rZWRDb2RlQmxvY2sp
KSB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiBjbG9uZWRTeW1ib2xUYWJsZSA9IGpzQ2FzdDxNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSktPm1vZHVsZUVudmlyb25tZW50
U3ltYm9sVGFibGUoKTsKLSAgICAgICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKSB7CisgICAg
ICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgIGNsb25l
ZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwogICAgICAgICB9
CkBAIC00NDcsNyArNDYxLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRh
YmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChpKTsKICAgICAgICAgaWYgKHNo
b3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSkKICAgICAgICAgICAgIHZtLmZ1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRh
YmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9m
ZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7Ci0g
ICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQoKm1fdm0sIHRoaXMsIHVubGlua2VkRXhlY3V0
YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgICAgICBt
X2Z1bmN0aW9uRGVjbHNbaV0uc2V0KHZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmso
dm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICB9CiAKICAgICBtX2Z1bmN0aW9u
RXhwcnMgPSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+
KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7CkBAIC00NTUsNyAr
NDY5LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5r
ZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSkKICAgICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJ
RCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7Ci0gICAgICAgIG1fZnVu
Y3Rpb25FeHByc1tpXS5zZXQoKm1fdm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygq
bV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgICAgICBtX2Z1bmN0aW9uRXhw
cnNbaV0uc2V0KHZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsodm0sIG93bmVyRXhl
Y3V0YWJsZS0+c291cmNlKCkpKTsKICAgICB9CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2st
Pmhhc1JhcmVEYXRhKCkpIHsKQEAgLTg1Myw4ICs4NjcsOSBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7Ci0gICAg
aWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpCi0gICAgICAgIG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CisgICAgVk0m
IHZtID0gKm1fdm07CisgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikp
CisgICAgICAgIHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhp
cyk7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSA9PSBNaXhl
ZFRyaVN0YXRlKQogICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5zZXREaWRPcHRpbWl6ZShG
YWxzZVRyaVN0YXRlKTsKQEAgLTg3Niw3ICs4OTEsNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogICAgIC8vIGRlc3RydWN0b3JzLgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKEJhZzxT
dHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAq
aXRlcjsKICAgICAgICAgc3R1Yi0+YWJvdXRUb0RpZSgpOwogICAgICAgICBzdHViLT5kZXJlZigp
OwpAQCAtOTA5LDM3ICs5MjQsMzggQEAgdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRp
ZmllclNldAogCiB2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikK
IHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqbV92bSk7CisgICAgVk0m
IHZtID0gKm1fdm07CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAg
IEFTU0VSVChjb25zdGFudHMuc2l6ZSgpID09IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbi5zaXplKCkpOwogICAgIHNpemVfdCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAg
bV9jb25zdGFudFJlZ2lzdGVycy5yZXNpemVUb0ZpdChjb3VudCk7Ci0gICAgYm9vbCBoYXNUeXBl
UHJvZmlsZXIgPSAhIW1fdm0tPnR5cGVQcm9maWxlcigpOworICAgIGJvb2wgaGFzVHlwZVByb2Zp
bGVyID0gISF2bS50eXBlUHJvZmlsZXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50c1tpXS5nZXQo
KTsKIAogICAgICAgICBpZiAoIWNvbnN0YW50LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYg
KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPigq
bV92bSwgY29uc3RhbnQpKSB7CisgICAgICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KHZtLCBjb25zdGFudCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaGFzVHlwZVByb2ZpbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBjbG9uZSA9
IHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCgqbV92bSk7CisgICAgICAgICAgICAgICAgU3lt
Ym9sVGFibGUqIGNsb25lID0gc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KHZtKTsKICAgICAg
ICAgICAgICAgICBpZiAod2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpKQogICAgICAg
ICAgICAgICAgICAgICBjbG9uZS0+c2V0UmFyZURhdGFDb2RlQmxvY2sodGhpcyk7CiAKICAgICAg
ICAgICAgICAgICBjb25zdGFudCA9IGNsb25lOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc1Rl
bXBsYXRlUmVnaXN0cnlLZXkoKm1fdm0sIGNvbnN0YW50KSkgeworICAgICAgICAgICAgfSBlbHNl
IGlmIChpc1RlbXBsYXRlUmVnaXN0cnlLZXkodm0sIGNvbnN0YW50KSkgewogICAgICAgICAgICAg
ICAgIGF1dG8qIHRlbXBsYXRlT2JqZWN0ID0gZ2xvYmFsT2JqZWN0LT50ZW1wbGF0ZVJlZ2lzdHJ5
KCkuZ2V0VGVtcGxhdGVPYmplY3QoZXhlYywganNDYXN0PEpTVGVtcGxhdGVSZWdpc3RyeUtleSo+
KGNvbnN0YW50KSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICAgICAgICAgICAgICBjb25zdGFudCA9IHRlbXBsYXRlT2JqZWN0OwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5z
ZXQoKm1fdm0sIHRoaXMsIGNvbnN0YW50KTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tp
XS5zZXQodm0sIHRoaXMsIGNvbnN0YW50KTsKICAgICB9CiAKICAgICBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsK
QEAgLTk4OSw3ICsxMDA1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNp
dG9yJgogICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRp
bmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwogICAgIC8vIGlzIHByb2JhYmx5
IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4g
aXQgcnVucywgaXQKICAgICAvLyBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0
byBkby4KLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRp
b25hbEZpbmFsaXplcik7CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKG1f
dW5jb25kaXRpb25hbEZpbmFsaXplci5nZXQoKSk7CiAKICAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CkBAIC0xMDAxLDcgKzEwMTcs
NyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgLy8gVGhl
cmUgYXJlIHR3byB0aGluZ3MgdGhhdCB3ZSB1c2Ugd2VhayByZWZlcmVuY2UgaGFydmVzdGVycyBm
b3I6IERGRyBmaXhwb2ludCBmb3IKICAgICAvLyBqZXR0aXNvbmluZywgYW5kIHRyeWluZyB0byBm
aW5kIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBiZSBsaXZlIGJhc2VkIG9uIHNvbWUKICAgICAvLyBp
bmxpbmUgY2FjaGUuIFNvIGl0IG1ha2VzIHNlbnNlIHRvIHJlZ2lzdGVyIHRoZW0gcmVnYXJkbGVz
cy4KLSAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoJm1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3Rlcik7CisgICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5nZXQoKSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBXZSBnZXQgaGVyZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0IG91ciBvd25lciBl
eGVjdXRhYmxlIGlzIGxpdmUsCkBAIC0xMDQ1LDcgKzEwNjEsNyBAQCB2b2lkIENvZGVCbG9jazo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvCiAgICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUgcHJv
YmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdz
CiAgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBt
YXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAogICAgIC8vIGZpZ3VyZXMgb3V0IHdoZXRo
ZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZp
bmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKKyAgICB2aXNpdG9yLmFkZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIobV91bmNvbmRpdGlvbmFsRmluYWxpemVyLmdldCgpKTsKIAogICAg
IGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgp
KQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG90aGVyQmxvY2spOwpAQCAtMTE2
MSw2ICsxMTc3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
ICAgIGlmIChtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQpCiAgICAgICAgIHJldHVybjsK
IAorICAgIFZNJiB2bSA9ICptX3ZtOwogICAgIGJvb2wgYWxsQXJlTWFya2VkU29GYXIgPSB0cnVl
OwogICAgICAgICAKICAgICBpZiAoaml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspIHsKQEAgLTExNzQsOSArMTE5MSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8ICFuZXdT
dHJ1Y3R1cmVJRCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQotICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOworICAgICAgICAgICAgICAg
ICAgICB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KLSAgICAgICAgICAgICAgICAg
ICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAg
ICAgICAgICAgICAgICAgICAgdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJl
KSkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTExOTEsNyArMTIwOCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKLSAgICAgICAgZm9yIChCYWc8U3Ry
dWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpCisgICAgICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpCiAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciAmPSAoKml0
ZXIpLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKICAgICB9CiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKQEAgLTEyNzksMTIgKzEyOTYsOCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5l
TGl2ZW5lc3MoY29uc3QgCiAKIHZvaWQgQ29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVy
Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0KLSAgICAgICAgYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAotICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikpOwotICAgIAotICAgIGNvZGVCbG9jay0+
cHJvcGFnYXRlVHJhbnNpdGlvbnMoTm9Mb2NraW5nTmVjZXNzYXJ5LCB2aXNpdG9yKTsKLSAgICBj
b2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7
CisgICAgY29kZUJsb2NrLnByb3BhZ2F0ZVRyYW5zaXRpb25zKE5vTG9ja2luZ05lY2Vzc2FyeSwg
dmlzaXRvcik7CisgICAgY29kZUJsb2NrLmRldGVybWluZUxpdmVuZXNzKE5vTG9ja2luZ05lY2Vz
c2FyeSwgdmlzaXRvcik7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENh
Y2hlKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTEyOTcsNiArMTMxMCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENhY2hlKEkKIAogdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogeworICAgIFZNJiB2bSA9ICptX3ZtOwogICAgIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxp
bmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChzaXplX3Qg
c2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmluc3RydWN0
aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKQEAgLTEzMDUsNyArMTMxOSw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9hZDoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5z
ZXQ6IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gY3VySW5zdHJ1
Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQg
fHwgSGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKSkpCisgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6Omlz
TWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHJvcGVydHkg
YWNjZXNzLlxuIik7CkBAIC0xMzE2LDkgKzEzMzAsOSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJ
RCA9IGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7CiAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQ7CiAg
ICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBjdXJJbnN0cnVjdGlvbls3XS51LnN0
cnVjdHVyZUNoYWluLmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwg
SGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVj
dHVyZUlEKSkpICYmCi0gICAgICAgICAgICAgICAgKCFuZXdTdHJ1Y3R1cmVJRCB8fCBIZWFwOjpp
c01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQp
KSkgJiYKLSAgICAgICAgICAgICAgICAoIWNoYWluIHx8IEhlYXA6OmlzTWFya2VkKGNoYWluKSkp
CisgICAgICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtlZCh2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpKSkKKyAgICAgICAgICAg
ICAgICAmJiAoIW5ld1N0cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFya2VkKHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCkpKQorICAgICAgICAgICAgICAgICYmICgh
Y2hhaW4gfHwgSGVhcDo6aXNNYXJrZWQoY2hhaW4pKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHB1dCB0cmFuc2l0aW9uLlxuIik7CkBAIC0xNDEwLDcg
KzE0MjQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluCiAgICAg
Zm9yIChhdXRvIGl0ZXIgPSBjYWxsTGlua0luZm9zQmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCiAg
ICAgICAgICgqaXRlciktPnZpc2l0V2Vhaygqdm0oKSk7CiAKLSAgICBmb3IgKEJhZzxTdHJ1Y3R1
cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7
ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKipp
dGVyOwogICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2VzKHRoaXMpOwogICAgIH0K
QEAgLTE0MTksMjUgKzE0MzMsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVK
SVRJbmxpbgogCiB2b2lkIENvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoKQogewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYml0d2lz
ZV9jYXN0PENvZGVCbG9jayo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7Ci0g
ICAgCi0gICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgIGNvZGVCbG9j
ay51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
Y29kZUJsb2NrKSkgewotICAgICAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRv
V2Vha1JlZmVyZW5jZSgpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
JmNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay5zaG91bGRKZXR0aXNvbkR1ZVRv
V2Vha1JlZmVyZW5jZSgpKQorICAgICAgICAgICAgY29kZUJsb2NrLmpldHRpc29uKFByb2ZpbGVy
OjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpOworICAg
ICAgICAgICAgY29kZUJsb2NrLmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50
ZXJwcmV0ZWQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBjb2RlQmxvY2stPmZpbmFs
aXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJl
dGVkKGNvZGVCbG9jay5qaXRUeXBlKCkpKQorICAgICAgICBjb2RlQmxvY2suZmluYWxpemVMTElu
dElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoISFjb2RlQmxvY2st
PmppdENvZGUoKSkKLSAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUJhc2VsaW5lSklUSW5saW5l
Q2FjaGVzKCk7CisgICAgaWYgKCEhY29kZUJsb2NrLmppdENvZGUoKSkKKyAgICAgICAgY29kZUJs
b2NrLmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogfQogCkBAIC0x
OTU5LDYgKzE5NzAsNyBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRp
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCisgICAgVk0mIHZtID0gKm1fdm07
CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwogICAgIAogICAgIC8vIFdl
IHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6CkBAIC0xOTc1LDcgKzE5ODcsNyBA
QCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgICAgIC8vIFRo
aXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQg
d2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KICAgICAgICAgaWYgKCFqaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0g
cmVwbGFjZW1lbnQoKSB8fCAobV92bS0+aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhl
YXA6OmlzTWFya2VkKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRo
cmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDA3LDEyICsyMDE5
LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKIAogICAgIC8v
IEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwg
Y29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQg
YSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCi0gICAgaWYgKG1fdm0tPmhlYXAu
aXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1
dGFibGUoKSkpCisgICAgaWYgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFw
Ojppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgyKS4KLSAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUo
KS0+aW5zdGFsbENvZGUoCi0gICAgICAgICptX3ZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgp
LCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlu
c3RhbGxDb2RlKHZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFsaXphdGlvbktp
bmQoKSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSkKQEAgLTI3NjcsMTggKzI3NzgsMTkgQEAgaW50IENvZGVCbG9jazo6c3RhY2tQ
b2ludGVyT2Zmc2V0KCkKIAogc2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVT
aXplKCkKIHsKKyAgICBWTSogdm0gPSBtX3ZtLnVucG9pc29uZWQoKTsKICAgICAvLyBUaGlzIHdp
bGwgYmUgY2FsbGVkIGZyb20gQ29kZUJsb2NrOjpDb2RlQmxvY2sgYmVmb3JlIGVpdGhlciBtX3Zt
IG9yIHRoZQogICAgIC8vIGluc3RydWN0aW9ucyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuIEl0J3Mg
T0sgdG8gcmV0dXJuIDAgYmVjYXVzZSB3aGF0IHdpbGwgcmVhbGx5CiAgICAgLy8gbWF0dGVyIGlz
IHRoZSByZWNvbXB1dGF0aW9uIG9mIHRoaXMgdmFsdWUgd2hlbiB0aGUgc2xvdyBwYXRoIGlzIHRy
aWdnZXJlZC4KLSAgICBpZiAoIW1fdm0pCisgICAgaWYgKCF2bSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgCi0gICAgaWYgKCEqbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZv
ckJhc2VsaW5lSklUKQorICAgIGlmICghKnZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVX
b3JkRm9yQmFzZWxpbmVKSVQpCiAgICAgICAgIHJldHVybiAwOyAvLyBJdCdzIGFzIGdvb2Qgb2Yg
YSBwcmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4KICAgICAKICAgICAvLyBCZSBjb25zZXJ2YXRpdmU6
IHJldHVybiBhIHNpemUgdGhhdCB3aWxsIGJlIGFuIG92ZXJlc3RpbWF0aW9uIDg0JSBvZiB0aGUg
dGltZS4KLSAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+bWVhbigpICsKLSAgICAgICAgbV92bS0+bWFjaGlu
ZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5zdGFuZGFyZERldmlhdGlv
bigpOworICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRl
Y29kZVdvcmRGb3JCYXNlbGluZUpJVC0+bWVhbigpICsKKyAgICAgICAgdm0tPm1hY2hpbmVDb2Rl
Qnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsK
ICAgICAKICAgICAvLyBCZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGll
cnMuIFNpbGVudGx5IGRvaW5nIHRoZSAid3JvbmciIHRoaW5nCiAgICAgLy8gaGVyZSBpcyBPSywg
c2luY2UgdGhpcyB3aG9sZSBtZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KQEAgLTMwNjYsNyAr
MzA3OCw3IEBAIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW4KICAgICAg
ICAgICAgIHJldHVybiBjb2RlT3JpZ2luOwogICAgIH0KIAotICAgIGZvciAoQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsg
KytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0
ZXI7ICsraXRlcikgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOwog
ICAgICAgICBpZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViLT5jb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIyNjQ5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJv
biBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29k
ZS5oIgogI2luY2x1ZGUgIkpJVE1hdGhJQ0ZvcndhcmRzLmgiCisjaW5jbHVkZSAiSlNDUG9pc29u
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJKdW1wVGFibGUuaCIKQEAgLTEwNiwxMiArMTA3LDIwIEBAIGNsYXNzIENvZGVCbG9j
ayA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCisgICAgc3RydWN0
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxp
emVyIHsKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcihDb2RlQmxvY2smIGNvZGVCbG9j
aykKKyAgICAgICAgICAgIDogY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgeyB9CiAgICAg
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICAgICAgQ29k
ZUJsb2NrJiBjb2RlQmxvY2s7CiAgICAgfTsKIAotICAgIGNsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIgOiBwdWJsaWMgSlNDOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICBzdHJ1Y3Qg
V2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIgeworICAgICAgICBXZWFrUmVmZXJlbmNlSGFydmVzdGVyKENvZGVCbG9jayYgY29kZUJsb2Nr
KQorICAgICAgICAgICAgOiBjb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICB7IH0KICAgICAg
ICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
ICAgIENvZGVCbG9jayYgY29kZUJsb2NrOwogICAgIH07CiAKIHB1YmxpYzoKQEAgLTI1NSw5ICsy
NjQsOSBAQCBwdWJsaWM6CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSop
OwogICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqKTsKICAgICBKSVRTdWJJ
QyogYWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZv
Pjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7
IH0KLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0VuZCgpIHsg
cmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9Ci0gICAgCisgICAgYXV0byBzdHViSW5mb0JlZ2lu
KCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4oKTsgfQorICAgIGF1dG8gc3R1YkluZm9FbmQo
KSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQorCiAgICAgLy8gTyhuKSBvcGVyYXRpb24u
IFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5kIHRvIGdl
dCBvbmUKICAgICAvLyBzdHViIGluZm8uCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGZpbmRTdHVi
SW5mbyhDb2RlT3JpZ2luKTsKQEAgLTI2NSw4ICsyNzQsOCBAQCBwdWJsaWM6CiAgICAgQnlWYWxJ
bmZvKiBhZGRCeVZhbEluZm8oKTsKIAogICAgIENhbGxMaW5rSW5mbyogYWRkQ2FsbExpbmtJbmZv
KCk7Ci0gICAgQmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NCZWdpbigp
IHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyB9Ci0gICAgQmFnPENhbGxMaW5rSW5m
bz46Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NFbmQoKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3Mu
ZW5kKCk7IH0KKyAgICBhdXRvIGNhbGxMaW5rSW5mb3NCZWdpbigpIHsgcmV0dXJuIG1fY2FsbExp
bmtJbmZvcy5iZWdpbigpOyB9CisgICAgYXV0byBjYWxsTGlua0luZm9zRW5kKCkgeyByZXR1cm4g
bV9jYWxsTGlua0luZm9zLmVuZCgpOyB9CiAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlv
biBjYWxsIHVzZWQgcHJpbWFyaWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNl
CiAgICAgLy8gdGhhdCB0aGVyZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91
IHdhbnQgdG8gdXNlIHRoaXMsIHlvdSdyZSByZWFsbHkKQEAgLTMwOCwxMSArMzE3LDExIEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247
Ci0gICAgdHlwZWRlZiBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3Ry
dWN0aW9uczsKKyAgICB0eXBlZGVmIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1Bv
aXNvbiwgSW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3RydWN0aW9uczsKIAogICAgIHVuc2lnbmVk
IG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6
ZSgpOyB9Ci0gICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkg
eyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KLSAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8SW5z
dHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9uczsg
fQorICAgIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1Y3Rp
b24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQorICAgIGNvbnN0
IFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1Y3Rpb24+JiBp
bnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQogCiAgICAgc2l6
ZV90IHByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgpOwogCkBAIC0zNjEsNyArMzcwLDcgQEAgcHVi
bGljOgogICAgIEV4ZWN1dGFibGVCYXNlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVy
biBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxl
Kj4obV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpOyB9CiAKLSAgICBWTSogdm0oKSBjb25zdCB7IHJl
dHVybiBtX3ZtOyB9CisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bS51bnBvaXNvbmVk
KCk7IH0KIAogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVn
aXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KQEAg
LTg5NSw2ICs5MDQsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNUYWlsQ2FsbHMoKTsgfQogCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3Qgc19wb2lzb24gPSBtYWtlQ29uc3RFeHByUG9pc29uKENvZGVC
bG9ja1BvaXNvbik7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVD
YWNoZXMoKTsKICAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKQEAg
LTk2NSwzMCArOTc2LDMwIEBAIHByaXZhdGU6CiAgICAgICAgIH07CiAgICAgfTsKICAgICBXcml0
ZUJhcnJpZXI8RXhlY3V0YWJsZUJhc2U+IG1fb3duZXJFeGVjdXRhYmxlOwotICAgIFZNKiBtX3Zt
OworICAgIENvbnN0RXhwclBvaXNvbmVkPENvZGVCbG9ja1BvaXNvbiwgVk0qPiBtX3ZtOwogCi0g
ICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKKyAgICBQb2lz
b25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxvY2tQb2lzb24sIEluc3RydWN0aW9uPiBtX2luc3Ry
dWN0aW9uczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKICAgICBtdXRhYmxlIENvZGVCbG9ja0hhc2ggbV9o
YXNoOwogCi0gICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKKyAgICBQb2lzb25l
ZFJlZlB0cjxDb2RlQmxvY2tQb2lzb24sIFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKICAgICB1
bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZUNvbHVtbk9m
ZnNldDsKIAogICAgIFJlZkNvdW50ZWRBcnJheTxMTEludENhbGxMaW5rSW5mbz4gbV9sbGludENh
bGxMaW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBC
YXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdMTEludENh
bGxzOwogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50
TWFwOwotICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgUG9pc29uZWRSZWZQdHI8
Q29kZUJsb2NrUG9pc29uLCBKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IG1fY2FsbGVlU2F2ZVJlZ2lz
dGVyczsKLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwotICAgIEJhZzxK
SVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICBCYWc8
SklUTmVnSUM+IG1fbmVnSUNzOwotICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Ci0gICAgQmFn
PEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExp
bmtJbmZvczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIFN0cnVjdHVyZVN0dWJJ
bmZvPiBtX3N0dWJJbmZvczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEpJVEFk
ZElDPiBtX2FkZElDczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEpJVE11bElD
PiBtX211bElDczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEpJVE5lZ0lDPiBt
X25lZ0lDczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEpJVFN1YklDPiBtX3N1
YklDczsKKyAgICBQb2lzb25lZEJhZzxDb2RlQmxvY2tQb2lzb24sIEJ5VmFsSW5mbz4gbV9ieVZh
bEluZm9zOworICAgIFBvaXNvbmVkQmFnPENvZGVCbG9ja1BvaXNvbiwgQ2FsbExpbmtJbmZvPiBt
X2NhbGxMaW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgIFNl
bnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwpA
QCAtMTAzMCw4ICsxMDQxLDggQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJl
RGF0YT4gbV9yYXJlRGF0YTsKIAotICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRp
dGlvbmFsRmluYWxpemVyOwotICAgIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgbV93ZWFrUmVmZXJl
bmNlSGFydmVzdGVyOworICAgIFBvaXNvbmVkVW5pcXVlUHRyPENvZGVCbG9ja1BvaXNvbiwgVW5j
b25kaXRpb25hbEZpbmFsaXplcj4gbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOworICAgIFBvaXNv
bmVkVW5pcXVlUHRyPENvZGVCbG9ja1BvaXNvbiwgV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj4gbV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVyOwogfTsKIAogaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6
OnIoaW50IGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg3LDYgKzg3LDcgQEAgdm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0
Q29tcGlsZQogICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIFNQIGlzIGNvcnJlY3QgaW4gY2Fz
ZSBvZiBhbiBleGNlcHRpb24uCiAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCBHUFJJbmZvOjpyZWdUMCk7CiAg
ICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6aml0Q29kZU9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC54b3JQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoQ29kZUJsb2NrOjpzX3BvaXNvbiksIEdQ
UkluZm86OnJlZ1QwKTsKICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSklUQ29kZVR5cGU6OmNvbW1vbkRhdGFPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKICAg
ICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb21t
b25EYXRhOjpmcmFtZVJlZ2lzdGVyQ291bnRPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKICAg
ICAvLyBUaGlzIGRvZXMgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50
IC0gMSkqc2l6ZW9mKFJlZ2lzdGVyKSB3aGVyZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkwMyw4ICs5MDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSW5zdHJ1Y3Rpb24qIGNvcGllZEluc3RydWN0aW9uKEluc3RydWN0aW9uKik7CiAKICAgICAg
ICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7Ci0gICAgICAgIAotICAgICAgICBSZWZDb3Vu
dGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOworCisgICAgICAgIFBvaXNvbmVk
UmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rp
b25zOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogICAgICAgICBWZWN0
b3I8TGFiZWw+IG1fbGFiZWxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50T2ZmbGluZUFzbUNvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludE9mZmxpbmVBc21Db25maWcuaAkocmV2aXNpb24gMjI2NDk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2ZmbGluZUFzbUNvbmZpZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkxMSW50Q29tbW9uLmgiCiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KKyNpbmNs
dWRlIDx3dGYvUG9pc29uZWQuaD4KIAogI2lmICFFTkFCTEUoSklUKQogI2RlZmluZSBPRkZMSU5F
X0FTTV9DX0xPT1AgMQpAQCAtMTQyLDYgKzE0MywxMiBAQAogI2RlZmluZSBPRkZMSU5FX0FTTV9K
U1ZBTFVFNjQgMAogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUE9JU09OKQorI2RlZmluZSBPRkZMSU5F
X0FTTV9QT0lTT04gMQorI2Vsc2UKKyNkZWZpbmUgT0ZGTElORV9BU01fUE9JU09OIDAKKyNlbmRp
ZgorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogI2RlZmluZSBPRkZMSU5FX0FTTV9BU1NFUlRfRU5B
QkxFRCAxCiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIyNjQ5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDUsNiArNDUsNyBAQCBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbCgpCiAgICAgbG9hZGkgQXJn
dW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbUEJdLCBQQgorICAgIHVu
cG9pc29uKENvZGVCbG9ja1BvaXNvbiwgUEIpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQxKQogICAgIHN0b3JlcSByMCwgW2NmciwgdDEsIDhdCiAgICAgdmFsdWVQcm9maWxlKHIwLCAo
Q2FsbE9wQ29kZVNpemUgLSAxKSwgdDMpCkBAIC00ODIsNiArNDgzLDcgQEAgZW5kCiBtYWNybyBz
dHJ1Y3R1cmVJRFRvU3RydWN0dXJlV2l0aFNjcmF0Y2goc3RydWN0dXJlSURUaGVuU3RydWN0dXJl
LCBzY3JhdGNoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBzY3JhdGNoCiAgICAgbG9hZHAg
Q29kZUJsb2NrOjptX3ZtW3NjcmF0Y2hdLCBzY3JhdGNoCisgICAgdW5wb2lzb24oQ29kZUJsb2Nr
UG9pc29uLCBzY3JhdGNoKQogICAgIGxvYWRwIFZNOjpoZWFwICsgSGVhcDo6bV9zdHJ1Y3R1cmVJ
RFRhYmxlICsgU3RydWN0dXJlSURUYWJsZTo6bV90YWJsZVtzY3JhdGNoXSwgc2NyYXRjaAogICAg
IGxvYWRwIFtzY3JhdGNoLCBzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUsIDhdLCBzdHJ1Y3R1cmVJ
RFRoZW5TdHJ1Y3R1cmUKIGVuZApAQCAtNDk1LDYgKzQ5Nyw3IEBAIG1hY3JvIGxvYWRTdHJ1Y3R1
cmVBbmRDbG9iYmVyRmlyc3RBcmcoY2UKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURb
Y2VsbF0sIHN0cnVjdHVyZQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBjZWxsCiAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX3ZtW2NlbGxdLCBjZWxsCisgICAgdW5wb2lzb24oQ29kZUJsb2NrUG9p
c29uLCBjZWxsKQogICAgIGxvYWRwIFZNOjpoZWFwICsgSGVhcDo6bV9zdHJ1Y3R1cmVJRFRhYmxl
ICsgU3RydWN0dXJlSURUYWJsZTo6bV90YWJsZVtjZWxsXSwgY2VsbAogICAgIGxvYWRwIFtjZWxs
LCBzdHJ1Y3R1cmUsIDhdLCBzdHJ1Y3R1cmUKIGVuZApAQCAtNTU5LDYgKzU2Miw3IEBAIG1hY3Jv
IGZ1bmN0aW9uQXJpdHlDaGVjayhkb25lTGFiZWwsIHNsb3cKICAgICAjIFJlbG9hZCBDb2RlQmxv
Y2sgYW5kIHJlc2V0IFBDLCBzaW5jZSB0aGUgc2xvd19wYXRoIGNsb2JiZXJlZCB0aGVtLgogICAg
IGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVj
dGlvbnNbdDFdLCBQQgorICAgIHVucG9pc29uKENvZGVCbG9ja1BvaXNvbiwgUEIpCiAgICAgbW92
ZSAwLCBQQwogICAgIGptcCBkb25lTGFiZWwKIGVuZApAQCAtMTk0OSwxNCArMTk1MywxNCBAQCBt
YWNybyBkb0NhbGwoc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsg
UGF5bG9hZE9mZnNldFt0M10KICAgICBtb3ZlIHQzLCBzcAotICAgIGlmIFg4Nl82NF9XSU4KLSAg
ICAgICAgcHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3Qx
XSwgdDIsIHQzLCB0NCkKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJ
bmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0pCi0gICAgZWxzZQorICAgIGlmIFBPSVNPTgogICAg
ICAgICBsb2FkcCBfZ19qaXRDb2RlUG9pc29uLCB0MgogICAgICAgICB4b3JwIExMSW50Q2FsbExp
bmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyCiAgICAgICAgIHByZXBhcmVDYWxsKHQy
LCB0MSwgdDMsIHQ0KQogICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24odDIpCisgICAgZWxzZQor
ICAgICAgICBwcmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRb
dDFdLCB0MiwgdDMsIHQ0KQorICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlu
a0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSkKICAgICBlbmQKIAogLm9wQ2FsbFNsb3c6CkBA
IC0yMDAzLDYgKzIwMDcsNyBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAKICAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zW1BCXSwgUEIK
KyAgICB1bnBvaXNvbihDb2RlQmxvY2tQb2lzb24sIFBCKQogICAgIGxvYWRwIFZNOjp0YXJnZXRJ
bnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwogICAgIHN1YnAgUEIsIFBDCiAgICAgcnNoaWZ0
cCAzLCBQQwpAQCAtMjQ5NSw2ICsyNTAwLDcgQEAgX2xsaW50X29wX3Byb2ZpbGVfdHlwZToKICAg
ICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCiAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICB1bnBvaXNvbihDb2RlQmxvY2tQb2lzb24s
IHQxKQogICAgICMgdDEgaXMgaG9sZGluZyB0aGUgcG9pbnRlciB0byB0aGUgdHlwZVByb2ZpbGVy
TG9nLgogICAgIGxvYWRwIFZNOjptX3R5cGVQcm9maWxlckxvZ1t0MV0sIHQxCiAgICAgIyB0MiBp
cyBob2xkaW5nIHRoZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHJldmlzaW9uIDIyNjQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNCw2ICsyMDQsMTAgQEAgZWxzZQogICAg
IGNvbnN0IExvd2VzdFRhZyA9IERlbGV0ZWRWYWx1ZVRhZwogZW5kCiAKK2lmIFBPSVNPTgorICAg
IGNvbnN0IENvZGVCbG9ja1BvaXNvbiA9IGNvbnN0ZXhwciBDb2RlQmxvY2s6OnNfcG9pc29uCitl
bmQKKwogIyBQdXRCeUlkRmxhZ3MgZGF0YQogY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9
IGNvbnN0ZXhwciBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrCiBjb25zdCBQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgPSBjb25zdGV4cHIgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5CkBAIC03
NTIsNiArNzU2LDEyIEBAIG1hY3JvIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChkZXMK
ICAgICBlbmQKIGVuZAogCittYWNybyB1bnBvaXNvbihwb2lzb24sIGZpZWxkKQorICAgIGlmIFBP
SVNPTgorICAgICAgICB4b3JwIHBvaXNvbiwgZmllbGQKKyAgICBlbmQKK2VuZAorCiBtYWNybyBm
dW5jdGlvblByb2xvZ3VlKCkKICAgICBpZiBYODYgb3IgWDg2X1dJTiBvciBYODZfNjQgb3IgWDg2
XzY0X1dJTgogICAgICAgICBwdXNoIGNmcgpAQCAtMTAxNCw2ICsxMDI0LDcgQEAgbWFjcm8gcHJv
bG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgICMgU2V0IHVwIHRoZSBQQy4KICAg
ICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1t0
MV0sIFBCCisgICAgICAgIHVucG9pc29uKENvZGVCbG9ja1BvaXNvbiwgUEIpCiAgICAgICAgIG1v
dmUgMCwgUEMKICAgICBlbHNlCiAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlv
bnNbdDFdLCBQQwpAQCAtMTAyNCw2ICsxMDM1LDcgQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2Nr
R2V0dGVyLCBjb2RlQmxvYwogICAgIHN1YnAgY2ZyLCB0MCwgdDAKICAgICBicGEgdDAsIGNmciwg
Lm5lZWRTdGFja0NoZWNrCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDIKKyAgICB1
bnBvaXNvbihDb2RlQmxvY2tQb2lzb24sIHQyKQogICAgIGlmIENfTE9PUAogICAgICAgICBicGJl
cSBWTTo6bV9jbG9vcFN0YWNrTGltaXRbdDJdLCB0MCwgLnN0YWNrSGVpZ2h0T0sKICAgICBlbHNl
CkBAIC0xNjExLDYgKzE2MjMsNyBAQCBfbGxpbnRfb3BfY2hlY2tfdHJhcHM6CiAgICAgdHJhY2VF
eGVjdXRpb24oKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAgIGxvYWRwIENvZGVC
bG9jazo6bV92bVt0MV0sIHQxCisgICAgdW5wb2lzb24oQ29kZUJsb2NrUG9pc29uLCB0MSkKICAg
ICBsb2FkYiBWTTo6bV90cmFwcytWTVRyYXBzOjptX25lZWRUcmFwSGFuZGxpbmdbdDFdLCB0MAog
ICAgIGJ0cG56IHQwLCAuaGFuZGxlVHJhcHMKIC5hZnRlckhhbmRsaW5nVHJhcHM6CkBAIC0xNjI2
LDYgKzE2MzksNyBAQCBfbGxpbnRfb3BfY2hlY2tfdHJhcHM6CiBtYWNybyBhY3F1aXJlU2hhZG93
Q2hpY2tlblBhY2tldChzbG93KQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAgIGxv
YWRwIENvZGVCbG9jazo6bV92bVt0MV0sIHQxCisgICAgdW5wb2lzb24oQ29kZUJsb2NrUG9pc29u
LCB0MSkKICAgICBsb2FkcCBWTTo6bV9zaGFkb3dDaGlja2VuW3QxXSwgdDIKICAgICBsb2FkcCBT
aGFkb3dDaGlja2VuOjptX2xvZ0N1cnNvclt0Ml0sIHQwCiAgICAgYnBhZXEgdDAsIFNoYWRvd0No
aWNrZW46Om1fbG9nRW5kW3QyXSwgc2xvdwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtOTgsOSArOTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0IC0gbV9zdGFydE9mZnNl
dDsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICAvLyBGSVhNRTogTWFrZSBpdCBSZWY8U291
cmNlUHJvdmlkaWVyPi4KKyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgUG9pc29uZWRSZWY8U291
cmNlUHJvdmlkaWVyPi4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2ODMyNQotICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fcHJvdmlk
ZXI7CisgICAgICAgIFBvaXNvbmVkUmVmUHRyPFVubGlua2VkU291cmNlQ29kZVBvaXNvbiwgU291
cmNlUHJvdmlkZXI+IG1fcHJvdmlkZXI7CiAgICAgICAgIGludCBtX3N0YXJ0T2Zmc2V0OwogICAg
ICAgICBpbnQgbV9lbmRPZmZzZXQ7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ1BvaXNvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ1BvaXNvbi5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTQgKzMw
LDIyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBQb2lzb24gewotICAgIE5vdFBvaXNvbmVk
ID0gMCwKKyAgICBOb3RQb2lzb25lZCA9IDAsIC8vIFJlc2VydmVkIChhbmQgdW51c2VkKSBzbyB0
aGF0IHBvaXNvbiBrZXlzIGFyZSBuZXZlciAwLgorCisgICAgLy8gQWRkIG5ldyBwb2lzb24ga2V5
cyBiZWxvdyBpbiBhbHBoYWJldGljYWwgb3JkZXIuIFRoZSBvcmRlciBkb2Vzbid0IHJlYWxseQor
ICAgIC8vIG1hdHRlciwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwga2VlcCB0aGVtIGluIGFscGhhYmV0
aWNhbGx5IG9yZGVyIGZvcgorICAgIC8vIGdyZWF0ZXIgcmVhZGFiaWxpdHkuCisgICAgQ29kZUJs
b2NrUG9pc29uLAorICAgIEpTR2xvYmFsT2JqZWN0UG9pc29uLAorICAgIEpTU2NyaXB0RmV0Y2hQ
YXJhbWV0ZXJzUG9pc29uLAorICAgIEpTU2NyaXB0RmV0Y2hlclBvaXNvbiwKICAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrUG9pc29uLAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZVBvaXNvbiwK
ICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5UG9pc29uLAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGVQ
b2lzb24sCiAgICAgSlNXZWJBc3NlbWJseVRhYmxlUG9pc29uLAotICAgIFRyYW5zaXRpb25NYXBQ
b2lzb24sCi0gICAgV2Vha0ltcGxQb2lzb24sCisgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
UG9pc29uLAorICAgIFVubGlua2VkU291cmNlQ29kZVBvaXNvbiwKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endh
cmljaEB1d2F0ZXJsb28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODgsNiArMTg4LDE2IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHMsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+CitKU0dsb2Jh
bE9iamVjdDo6UG9pc29uZWRVbmlxdWVQdHI8VD4gbWFrZVBvaXNvbmVkVW5pcXVlKEFyZ3VtZW50
cyYmLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gV1RGOjptYWtlUG9pc29uZWRVbmlxdWU8
SlNHbG9iYWxPYmplY3RQb2lzb24sIFQ+KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogc3RhdGljIEpTVmFsdWUg
Y3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CkBA
IC00MDEsOCArNDExLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAg
bV9kZWJ1Z2dlciA9IDA7CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6SlNHbG9iYWxP
YmplY3RJbnNwZWN0b3JDb250cm9sbGVyPigqdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JEZWJ1Z2dh
YmxlID0gc3RkOjptYWtlX3VuaXF1ZTxKU0dsb2JhbE9iamVjdERlYnVnZ2FibGU+KCp0aGlzKTsK
KyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSBtYWtlUG9pc29uZWRVbmlxdWU8SW5zcGVjdG9y
OjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI+KCp0aGlzKTsKKyAgICBtX2luc3Bl
Y3RvckRlYnVnZ2FibGUgPSBtYWtlUG9pc29uZWRVbmlxdWU8SlNHbG9iYWxPYmplY3REZWJ1Z2dh
YmxlPigqdGhpcyk7CiAgICAgbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLT5pbml0KCk7CiAgICAgbV9j
b25zb2xlQ2xpZW50ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jb25zb2xlQ2xpZW50KCk7CiAj
ZW5kaWYKQEAgLTEwMTEsNjMgKzEwMjEsNjMgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcgogCiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KGFycmF5SXRlcmF0b3JQ
cm90b3R5cGUsIG1fdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7Ci0gICAgICAgICAgICBtX2FycmF5
SXRlcmF0b3JQcm90b3R5cGVOZXh0ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNo
YW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlv
biwgbV9hcnJheUl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fYXJy
YXlJdGVyYXRvclByb3RvdHlwZU5leHQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVy
dHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25k
aXRpb24sIG1fYXJyYXlJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBt
X2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LT5pbnN0YWxsKCk7CiAgICAgICAgIH0KICAgICAg
ICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0
dXBBZGFwdGl2ZVdhdGNocG9pbnQodGhpcy0+YXJyYXlQcm90b3R5cGUoKSwgbV92bS5wcm9wZXJ0
eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0gICAgICAgICAgICBtX2FycmF5UHJvdG90eXBlU3lt
Ym9sSXRlcmF0b3JXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNo
YW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlv
biwgbV9hcnJheUl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fYXJy
YXlQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8
T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNl
dD4+KHZtLCBjb25kaXRpb24sIG1fYXJyYXlJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAg
ICAgICAgICAgICBtX2FycmF5UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50LT5pbnN0
YWxsKCk7CiAgICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtYXBJdGVyYXRv
clByb3RvdHlwZSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5uZXh0KTsKLSAgICAgICAgICAgIG1fbWFw
SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0
UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZt
LCBjb25kaXRpb24sIG1fbWFwSXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAg
ICAgbV9tYXBJdGVyYXRvclByb3RvdHlwZU5leHRXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVkVW5p
cXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9p
bnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsK
ICAgICAgICAgICAgIG1fbWFwSXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludC0+aW5zdGFs
bCgpOwogICAgICAgICB9CiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1fbWFwUHJvdG90eXBl
LmdldCgpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKTsKLSAgICAgICAgICAg
IG1fbWFwUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1
ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50
U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9tYXBJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7Cisg
ICAgICAgICAgICBtX21hcFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IG1ha2VQ
b2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxp
bmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9tYXBJdGVyYXRvclByb3RvY29sV2F0
Y2hwb2ludCk7CiAgICAgICAgICAgICBtX21hcFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hw
b2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAKICAgICAgICAgewogICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQo
c2V0SXRlcmF0b3JQcm90b3R5cGUsIG1fdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7Ci0gICAgICAg
ICAgICBtX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9p
bnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX3NldEl0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsK
KyAgICAgICAgICAgIG1fc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IG1ha2VQ
b2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxp
bmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRJdGVyYXRvclByb3RvY29sV2F0
Y2hwb2ludCk7CiAgICAgICAgICAgICBtX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9p
bnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtX3Nl
dFByb3RvdHlwZS5nZXQoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0g
ICAgICAgICAgICBtX3NldFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IHN0ZDo6
bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5l
V2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc2V0SXRlcmF0b3JQcm90b2NvbFdhdGNo
cG9pbnQpOworICAgICAgICAgICAgbV9zZXRQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9p
bnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNo
cG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc2V0SXRlcmF0b3JQ
cm90b2NvbFdhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9zZXRQcm90b3R5cGVTeW1ib2xJdGVy
YXRvcldhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVX
YXRjaHBvaW50KG1fc3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuZ2V0KCksIG1fdm0ucHJvcGVydHlO
YW1lcy0+bmV4dCk7Ci0gICAgICAgICAgICBtX3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dFdh
dGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVX
YXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX3N0cmluZ0l0
ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fc3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0
eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRp
dGlvbiwgbV9zdHJpbmdJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBt
X3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAg
ICAgfQogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25k
aXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSwg
bV92bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0gICAgICAgICAgICBtX3N0cmlu
Z1Byb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2Jq
ZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+
KHZtLCBjb25kaXRpb24sIG1fc3RyaW5nSXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAg
ICAgICAgICAgbV9zdHJpbmdQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQgPSBtYWtl
UG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5s
aW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc3RyaW5nSXRlcmF0b3JQcm90b2Nv
bFdhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9zdHJpbmdQcm90b3R5cGVTeW1ib2xJdGVyYXRv
cldhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKICAgICAgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRj
aHBvaW50KG1fbWFwUHJvdG90eXBlLmdldCgpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPnNldCk7Ci0g
ICAgICAgICAgICBtX21hcFByb3RvdHlwZVNldFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRT
ZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcFNldFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9t
YXBQcm90b3R5cGVTZXRXYXRjaHBvaW50ID0gbWFrZVBvaXNvbmVkVW5pcXVlPE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29u
ZGl0aW9uLCBtX21hcFNldFdhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9tYXBQcm90b3R5cGVT
ZXRXYXRjaHBvaW50LT5pbnN0YWxsKCk7CiAgICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0
Y2hwb2ludChtX3NldFByb3RvdHlwZS5nZXQoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5hZGQpOwot
ICAgICAgICAgICAgbV9zZXRQcm90b3R5cGVBZGRXYXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1
ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50
U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRBZGRXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1f
c2V0UHJvdG90eXBlQWRkV2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9w
ZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNv
bmRpdGlvbiwgbV9zZXRBZGRXYXRjaHBvaW50KTsKICAgICAgICAgICAgIG1fc2V0UHJvdG90eXBl
QWRkV2F0Y2hwb2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAKICAgICAgICAgewogICAgICAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdh
dGNocG9pbnQobnVtYmVyUHJvdG90eXBlKCksIG1fdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcp
OwotICAgICAgICAgICAgbV9udW1iZXJQcm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGlu
ZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX251bWJlclRvU3RyaW5nV2F0Y2hwb2lu
dCk7CisgICAgICAgICAgICBtX251bWJlclByb3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludCA9IG1h
a2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJ
bmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9udW1iZXJUb1N0cmluZ1dhdGNo
cG9pbnQpOwogICAgICAgICAgICAgbV9udW1iZXJQcm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQt
Pmluc3RhbGwoKTsKICAgICAgICAgICAgIG1fbnVtYmVyUHJvdG9Ub1N0cmluZ0Z1bmN0aW9uLnNl
dCh2bSwgdGhpcywganNDYXN0PEpTRnVuY3Rpb24qPihudW1iZXJQcm90b3R5cGUoKS0+Z2V0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZykpKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCIKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmgiCkBAIC00Niw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUG9pc29uZWRVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAKIHN0cnVjdCBPcGFxdWVKU0NsYXNzOwpAQCAtMzk5LDkgKzQwMSwxMSBA
QCBwdWJsaWM6CiAKICAgICBWTSYgbV92bTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVz
aW5nIFBvaXNvbmVkVW5pcXVlUHRyID0gV1RGOjpQb2lzb25lZFVuaXF1ZVB0cjxKU0dsb2JhbE9i
amVjdFBvaXNvbiwgVD47CisKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI+
IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNHbG9iYWxPYmpl
Y3REZWJ1Z2dhYmxlPiBtX2luc3BlY3RvckRlYnVnZ2FibGU7CisgICAgUG9pc29uZWRVbmlxdWVQ
dHI8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVj
dG9yQ29udHJvbGxlcjsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxKU0dsb2JhbE9iamVjdERlYnVn
Z2FibGU+IG1faW5zcGVjdG9yRGVidWdnYWJsZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEwp
CkBAIC00MzYsMTcgKzQ0MCwxNyBAQCBwdWJsaWM6CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBt
X3NldEFkZFdhdGNocG9pbnQ7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FycmF5U3BlY2ll
c1dhdGNocG9pbnQ7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX251bWJlclRvU3RyaW5nV2F0
Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJ
dGVyYXRvcldhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5SXRlcmF0
b3JQcm90b3R5cGVOZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9tYXBQcm90b3R5cGVT
eW1ib2xJdGVyYXRvcldhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX21hcEl0
ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBt
X3NldFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2lu
dFNldD4+IG1fc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0
Y2hwb2ludFNldD4+IG1fc3RyaW5nUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2lu
dDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zdHJpbmdJdGVyYXRvclByb3RvdHlwZU5leHRXYXRj
aHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9tYXBQcm90b3R5cGVTZXRXYXRjaHBv
aW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0
Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zZXRQcm90b3R5cGVBZGRXYXRjaHBvaW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hw
b2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9udW1iZXJQcm90b3R5cGVUb1N0cmluZ1dhdGNo
cG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJ
dGVyYXRvcldhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlD
aGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlJdGVy
YXRvclByb3RvdHlwZU5leHQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlD
aGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwUHJvdG90
eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBt
X21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQ
dHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2lu
dFNldD4+IG1fc2V0UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50OworICAgIFBvaXNv
bmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGlu
ZVdhdGNocG9pbnRTZXQ+PiBtX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7Cisg
ICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9p
bnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc3RyaW5nUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JX
YXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX3N0cmluZ0l0ZXJhdG9yUHJv
dG90eXBlTmV4dFdhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVy
dHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwUHJv
dG90eXBlU2V0V2F0Y2hwb2ludDsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxPYmplY3RQcm9wZXJ0
eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zZXRQcm90
b3R5cGVBZGRXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5
Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX251bWJlclBy
b3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludDsKIAogICAgIGJvb2wgaXNBcnJheVByb3RvdHlwZUl0
ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogICAgIGJvb2wgaXNNYXBQcm90
b3R5cGVJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFt
ZXRlcnMuaAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOSArMjYsMTEg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0
RmV0Y2hQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIApAQCAtNzEsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWY8
U2NyaXB0RmV0Y2hQYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CisgICAgUG9pc29uZWRSZWY8SlNT
Y3JpcHRGZXRjaFBhcmFtZXRlcnNQb2lzb24sIFNjcmlwdEZldGNoUGFyYW1ldGVycz4gbV9wYXJh
bWV0ZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAkocmV2aXNpb24gMjI2NDk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3Vr
ZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDkgKzI2LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiSlND
UG9pc29uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgogI2luY2x1ZGUgIlNjcmlwdEZldGNoZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03MSw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgIH0KIAotICAgIFJlZlB0cjxTY3JpcHRGZXRjaGVyPiBtX2ZldGNoZXI7CisgICAgUG9pc29u
ZWRSZWZQdHI8SlNTY3JpcHRGZXRjaGVyUG9pc29uLCBTY3JpcHRGZXRjaGVyPiBtX2ZldGNoZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lv
biAyMjY0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4Nyw4ICsxODcsOCBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093
bmVyOwotICAgIHVzaW5nIFBvaXNvbmVkVHJhbnNpdGlvbk1hcFB0ciA9IENvbnN0RXhwclBvaXNv
bmVkPFRyYW5zaXRpb25NYXBQb2lzb24sIFRyYW5zaXRpb25NYXAqPjsKLSAgICB1c2luZyBQb2lz
b25lZFdlYWtJbXBsUHRyID0gQ29uc3RFeHByUG9pc29uZWQ8V2Vha0ltcGxQb2lzb24sIFdlYWtJ
bXBsKj47CisgICAgdXNpbmcgUG9pc29uZWRUcmFuc2l0aW9uTWFwUHRyID0gQ29uc3RFeHByUG9p
c29uZWQ8U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlUG9pc29uLCBUcmFuc2l0aW9uTWFwKj47Cisg
ICAgdXNpbmcgUG9pc29uZWRXZWFrSW1wbFB0ciA9IENvbnN0RXhwclBvaXNvbmVkPFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZVBvaXNvbiwgV2Vha0ltcGwqPjsKIAogICAgIGJvb2wgaXNVc2luZ1Np
bmdsZVNsb3QoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAy
MjY0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw2ICs1MSw4IEBAIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OkpTV2ViQXNzZW1ibHlDb2QKICAgICA6IEJhc2Uodm0sIHZtLndlYkFzc2VtYmx5Q29k
ZUJsb2NrU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9jb2RlQmxvY2soV1RGTW92ZShjb2RlQmxv
Y2spKQogeworICAgIG1fdW5jb25kaXRpb25hbEZpbmFsaXplciA9IFBvaXNvbmVkVW5pcXVlUHRy
PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+Ojpj
cmVhdGUoKnRoaXMpOworCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0byBkbyB0
aGlzIHN5bmNocm9ub3VzbHkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDU2NwogICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMucmVzZXJ2ZUNhcGFjaXR5
KG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtOTIsMTUgKzk0LDEzIEBA
IHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKIAogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICB2aXNpdG9yLmFkZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7
CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXNPYmplY3QtPm1fdW5j
b25kaXRpb25hbEZpbmFsaXplci5nZXQoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQog
ewotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBiaXR3aXNlX2Nhc3Q8
SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpIC0gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcikpOwotICAgIGZvciAoYXV0byBpdGVyID0gdGhpc09iamVjdC0+bV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT52aXNp
dFdlYWsoKnRoaXNPYmplY3QtPnZtKCkpOworICAgIGZvciAoYXV0byBpdGVyID0gY29kZUJsb2Nr
Lm1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKKyAgICAgICAgKCppdGVy
KS0+dmlzaXRXZWFrKCpjb2RlQmxvY2sudm0oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjI2NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Nb2R1
bGUuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL1BvaXNvbmVkVW5pcXVl
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtODgsMTMgKzg5LDE3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKLSAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5j
b25kaXRpb25hbEZpbmFsaXplciB7CisgICAgc3RydWN0IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIg
OiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICAgICAgVW5jb25kaXRp
b25hbEZpbmFsaXplcihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgICAg
ICAgICA6IGNvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgIHsgfQogICAgICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgICAgIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2smIGNvZGVCbG9jazsKICAgICB9OwogCiAgICAgUG9pc29uZWRSZWY8SlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1BvaXNvbiwgV2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBW
ZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub0pTRXhpdFN0dWJzOwotICAgIFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOworICAgIFBvaXNv
bmVkVW5pcXVlUHRyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXI+IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQzIEBACisyMDE4LTAxLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KKworICAgICAgICBBcHBseSBwb2lzb25pbmcgdG8gbW9yZSBwb2ludGVycyBpbiBKU0Mu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEwOTYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MTgyOTcwPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFBvaXNvbmVkQmFn
IGFuZCBQb2lzb25lZFJlZkNvdW50ZWRBcnJheS4KKworICAgICAgICAqIHd0Zi9CYWcuaDoKKyAg
ICAgICAgKFdURjo6UHJpdmF0ZTo6QmFnTm9kZTo6QmFnTm9kZSk6CisgICAgICAgIChXVEY6OkJh
Zzo6QmFnKToKKyAgICAgICAgKFdURjo6QmFnOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpC
YWc6OmNsZWFyKToKKyAgICAgICAgKFdURjo6QmFnOjphZGQpOgorICAgICAgICAoV1RGOjpCYWc6
OmJlZ2luKToKKyAgICAgICAgKFdURjo6QmFnOjp1bndyYXBwZWRIZWFkKToKKyAgICAgICAgKFdU
Rjo6QmFnOjpOb2RlOjpOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvQmFnVG9IYXNoTWFw
Lmg6CisgICAgICAgIChXVEY6OnRvSGFzaE1hcCk6CisgICAgICAgICogd3RmL1BvaXNvbmVkLmg6
CisgICAgICAgIChXVEY6OmNvbnN0RXhwclBvaXNvblJhbmRvbSk6CisgICAgICAgIChXVEY6Om1h
a2VDb25zdEV4cHJQb2lzb24pOgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuaDoKKyAg
ICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpSZWZDb3VudGVkQXJyYXkpOgorICAgICAgICAo
V1RGOjpSZWZDb3VudGVkQXJyYXk6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRlZEFycmF5OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6On5S
ZWZDb3VudGVkQXJyYXkpOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OnJlZkNvdW50
IGNvbnN0KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpzaXplIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpkYXRhKToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRlZEFycmF5OjpiZWdpbik6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6ZW5kKToK
KyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6UmVmQ291bnRlZEFycmF5OjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50
ZWRBcnJheTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJh
eTo6SGVhZGVyOjpmcm9tUGF5bG9hZCk6CisgICAgICAgICogd3RmL1dURkFzc2VydGlvbnMuY3Bw
OgorCiAyMDE4LTAxLTA1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWJBc3NlbWJseTogcG9pc29uIEpTIG9iamVjdCdzIHNlY3JldHMKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZp
c2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw0
NCArMjYsNTAgQEAKICNpZm5kZWYgQmFnX2gKICNkZWZpbmUgQmFnX2gKIAorI2luY2x1ZGUgPHd0
Zi9EdW1iUHRyVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK25hbWVzcGFjZSBQcml2
YXRlIHsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJhZ05vZGUgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgQmFnTm9kZShBcmdzJiYuLi4gYXJncykKKyAgICAgICAgOiBtX2l0ZW0oc3RkOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKQorICAgIHsgfQorICAgIAorICAgIFQgbV9pdGVtOworICAg
IEJhZ05vZGUqIG1fbmV4dCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFByaXZh
dGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHJhaXRzID0gRHVtYlB0clRy
YWl0czxQcml2YXRlOjpCYWdOb2RlPFQ+Pj4KIGNsYXNzIEJhZyB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQmFnKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXByaXZhdGU6Ci0g
ICAgY2xhc3MgTm9kZSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1
YmxpYzoKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgTm9kZShB
cmdzJiYuLi4gYXJncykKLSAgICAgICAgICAgIDogbV9pdGVtKHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLikKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBUIG1faXRl
bTsKLSAgICAgICAgTm9kZSogbV9uZXh0IHsgbnVsbHB0ciB9OwotICAgIH07Ci0gICAgCisgICAg
dXNpbmcgTm9kZSA9IFByaXZhdGU6OkJhZ05vZGU8VD47CisKIHB1YmxpYzoKLSAgICBCYWcoKQot
ICAgIHsKLSAgICB9CisgICAgQmFnKCkgPSBkZWZhdWx0OwogCi0gICAgQmFnKEJhZzxUPiYmIG90
aGVyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnKEJhZzxULCBVPiYmIG90aGVy
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2hlYWQpOwotICAgICAgICBtX2hlYWQgPSBvdGhl
ci5tX2hlYWQ7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKICAgICAg
ICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBCYWcmIG9wZXJhdG9yPShC
YWc8VD4mJiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0
b3I9KEJhZzxULCBVPiYmIG90aGVyKQogICAgIHsKLSAgICAgICAgbV9oZWFkID0gb3RoZXIubV9o
ZWFkOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CiAgICAgICAgIG90
aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC03
NSw5ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAg
ICAgICB3aGlsZSAobV9oZWFkKSB7Ci0gICAgICAgICAgICBOb2RlKiBjdXJyZW50ID0gbV9oZWFk
OwotICAgICAgICAgICAgbV9oZWFkID0gY3VycmVudC0+bV9uZXh0OworICAgICAgICBOb2RlKiBo
ZWFkID0gdGhpcy0+dW53cmFwcGVkSGVhZCgpOworICAgICAgICB3aGlsZSAoaGVhZCkgeworICAg
ICAgICAgICAgTm9kZSogY3VycmVudCA9IGhlYWQ7CisgICAgICAgICAgICBoZWFkID0gY3VycmVu
dC0+bV9uZXh0OwogICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CiAgICAgICAgIH0KICAgICAg
ICAgbV9oZWFkID0gbnVsbHB0cjsKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgIFQqIGFk
ZChBcmdzJiYuLi4gYXJncykKICAgICB7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9k
ZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICAgICBuZXdOb2RlLT5tX25leHQg
PSBtX2hlYWQ7CisgICAgICAgIG5ld05vZGUtPm1fbmV4dCA9IHVud3JhcHBlZEhlYWQoKTsKICAg
ICAgICAgbV9oZWFkID0gbmV3Tm9kZTsKICAgICAgICAgcmV0dXJuICZuZXdOb2RlLT5tX2l0ZW07
CiAgICAgfQpAQCAtMTIxLDE0ICsxMjgsMTQgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBmcmllbmQgY2xhc3MgV1RGOjpC
YWc7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIFdU
Rjo6QmFnOwogICAgICAgICBOb2RlKiBtX25vZGU7CiAgICAgfTsKICAgICAKICAgICBpdGVyYXRv
ciBiZWdpbigpCiAgICAgewogICAgICAgICBpdGVyYXRvciByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX25vZGUgPSBtX2hlYWQ7CisgICAgICAgIHJlc3VsdC5tX25vZGUgPSB1bndyYXBwZWRIZWFk
KCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTM3LDEyICsxNDQs
MjAgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2hlYWQ7
IH0KICAgICAKIHByaXZhdGU6Ci0gICAgTm9kZSogbV9oZWFkIHsgbnVsbHB0ciB9OworICAgIE5v
ZGUqIHVud3JhcHBlZEhlYWQoKSB7IHJldHVybiBQdHJUcmFpdHM6OnVud3JhcChtX2hlYWQpOyB9
CisKKyAgICB0eXBlbmFtZSBQdHJUcmFpdHM6OlN0b3JhZ2VUeXBlIG1faGVhZCB7IG51bGxwdHIg
fTsKIH07CiAKK3RlbXBsYXRlPHVpbnQzMl90IGtleSwgdHlwZW5hbWUgVD4gc3RydWN0IENvbnN0
RXhwclBvaXNvbmVkUHRyVHJhaXRzOworCit0ZW1wbGF0ZTx1aW50MzJfdCBrZXksIHR5cGVuYW1l
IFQ+Cit1c2luZyBQb2lzb25lZEJhZyA9IEJhZzxULCBDb25zdEV4cHJQb2lzb25lZFB0clRyYWl0
czxrZXksIFByaXZhdGU6OkJhZ05vZGU8VD4+PjsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6QmFnOwordXNpbmcgV1RGOjpQb2lzb25lZEJhZzsKIAogI2VuZGlmIC8vIEJhZ19o
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZ1RvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0JhZ1RvSGFzaE1hcC5oCShyZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9CYWdUb0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMCArMzEsMTAg
QEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0
eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlHZXR0ZXJGdW5j
dG9yPgotdm9pZCB0b0hhc2hNYXAoQmFnPEVsZW1lbnRUeXBlPiYgYmFnLCBLZXlHZXR0ZXJGdW5j
dG9yJiBnZXRLZXksIEhhc2hNYXA8S2V5VHlwZSwgRWxlbWVudFR5cGUqLCBIYXNoQXJnPiYgcmVz
dWx0KQordGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIEJhZ1B0clRyYWl0
cywgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5R2V0dGVy
RnVuY3Rvcj4KK3ZvaWQgdG9IYXNoTWFwKEJhZzxFbGVtZW50VHlwZSwgQmFnUHRyVHJhaXRzPiYg
YmFnLCBLZXlHZXR0ZXJGdW5jdG9yJiBnZXRLZXksIEhhc2hNYXA8S2V5VHlwZSwgRWxlbWVudFR5
cGUqLCBIYXNoQXJnPiYgcmVzdWx0KQogewotICAgIGZvciAodHlwZW5hbWUgQmFnPEVsZW1lbnRU
eXBlPjo6aXRlcmF0b3IgaXRlciA9IGJhZy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAg
IGZvciAodHlwZW5hbWUgQmFnPEVsZW1lbnRUeXBlLCBCYWdQdHJUcmFpdHM+OjppdGVyYXRvciBp
dGVyID0gYmFnLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIEVsZW1lbnRUeXBl
KiBlbGVtZW50ID0gKml0ZXI7CiAgICAgICAgIEtleVR5cGUga2V5ID0gZ2V0S2V5KCplbGVtZW50
KTsKICAgICAgICAgcmVzdWx0LmFkZChrZXksIGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dURi93
dGYvUG9pc29uZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Qb2lzb25lZC5oCShy
ZXZpc2lvbiAyMjY0OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Qb2lzb25lZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw2ICs4Nyw3IEBAIGFzUmVmZXJlbmNlKFQgcHRyKSB7IHJldHVybiAqcHRyOyB9
CiAKIH0gLy8gbmFtZXNwYWNlIFBvaXNvbmVkSW1wbEhlbHBlcgogCisvLyBGaVhNRTogb25jZSB3
ZSBoYXZlIEMrKzE3LCB3ZSBjYW4gbWFrZSB0aGUga2V5IG9mIHR5cGUgYXV0byBhbmQgcmVtb3Zl
IHRoZSBuZWVkIGZvciBLZXlUeXBlLgogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgS2V5VHlw
ZSBrZXksIHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Bv
aW50ZXI8VD46OnZhbHVlPj4KIGNsYXNzIFBvaXNvbmVkSW1wbCB7CiBwdWJsaWM6CkBAIC0yMjcs
MTMgKzIyOCwyMCBAQCBpbmxpbmUgdm9pZCBzd2FwKFBvaXNvbmVkSW1wbDxLMSwgazEsIFQxCiAK
IFdURl9FWFBPUlRfUFJJVkFURSB1aW50cHRyX3QgbWFrZVBvaXNvbigpOwogCisjaWYgRU5BQkxF
KFBPSVNPTikKKy8vIEZJWE1FOiBvbmNlIHdlIGhhdmUgQysrMTcsIHdlIGNhbiBtYWtlIHRoaXMg
YSBsYW1iZGEgaW4gbWFrZUNvbnN0RXhwclBvaXNvbigpLgoraW5saW5lIGNvbnN0ZXhwciB1aW50
cHRyX3QgY29uc3RFeHByUG9pc29uUmFuZG9tKHVpbnRwdHJfdCBzZWVkKQoreworICAgIHVpbnRw
dHJfdCByZXN1bHQxID0gc2VlZCAqIDY5MDY5NjkwNjkgKyAxMjM0NTY3OworICAgIHVpbnRwdHJf
dCByZXN1bHQyID0gc2VlZCAqIDgyNTM3MjkgKyAyMzk2NDAzOworICAgIHJldHVybiAocmVzdWx0
MSA8PCAzKSBeIChyZXN1bHQyIDw8IDE2KTsKK30KKyNlbmRpZgorCiBpbmxpbmUgY29uc3RleHBy
IHVpbnRwdHJfdCBtYWtlQ29uc3RFeHByUG9pc29uKHVpbnQzMl90IGtleSkKIHsKICNpZiBFTkFC
TEUoUE9JU09OKQotICAgIHVpbnRwdHJfdCB1aW50cHRyS2V5ID0ga2V5OwotICAgIHVpbnRwdHJf
dCBwb2lzb24xID0gdWludHB0cktleSAqIDY5MDY5NjkwNjkgKyAxMjM0NTY3OwotICAgIHVpbnRw
dHJfdCBwb2lzb24yID0gdWludHB0cktleSAqIDgyNTM3MjkgKyAyMzk2NDAzOwotICAgIHVpbnRw
dHJfdCBwb2lzb24gPSAocG9pc29uMSA8PCAzKSBeIChwb2lzb24yIDw8IDE2KTsKKyAgICB1aW50
cHRyX3QgcG9pc29uID0gY29uc3RFeHByUG9pc29uUmFuZG9tKGtleSk7CiAgICAgcG9pc29uICY9
IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigweGZmZmYpIDw8IDQ4KTsgLy8gRW5zdXJlIHRoYXQg
cG9pc29uZWQgYml0cyBsb29rIGxpa2UgYSBwb2ludGVyLgogICAgIHBvaXNvbiB8PSAoMSA8PCAy
KTsgLy8gRW5zdXJlIHRoYXQgcG9pc29uZWQgYml0cyBjYW5ub3QgYmUgMC4KICAgICByZXR1cm4g
cG9pc29uOwpJbmRleDogU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgJKHJldmlzaW9uIDIyNjQ5NCkK
KysrIFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUmVmQ291bnRlZEFycmF5X2gKICNkZWZpbmUgUmVmQ291
bnRlZEFycmF5X2gKIAorI2luY2x1ZGUgPHd0Zi9EdW1iUHRyVHJhaXRzLmg+CiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDMsMjAgKzQ0LDIxIEBACiAKIG5hbWVzcGFjZSBXVEYgewog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRy
VHJhaXRzID0gRHVtYlB0clRyYWl0czxUPj4KIGNsYXNzIFJlZkNvdW50ZWRBcnJheSB7CisgICAg
ZW51bSBDb21tb25Db3B5Q29uc3RydWN0b3JUYWcgeyBDb21tb25Db3B5Q29uc3RydWN0b3IgfTsK
KwogcHVibGljOgotICAgIFJlZkNvdW50ZWRBcnJheSgpCi0gICAgICAgIDogbV9kYXRhKDApCi0g
ICAgewotICAgIH0KKyAgICBSZWZDb3VudGVkQXJyYXkoKSA9IGRlZmF1bHQ7CiAgICAgCiAgICAg
UmVmQ291bnRlZEFycmF5KGNvbnN0IFJlZkNvdW50ZWRBcnJheSYgb3RoZXIpCi0gICAgICAgIDog
bV9kYXRhKG90aGVyLm1fZGF0YSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2RhdGEpCi0gICAgICAg
ICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPnJlZkNvdW50Kys7Ci0gICAgfQorICAg
ICAgICA6IFJlZkNvdW50ZWRBcnJheShDb21tb25Db3B5Q29uc3RydWN0b3IsIG90aGVyKQorICAg
IHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUcmFpdHM+CisgICAgUmVmQ291bnRl
ZEFycmF5KGNvbnN0IFJlZkNvdW50ZWRBcnJheTxULCBPdGhlclRyYWl0cz4mIG90aGVyKQorICAg
ICAgICA6IFJlZkNvdW50ZWRBcnJheShDb21tb25Db3B5Q29uc3RydWN0b3IsIG90aGVyKQorICAg
IHsgfQogCiAgICAgZXhwbGljaXQgUmVmQ291bnRlZEFycmF5KHNpemVfdCBzaXplKQogICAgIHsK
QEAgLTY1LDE4ICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBtX2RhdGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVyKj4oZmFzdE1hbGxvYyhI
ZWFkZXI6OnNpemUoKSArIHNpemVvZihUKSAqIHNpemUpKSktPnBheWxvYWQoKTsKLSAgICAgICAg
SGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9IDE7Ci0gICAgICAgIEhlYWRl
cjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gc2l6ZTsKLSAgICAgICAgQVNTRVJUKEhl
YWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID09IHNpemUpOworICAgICAgICBUKiBk
YXRhID0gKHN0YXRpY19jYXN0PEhlYWRlcio+KGZhc3RNYWxsb2MoSGVhZGVyOjpzaXplKCkgKyBz
aXplb2YoVCkgKiBzaXplKSkpLT5wYXlsb2FkKCk7CisgICAgICAgIG1fZGF0YSA9IGRhdGE7Cisg
ICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPnJlZkNvdW50ID0gMTsKKyAgICAgICAg
SGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+bGVuZ3RoID0gc2l6ZTsKKyAgICAgICAgQVNTRVJU
KEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPmxlbmd0aCA9PSBzaXplKTsKICAgICAgICAgVmVj
dG9yVHlwZU9wZXJhdGlvbnM8VD46OmluaXRpYWxpemUoYmVnaW4oKSwgZW5kKCkpOwogICAgIH0K
IAotICAgIFJlZkNvdW50ZWRBcnJheSBjbG9uZSgpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3RoZXJUcmFpdHMgPSBQdHJUcmFpdHM+CisgICAgUmVmQ291bnRlZEFycmF5PFQsIE90aGVy
VHJhaXRzPiBjbG9uZSgpIGNvbnN0CiAgICAgewotICAgICAgICBSZWZDb3VudGVkQXJyYXkgcmVz
dWx0KHNpemUoKSk7CisgICAgICAgIFJlZkNvdW50ZWRBcnJheTxULCBPdGhlclRyYWl0cz4gcmVz
dWx0KHNpemUoKSk7CisgICAgICAgIGNvbnN0IFQqIGRhdGEgPSB0aGlzLT5kYXRhKCk7CisgICAg
ICAgIFQqIHJlc3VsdERhdGEgPSByZXN1bHQuZGF0YSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzaXplKCk7IGktLTspCi0gICAgICAgICAgICByZXN1bHRbaV0gPSBhdChpKTsKKyAgICAg
ICAgICAgIHJlc3VsdERhdGFbaV0gPSBkYXRhW2ldOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIApAQCAtODgsMjAgKzk0LDIzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9kYXRhID0gKHN0YXRpY19jYXN0PEhlYWRl
cio+KGZhc3RNYWxsb2MoSGVhZGVyOjpzaXplKCkgKyBzaXplb2YoVCkgKiBvdGhlci5zaXplKCkp
KSktPnBheWxvYWQoKTsKLSAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZD
b3VudCA9IDE7Ci0gICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0g
b3RoZXIuc2l6ZSgpOwotICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEp
LT5sZW5ndGggPT0gb3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8
VD46OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBtX2RhdGEp
OwotICAgIH0KLSAgICAKLSAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZD
b3VudGVkQXJyYXkmIG90aGVyKQotICAgIHsKLSAgICAgICAgVCogb2xkRGF0YSA9IG1fZGF0YTsK
LSAgICAgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwotICAgICAgICBpZiAobV9kYXRhKQotICAg
ICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCsrOwotICAgICAg
ICAKKyAgICAgICAgVCogZGF0YSA9IChzdGF0aWNfY2FzdDxIZWFkZXIqPihmYXN0TWFsbG9jKEhl
YWRlcjo6c2l6ZSgpICsgc2l6ZW9mKFQpICogb3RoZXIuc2l6ZSgpKSkpLT5wYXlsb2FkKCk7Cisg
ICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSkt
PnJlZkNvdW50ID0gMTsKKyAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+bGVuZ3Ro
ID0gb3RoZXIuc2l6ZSgpOworICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRh
KS0+bGVuZ3RoID09IG90aGVyLnNpemUoKSk7CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25z
PFQ+Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgZGF0YSk7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzID0gUHRyVHJh
aXRzPgorICAgIFJlZkNvdW50ZWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IFJlZkNvdW50ZWRBcnJh
eTxULCBPdGhlclRyYWl0cz4mIG90aGVyKQorICAgIHsKKyAgICAgICAgVCogb2xkRGF0YSA9IGRh
dGEoKTsKKyAgICAgICAgVCogb3RoZXJEYXRhID0gY29uc3RfY2FzdDxUKj4ob3RoZXIuZGF0YSgp
KTsKKyAgICAgICAgaWYgKG90aGVyRGF0YSkKKyAgICAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxv
YWQob3RoZXJEYXRhKS0+cmVmQ291bnQrKzsKKyAgICAgICAgbV9kYXRhID0gb3RoZXJEYXRhOwor
CiAgICAgICAgIGlmICghb2xkRGF0YSkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgaWYgKC0tSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKS0+cmVmQ291bnQpCkBAIC0xMTAs
NDQgKzExOSw0OCBAQCBwdWJsaWM6CiAgICAgICAgIGZhc3RGcmVlKEhlYWRlcjo6ZnJvbVBheWxv
YWQob2xkRGF0YSkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQotICAgIAorCisgICAg
UmVmQ291bnRlZEFycmF5JiBvcGVyYXRvcj0oY29uc3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikg
eyByZXR1cm4gdGhpcy0+b3BlcmF0b3I9PFB0clRyYWl0cz4ob3RoZXIpOyB9CisKICAgICB+UmVm
Q291bnRlZEFycmF5KCkKICAgICB7CiAgICAgICAgIGlmICghbV9kYXRhKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAoLS1IZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPnJlZkNv
dW50KQorICAgICAgICBUKiBkYXRhID0gdGhpcy0+ZGF0YSgpOworICAgICAgICBpZiAoLS1IZWFk
ZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5yZWZDb3VudCkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OmRlc3RydWN0KGJlZ2luKCksIGVuZCgpKTsK
LSAgICAgICAgZmFzdEZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpKTsKKyAgICAgICAg
ZmFzdEZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKSk7CiAgICAgfQogICAgIAogICAgIHVu
c2lnbmVkIHJlZkNvdW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV9kYXRhKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBIZWFkZXI6OmZyb21QYXlsb2FkKG1f
ZGF0YSktPnJlZkNvdW50OworICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRh
KCkpLT5yZWZDb3VudDsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
cmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoOworICAgICAgICByZXR1
cm4gSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKCkpLT5sZW5ndGg7CiAgICAgfQogICAgIAogICAg
IHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSAqIHNpemVvZihUKTsgfQog
ICAgIAotICAgIFQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KLSAgICBUKiBiZWdpbigpIHsg
cmV0dXJuIG1fZGF0YTsgfQorICAgIFQqIGRhdGEoKSB7IHJldHVybiBQdHJUcmFpdHM6OnVud3Jh
cChtX2RhdGEpOyB9CisgICAgVCogYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KICAgICBUKiBl
bmQoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgcmV0dXJuIG1fZGF0YSArIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVu
Z3RoOworICAgICAgICBUKiBkYXRhID0gdGhpcy0+ZGF0YSgpOworICAgICAgICByZXR1cm4gZGF0
YSArIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPmxlbmd0aDsKICAgICB9CiAgICAgCi0gICAg
Y29uc3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotICAgIGNvbnN0IFQqIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVmQ291bnRlZEFycmF5Kj4odGhpcyktPmRhdGEoKTsgfQor
ICAgIGNvbnN0IFQqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxSZWZDb3VudGVk
QXJyYXkqPih0aGlzKS0+YmVnaW4oKTsgfQogICAgIGNvbnN0IFQqIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8UmVmQ291bnRlZEFycmF5Kj4odGhpcyktPmVuZCgpOyB9CiAgICAgCiAg
ICAgVCYgYXQoc2l6ZV90IGkpCkBAIC0xNjUsMjEgKzE3OCwyNiBAQCBwdWJsaWM6CiAgICAgVCYg
b3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAgICBjb25zdCBUJiBvcGVy
YXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFJlZkNvdW50ZWRBcnJheSYgb3RoZXIpIGNvbnN0CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3RoZXJUcmFpdHMgPSBQdHJUcmFpdHM+CisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFJlZkNvdW50ZWRBcnJheTxULCBPdGhlclRyYWl0cz4mIG90aGVyKSBjb25zdAogICAgIHsK
LSAgICAgICAgaWYgKG1fZGF0YSA9PSBvdGhlci5tX2RhdGEpCisgICAgICAgIFQqIGRhdGEgPSBj
b25zdF9jYXN0PFQqPih0aGlzLT5kYXRhKCkpOworICAgICAgICBUKiBvdGhlckRhdGEgPSBjb25z
dF9jYXN0PFQqPihvdGhlci5kYXRhKCkpOworICAgICAgICBpZiAoZGF0YSA9PSBvdGhlckRhdGEp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFtX2RhdGEgfHwgIW90aGVy
Lm1fZGF0YSkKKyAgICAgICAgaWYgKCFkYXRhIHx8ICFvdGhlckRhdGEpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IEhlYWRlcjo6ZnJvbVBheWxv
YWQobV9kYXRhKS0+bGVuZ3RoOwotICAgICAgICBpZiAobGVuZ3RoICE9IEhlYWRlcjo6ZnJvbVBh
eWxvYWQob3RoZXIubV9kYXRhKS0+bGVuZ3RoKQorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBI
ZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5ndGg7CisgICAgICAgIGlmIChsZW5ndGggIT0g
SGVhZGVyOjpmcm9tUGF5bG9hZChvdGhlckRhdGEpLT5sZW5ndGgpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgaWYgKG1fZGF0YVtpXSAhPSBvdGhlci5tX2RhdGFbaV0pCisgICAgICAg
ICAgICBpZiAoZGF0YVtpXSAhPSBvdGhlckRhdGFbaV0pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKSBjb25zdCB7IHJldHVy
biB0aGlzLT5vcGVyYXRvcj09PFB0clRyYWl0cz4ob3RoZXIpOyB9CiAgICAgCiBwcml2YXRlOgog
ICAgIHN0cnVjdCBIZWFkZXIgewpAQCAtMjAyLDEzICsyMjAsMzIgQEAgcHJpdmF0ZToKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYWRlcio+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBheWxvYWQpIC0gc2l6ZSgpKTsKICAgICAgICAgfQorCisg
ICAgICAgIHN0YXRpYyBjb25zdCBIZWFkZXIqIGZyb21QYXlsb2FkKGNvbnN0IFQqIHBheWxvYWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmcm9tUGF5bG9hZChjb25zdF9jYXN0PFQq
PihwYXlsb2FkKSk7CisgICAgICAgIH0KICAgICB9OwotICAgIAotICAgIFQqIG1fZGF0YTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzPgorICAgIFJlZkNvdW50ZWRBcnJheShD
b21tb25Db3B5Q29uc3RydWN0b3JUYWcsIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxULCBPdGhlclRy
YWl0cz4mIG90aGVyKQorICAgICAgICA6IG1fZGF0YShjb25zdF9jYXN0PFQqPihvdGhlci5kYXRh
KCkpKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIEhlYWRlcjo6ZnJv
bVBheWxvYWQoZGF0YSgpKS0+cmVmQ291bnQrKzsKKyAgICB9CisKKyAgICB0eXBlbmFtZSBQdHJU
cmFpdHM6OlN0b3JhZ2VUeXBlIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKK3RlbXBsYXRlPHVp
bnQzMl90IGtleSwgdHlwZW5hbWUgVD4gc3RydWN0IENvbnN0RXhwclBvaXNvbmVkUHRyVHJhaXRz
OworCit0ZW1wbGF0ZTx1aW50MzJfdCBrZXksIHR5cGVuYW1lIFQ+Cit1c2luZyBQb2lzb25lZFJl
ZkNvdW50ZWRBcnJheSA9IFJlZkNvdW50ZWRBcnJheTxULCBDb25zdEV4cHJQb2lzb25lZFB0clRy
YWl0czxrZXksIFQ+PjsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6UG9pc29u
ZWRSZWZDb3VudGVkQXJyYXk7CiB1c2luZyBXVEY6OlJlZkNvdW50ZWRBcnJheTsKIAogI2VuZGlm
IC8vIFJlZkNvdW50ZWRBcnJheV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZBc3NlcnRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XVEZBc3NlcnRpb25zLmNwcAkocmV2
aXNpb24gMjI2NDk0KQorKysgU291cmNlL1dURi93dGYvV1RGQXNzZXJ0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNp
bmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL1BvaXNvbmVkLmg+CiAjaW5jbHVkZSA8
d3RmL1BvaXNvbmVkVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVzcGFj
ZSB7CiBzdHJ1Y3QgRHVtbXlTdHJ1Y3QgeyB9OworY29uc3QgdWludDMyX3QgZHVtbXlQb2lzb24g
PSAweGZmZmY7CiB9CiAKICNpZiBFTkFCTEUoUE9JU09OKQpAQCAtNjUsMTUgKzY4LDIxIEBAIHN0
YXRpY19hc3NlcnQoIShtYWtlQ29uc3RFeHByUG9pc29uKDEwMDAKIHN0YXRpY19hc3NlcnQoISht
YWtlQ29uc3RFeHByUG9pc29uKDB4ZmZmZmZmZmYpICYgMHgzKSwgImVuc3VyZSBib3R0b20gMiBh
bGlnbm1lbnQgYml0cyBhcmUgYXZhaWxhYmxlIGZvciB1c2UgYXMgZmxhZyBiaXRzLiIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShQT0lTT04pCiAKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKEJhZzxEdW1teVN0
cnVjdD4pID09IHNpemVvZih2b2lkKiksICIiKTsKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNv
bmVkQmFnPGR1bW15UG9pc29uLCBEdW1teVN0cnVjdD4pID09IHNpemVvZih2b2lkKiksICIiKTsK
Kwogc3RhdGljX2Fzc2VydChzaXplb2YoUmVmPER1bW15U3RydWN0PikgPT0gc2l6ZW9mKER1bW15
U3RydWN0KiksICIiKTsKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkUmVmPDB4ZmZmZiwg
RHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOworc3RhdGljX2Fzc2Vy
dChzaXplb2YoUG9pc29uZWRSZWY8ZHVtbXlQb2lzb24sIER1bW15U3RydWN0PikgPT0gc2l6ZW9m
KER1bW15U3RydWN0KiksICIiKTsKIAogc3RhdGljX2Fzc2VydChzaXplb2YoUmVmUHRyPER1bW15
U3RydWN0PikgPT0gc2l6ZW9mKER1bW15U3RydWN0KiksICIiKTsKLXN0YXRpY19hc3NlcnQoc2l6
ZW9mKFBvaXNvbmVkUmVmUHRyPDB4ZmZmZiwgRHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVtbXlT
dHJ1Y3QqKSwgIiIpOwotCi1zdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFVuaXF1ZVB0cjww
eGZmZmYsIER1bW15U3RydWN0PikgPT0gc2l6ZW9mKER1bW15U3RydWN0KiksICIiKTsKLXN0YXRp
Y19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkVW5pcXVlUHRyPDB4ZmZmZiwgaW50W10+KSA9PSBzaXpl
b2YoaW50KiksICIiKTsKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkVW5pcXVlUHRyPDB4
ZmZmZiwgRHVtbXlTdHJ1Y3RbXT4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7CitzdGF0
aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFJlZlB0cjxkdW1teVBvaXNvbiwgRHVtbXlTdHJ1Y3Q+
KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOwogCitzdGF0aWNfYXNzZXJ0KHNpemVvZihQ
b2lzb25lZFVuaXF1ZVB0cjxkdW1teVBvaXNvbiwgRHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2YoRHVt
bXlTdHJ1Y3QqKSwgIiIpOworc3RhdGljX2Fzc2VydChzaXplb2YoUG9pc29uZWRVbmlxdWVQdHI8
ZHVtbXlQb2lzb24sIGludFtdPikgPT0gc2l6ZW9mKGludCopLCAiIik7CitzdGF0aWNfYXNzZXJ0
KHNpemVvZihQb2lzb25lZFVuaXF1ZVB0cjxkdW1teVBvaXNvbiwgRHVtbXlTdHJ1Y3RbXT4pID09
IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7CisKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKFJlZkNv
dW50ZWRBcnJheTxEdW1teVN0cnVjdD4pID09IHNpemVvZih2b2lkKiksICIiKTsKK3N0YXRpY19h
c3NlcnQoc2l6ZW9mKFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PGR1bW15UG9pc29uLCBEdW1teVN0
cnVjdD4pID09IHNpemVvZih2b2lkKiksICIiKTsKKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdURgog
Cg==
</data>
<flag name="review"
          id="349727"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330720</attachid>
            <date>2018-01-08 12:10:27 -0800</date>
            <delta_ts>2018-01-08 12:10:27 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-181096.patch</filename>
            <type>text/plain</type>
            <size>79352</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI2NTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE4LTAxLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
cHBseSBwb2lzb25pbmcgdG8gbW9yZSBwb2ludGVycyBpbiBKU0MuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEwOTYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM2MTgyOTcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IEpGIEJhc3RpZW4uCisKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXI6OnhvclB0cik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yNjQpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6eG9yNjQpOgorICAgICAgICAtIEFkZCB4b3JQdHIgaW1wbGVtZW50
YXRpb24uCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmluZmVycmVkTmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0V2Vha2x5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlzaXRXZWFrUmVmZXJl
bmNlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNh
Y2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRp
c29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRQQyk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFs
aXplcjo6VW5jb25kaXRpb25hbEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6c3R1YkluZm9CZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c3R1YkluZm9FbmQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxMaW5rSW5mb3NC
ZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbExpbmtJbmZvc0VuZCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjppbnN0cnVjdGlvbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZtIGNv
bnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg6CisgICAgICAg
IChKU0M6OkRGRzo6YWRqdXN0RnJhbWVBbmRTdGFja0luT1NSRXhpdENvbXBpbGVyVGh1bmspOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZmxpbmVBc21Db25m
aWcuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHBhcnNlci9Vbmxp
bmtlZFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ1BvaXNvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTU2NyaXB0RmV0Y2hlci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFs
RmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisKIDIwMTgtMDEtMDYgIFl1c3VrZSBTdXp1a2kgIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFt
ZXMgaW5jbHVkZXMgImFyZ3VtZW50cyIgYW5kICJjYWxsZXIiIGZvciBib3VuZCBmdW5jdGlvbnMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDIyNjUyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1Miw2ICs2NTIsMTEgQEAg
cHVibGljOgogICAgICAgICB4b3IzMihpbW0sIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQg
eG9yUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAg
ICAgICB4b3IzMihUcnVzdGVkSW1tMzIoaW1tKSwgc3JjRGVzdCk7CisgICAgfQorCiAgICAgdm9p
ZCB4b3JQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIHhv
cjMyKHNyYywgZGVzdCk7CkBAIC05OTEsNiArOTk2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgeG9y
NjQoaW1tLCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogTG9vayBpbnRvIG1ha2lu
ZyB0aGUgbmVlZCBmb3IgYSBzY3JhdGNoIHJlZ2lzdGVyIGV4cGxpY2l0LCBvciBwcm92aWRpbmcg
dGhlIG9wdGlvbiB0byBzcGVjaWZ5IGEgc2NyYXRjaCByZWdpc3Rlci4KKyAgICB2b2lkIHhvclB0
cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTY0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbG9h
ZFB0cihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbG9hZDY0KGFkZHJlc3MsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDIy
NjUyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTkxLDYgKzk5MSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVy
SUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHhvcjY0KGltbSwgc3JjRGVzdCwgc3JjRGVzdCk7
CisgICAgfQorCiAgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IC0x
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjI2NTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODA5LDYgKzgwOSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfaXIo
aW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgeG9yNjQoVHJ1c3RlZElt
bTY0IGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNj
cmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgeG9yNjQoc2NyYXRjaFJlZ2lzdGVyKCksIHNyY0Rl
c3QpOworICAgIH0KKwogICAgIHZvaWQgbm90NjQoUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIubm90cV9yKHNyY0Rlc3QpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNjUyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1l
cm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0zMDcsMTIgKzMwNywxMiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVy
ZSogCiAgICAgLCBtX2lzQ29uc3RydWN0b3Iob3RoZXIubV9pc0NvbnN0cnVjdG9yKQogICAgICwg
bV9pc1N0cmljdE1vZGUob3RoZXIubV9pc1N0cmljdE1vZGUpCiAgICAgLCBtX2NvZGVUeXBlKG90
aGVyLm1fY29kZVR5cGUpCi0gICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgdGhpcywg
b3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIu
dm0oKSwgdGhpcywgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCiAgICAgLCBtX251bWJlck9m
QXJndW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgLCBt
X2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBp
bmdNb2RlRGlzYWJsZWQpCiAgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVy
RXhlY3V0YWJsZSgqb3RoZXIubV92bSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0
KCkpCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2lu
c3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKG90
aGVyLm1fdGhpc1JlZ2lzdGVyKQpAQCAtMzI5LDYgKzMyOSw4IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFZNKiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KDApCiAgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiAgICAgLCBtX2NyZWF0
aW9uVGltZShNb25vdG9uaWNUaW1lOjpub3coKSkKKyAgICAsIG1fdW5jb25kaXRpb25hbEZpbmFs
aXplcihtYWtlUG9pc29uZWRVbmlxdWU8VW5jb25kaXRpb25hbEZpbmFsaXplcj4oKnRoaXMpKQor
ICAgICwgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyKG1ha2VQb2lzb25lZFVuaXF1ZTxXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyPigqdGhpcykpCiB7CiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxs
ZWQgPSBmYWxzZTsKIApAQCAtMzg3LDYgKzM4OSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCiAg
ICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiAgICAgLCBtX2NyZWF0aW9uVGlt
ZShNb25vdG9uaWNUaW1lOjpub3coKSkKKyAgICAsIG1fdW5jb25kaXRpb25hbEZpbmFsaXplciht
YWtlUG9pc29uZWRVbmlxdWU8VW5jb25kaXRpb25hbEZpbmFsaXplcj4oKnRoaXMpKQorICAgICwg
bV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyKG1ha2VQb2lzb25lZFVuaXF1ZTxXZWFrUmVmZXJlbmNl
SGFydmVzdGVyPigqdGhpcykpCiB7CiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQgPSBm
YWxzZTsKIApAQCAtNDIyLDE5ICs0MjYsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgUwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogCiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCi0gICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJl
Z2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgbV9nbG9iYWxPYmpl
Y3QuZ2V0KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RSZWdpc3RlcigpLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQodm0sIHRoaXMs
IG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBM
aW5rVGltZUNvbnN0YW50Q291bnQ7IGkrKykgewogICAgICAgICBMaW5rVGltZUNvbnN0YW50IHR5
cGUgPSBzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50PihpKTsKICAgICAgICAgaWYgKHVuc2ln
bmVkIHJlZ2lzdGVySW5kZXggPSB1bmxpbmtlZENvZGVCbG9jay0+cmVnaXN0ZXJJbmRleEZvckxp
bmtUaW1lQ29uc3RhbnQodHlwZSkpCi0gICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Z2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgbV9nbG9iYWxPYmplY3QtPmpzQ2VsbEZvckxp
bmtUaW1lQ29uc3RhbnQodHlwZSkpOworICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1ty
ZWdpc3RlckluZGV4XS5zZXQodm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LT5qc0NlbGxGb3JMaW5r
VGltZUNvbnN0YW50KHR5cGUpKTsKICAgICB9CiAKICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgdGhl
IGNsb25lZCBzeW1ib2wgdGFibGUgZm9yIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgc2luY2Ugd2Ug
bmVlZCB0byBpbnN0YW50aWF0ZQogICAgIC8vIHRoZSBtb2R1bGUgZW52aXJvbm1lbnRzIGJlZm9y
ZSBsaW5raW5nIHRoZSBjb2RlIGJsb2NrLiBXZSByZXBsYWNlIHRoZSBzdG9yZWQgc3ltYm9sIHRh
YmxlIHdpdGggdGhlIGFscmVhZHkgY2xvbmVkIG9uZS4KICAgICBpZiAoVW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sgPSBqc0R5bmFt
aWNDYXN0PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KHZtLCB1bmxpbmtlZENvZGVC
bG9jaykpIHsKICAgICAgICAgU3ltYm9sVGFibGUqIGNsb25lZFN5bWJvbFRhYmxlID0ganNDYXN0
PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKS0+bW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZSgpOwotICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpIHsK
KyAgICAgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNsb25lZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAg
Y2xvbmVkU3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAg
ICAgIH0KQEAgLTQ0Nyw3ICs0NTEsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTCiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4
ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOwogICAgICAgICBp
ZiAoc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKQogICAgICAgICAgICAgdm0u
ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4
ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0
YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgp
KTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgdGhpcywgdW5saW5rZWRF
eGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CisgICAg
ICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQodm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+
bGluayh2bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOwogICAgIH0KIAogICAgIG1fZnVu
Y3Rpb25FeHBycyA9IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRh
YmxlPj4odW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpKTsKQEAgLTQ1
NSw3ICs0NTksNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAg
ICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1
bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOwogICAgICAgICBpZiAoc2hvdWxkVXBk
YXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKQogICAgICAgICAgICAgdm0uZnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNv
dXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCks
IHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKLSAgICAgICAg
bV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV92bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlLT5s
aW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CisgICAgICAgIG1fZnVuY3Rp
b25FeHByc1tpXS5zZXQodm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluayh2bSwgb3du
ZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOwogICAgIH0KIAogICAgIGlmICh1bmxpbmtlZENvZGVC
bG9jay0+aGFzUmFyZURhdGEoKSkgewpAQCAtODUzLDggKzg1Nyw5IEBAIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsK
LSAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkKLSAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlvbih0aGlzKTsKKyAg
ICBWTSYgdm0gPSAqbV92bTsKKyAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2Zp
bGVyKSkKKyAgICAgICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlv
bih0aGlzKTsKIAogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgpID09
IE1peGVkVHJpU3RhdGUpCiAgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPnNldERpZE9wdGlt
aXplKEZhbHNlVHJpU3RhdGUpOwpAQCAtODc2LDcgKzg4MSw3IEBAIENvZGVCbG9jazo6fkNvZGVC
bG9jaygpCiAgICAgLy8gZGVzdHJ1Y3RvcnMuCiAKICNpZiBFTkFCTEUoSklUKQotICAgIGZvciAo
QmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2lu
KCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3N0dWJJbmZvcy5i
ZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YiA9ICppdGVyOwogICAgICAgICBzdHViLT5hYm91dFRvRGllKCk7CiAgICAgICAgIHN0dWItPmRl
cmVmKCk7CkBAIC05MDksMzcgKzkxNCwzOCBAQCB2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJ
ZGVudGlmaWVyU2V0CiAKIHZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25z
dCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCptX3ZtKTsKKyAg
ICBWTSYgdm0gPSAqbV92bTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
CiAgICAgQVNTRVJUKGNvbnN0YW50cy5zaXplKCkgPT0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uLnNpemUoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0gY29uc3RhbnRzLnNpemUoKTsK
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKLSAgICBib29sIGhh
c1R5cGVQcm9maWxlciA9ICEhbV92bS0+dHlwZVByb2ZpbGVyKCk7CisgICAgYm9vbCBoYXNUeXBl
UHJvZmlsZXIgPSAhIXZtLnR5cGVQcm9maWxlcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgewogICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRzW2ld
LmdldCgpOwogCiAgICAgICAgIGlmICghY29uc3RhbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJs
ZSo+KCptX3ZtLCBjb25zdGFudCkpIHsKKyAgICAgICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4odm0sIGNvbnN0YW50KSkgewog
ICAgICAgICAgICAgICAgIGlmIChoYXNUeXBlUHJvZmlsZXIpIHsKICAgICAgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAg
ICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tl
cik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIGNs
b25lID0gc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCptX3ZtKTsKKyAgICAgICAgICAgICAg
ICBTeW1ib2xUYWJsZSogY2xvbmUgPSBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQodm0pOwog
ICAgICAgICAgICAgICAgIGlmICh3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNsb25lLT5zZXRSYXJlRGF0YUNvZGVCbG9jayh0aGlzKTsKIAog
ICAgICAgICAgICAgICAgIGNvbnN0YW50ID0gY2xvbmU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGlzVGVtcGxhdGVSZWdpc3RyeUtleSgqbV92bSwgY29uc3RhbnQpKSB7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzVGVtcGxhdGVSZWdpc3RyeUtleSh2bSwgY29uc3RhbnQpKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byogdGVtcGxhdGVPYmplY3QgPSBnbG9iYWxPYmplY3QtPnRlbXBsYXRlUmVn
aXN0cnkoKS5nZXRUZW1wbGF0ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Kj4oY29uc3RhbnQpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogICAgICAgICAgICAgICAgIGNvbnN0YW50ID0gdGVtcGxhdGVPYmplY3Q7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJz
W2ldLnNldCgqbV92bSwgdGhpcywgY29uc3RhbnQpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzW2ldLnNldCh2bSwgdGhpcywgY29uc3RhbnQpOwogICAgIH0KIAogICAgIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOwpAQCAtOTg5LDcgKzk5NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90
VmlzaXRvciYKICAgICAvLyBhbmQgamV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3
YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSB0aGluZ3MKICAgICAvLyBpcyBwcm9i
YWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3
aGVuIGl0IHJ1bnMsIGl0CiAgICAgLy8gZmlndXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdv
cmsgdG8gZG8uCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIpOworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXpl
cihtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIuZ2V0KCkpOwogCiAgICAgaWYgKCFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAwMSw3ICsx
MDA3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIC8v
IFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3Rl
cnMgZm9yOiBERkcgZml4cG9pbnQgZm9yCiAgICAgLy8gamV0dGlzb25pbmcsIGFuZCB0cnlpbmcg
dG8gZmluZCBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21lCiAgICAg
Ly8gaW5saW5lIGNhY2hlLiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVtIHJlZ2Fy
ZGxlc3MuCi0gICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZtX3dlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIpOworICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3Rlciht
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuZ2V0KCkpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgLy8gV2UgZ2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3du
ZXIgZXhlY3V0YWJsZSBpcyBsaXZlLApAQCAtMTA0NSw3ICsxMDUxLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0bwogICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhl
IHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRo
aW5ncwogICAgIC8vIGlzIHByb2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUg
bm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVucywgaXQKICAgICAvLyBmaWd1cmVzIG91dCB3
aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7CisgICAgdmlzaXRvci5hZGRV
bmNvbmRpdGlvbmFsRmluYWxpemVyKG1fdW5jb25kaXRpb25hbEZpbmFsaXplci5nZXQoKSk7CiAK
ICAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51
bGwoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChvdGhlckJsb2NrKTsKQEAg
LTExNjEsNiArMTE2Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b24KICAgICBpZiAobV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkKQogICAgICAgICByZXR1
cm47CiAKKyAgICBWTSYgdm0gPSAqbV92bTsKICAgICBib29sIGFsbEFyZU1hcmtlZFNvRmFyID0g
dHJ1ZTsKICAgICAgICAgCiAgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSB7CkBAIC0xMTc0LDkgKzExODEsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCAh
bmV3U3RydWN0dXJlSUQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0KLSAgICAgICAgICAgICAgICAgICAgbV92bS0+
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKKyAgICAgICAgICAg
ICAgICAgICAgdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsK
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9Ci0gICAgICAgICAgICAg
ICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7
CisgICAgICAgICAgICAgICAgICAgIHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdT
dHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG9sZFN0cnVj
dHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3
U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xMTkxLDcgKzExOTgsNyBAQCB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIGZvciAoQmFn
PFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7
ICEhaXRlcjsgKytpdGVyKQorICAgICAgICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJl
Z2luKCk7ICEhaXRlcjsgKytpdGVyKQogICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgJj0g
KCppdGVyKS0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkBAIC0xMjc5LDEyICsxMjg2LDggQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVy
bWluZUxpdmVuZXNzKGNvbnN0IAogCiB2b2lkIENvZGVCbG9jazo6V2Vha1JlZmVyZW5jZUhhcnZl
c3Rlcjo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9Ci0gICAgICAgIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigK
LSAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0Yo
Q29kZUJsb2NrLCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpKTsKLSAgICAKLSAgICBjb2RlQmxv
Y2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7Ci0g
ICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyhOb0xvY2tpbmdOZWNlc3NhcnksIHZpc2l0
b3IpOworICAgIGNvZGVCbG9jay5wcm9wYWdhdGVUcmFuc2l0aW9ucyhOb0xvY2tpbmdOZWNlc3Nh
cnksIHZpc2l0b3IpOworICAgIGNvZGVCbG9jay5kZXRlcm1pbmVMaXZlbmVzcyhOb0xvY2tpbmdO
ZWNlc3NhcnksIHZpc2l0b3IpOwogfQogCiB2b2lkIENvZGVCbG9jazo6Y2xlYXJMTEludEdldEJ5
SWRDYWNoZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0xMjk3LDYgKzEzMDAsNyBAQCB2
b2lkIENvZGVCbG9jazo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZShJCiAKIHZvaWQgQ29kZUJsb2Nr
OjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIHsKKyAgICBWTSYgdm0gPSAqbV92bTsKICAg
ICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyA9IG1f
dW5saW5rZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOwogICAgIGZvciAoc2l6
ZV90IHNpemUgPSBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJJbnN0cnVjdGlvbiA9ICZpbnN0
cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07CkBAIC0xMzA1LDcgKzEz
MDksNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xvYWQ6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X3Vuc2V0OiB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IGN1cklu
c3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZUlEIHx8IEhlYXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChv
bGRTdHJ1Y3R1cmVJRCkpKQorICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFw
Ojppc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQp
KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHByb3Bl
cnR5IGFjY2Vzcy5cbiIpOwpAQCAtMTMxNiw5ICsxMzIwLDkgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZQogICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0
dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEOwogICAgICAgICAgICAgU3Ry
dWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlE
OwogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gY3VySW5zdHJ1Y3Rpb25bN10u
dS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlE
IHx8IEhlYXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCkpKSAmJgotICAgICAgICAgICAgICAgICghbmV3U3RydWN0dXJlSUQgfHwgSGVh
cDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVy
ZUlEKSkpICYmCi0gICAgICAgICAgICAgICAgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChjaGFp
bikpKQorICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQo
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCisgICAgICAg
ICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtlZCh2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpKSkKKyAgICAgICAgICAgICAgICAm
JiAoIWNoYWluIHx8IEhlYXA6OmlzTWFya2VkKGNoYWluKSkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBwdXQgdHJhbnNpdGlvbi5cbiIpOwpAQCAtMTQx
MCw3ICsxNDE0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgog
ICAgIGZvciAoYXV0byBpdGVyID0gY2FsbExpbmtJbmZvc0JlZ2luKCk7ICEhaXRlcjsgKytpdGVy
KQogICAgICAgICAoKml0ZXIpLT52aXNpdFdlYWsoKnZtKCkpOwogCi0gICAgZm9yIChCYWc8U3Ry
dWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7
ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
ICoqaXRlcjsKICAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcyh0aGlzKTsKICAg
ICB9CkBAIC0xNDE5LDI1ICsxNDIzLDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2Vs
aW5lSklUSW5saW4KIAogdm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkKIHsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJp
dHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcikp
OwotICAgIAotICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICBjb2Rl
QmxvY2sudXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICAKLSAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKGNvZGVCbG9jaykpIHsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkSmV0dGlzb25E
dWVUb1dlYWtSZWZlcmVuY2UoKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+amV0dGlzb24oUHJv
ZmlsZXI6OkpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKTsKKyAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKCZjb2RlQmxvY2spKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2suc2hvdWxkSmV0dGlzb25E
dWVUb1dlYWtSZWZlcmVuY2UoKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay5qZXR0aXNvbihQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKTsK
KyAgICAgICAgICAgIGNvZGVCbG9jay5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09s
ZEFnZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRC
ZUludGVycHJldGVkKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgY29kZUJsb2NrLT5m
aW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRl
cnByZXRlZChjb2RlQmxvY2suaml0VHlwZSgpKSkKKyAgICAgICAgY29kZUJsb2NrLmZpbmFsaXpl
TExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCEhY29kZUJs
b2NrLT5qaXRDb2RlKCkpCi0gICAgICAgIGNvZGVCbG9jay0+ZmluYWxpemVCYXNlbGluZUpJVElu
bGluZUNhY2hlcygpOworICAgIGlmICghIWNvZGVCbG9jay5qaXRDb2RlKCkpCisgICAgICAgIGNv
ZGVCbG9jay5maW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIH0KIApA
QCAtMTk1OSw2ICsxOTYwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAorICAgIFZNJiB2bSA9ICpt
X3ZtOwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAgICAv
LyBXZSB3YW50IHRvIGFjY29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgpAQCAtMTk3NSw3ICsxOTc3
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQogICAgICAgICAv
LyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFi
b3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCiAgICAgICAgIGlmICghaml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBh
bHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlz
ICE9IHJlcGxhY2VtZW50KCkgfHwgKG1fdm0tPmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYm
ICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkpKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJl
bnRUaHJlYWRCdXN5KCkgJiYgIUhlYXA6OmlzTWFya2VkKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgp
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAwNywxMiAr
MjAwOSwxMSBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAKICAg
ICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0
YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFibGUKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQg
YWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgotICAgIGlmIChtX3ZtLT5o
ZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQob3duZXJTY3JpcHRF
eGVjdXRhYmxlKCkpKQorICAgIGlmICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAh
SGVhcDo6aXNNYXJrZWQob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMikuCi0gICAgb3duZXJTY3JpcHRFeGVjdXRh
YmxlKCktPmluc3RhbGxDb2RlKAotICAgICAgICAqbV92bSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5
cGUoKSwgc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgp
LT5pbnN0YWxsQ29kZSh2bSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5cGUoKSwgc3BlY2lhbGl6YXRp
b25LaW5kKCkpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKERGRzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkpCkBAIC0yNzY3LDE4ICsyNzY4LDE5IEBAIGludCBDb2RlQmxvY2s6OnN0
YWNrUG9pbnRlck9mZnNldCgpCiAKIHNpemVfdCBDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVD
b2RlU2l6ZSgpCiB7CisgICAgVk0qIHZtID0gbV92bS51bnBvaXNvbmVkKCk7CiAgICAgLy8gVGhp
cyB3aWxsIGJlIGNhbGxlZCBmcm9tIENvZGVCbG9jazo6Q29kZUJsb2NrIGJlZm9yZSBlaXRoZXIg
bV92bSBvciB0aGUKICAgICAvLyBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiBJ
dCdzIE9LIHRvIHJldHVybiAwIGJlY2F1c2Ugd2hhdCB3aWxsIHJlYWxseQogICAgIC8vIG1hdHRl
ciBpcyB0aGUgcmVjb21wdXRhdGlvbiBvZiB0aGlzIHZhbHVlIHdoZW4gdGhlIHNsb3cgcGF0aCBp
cyB0cmlnZ2VyZWQuCi0gICAgaWYgKCFtX3ZtKQorICAgIGlmICghdm0pCiAgICAgICAgIHJldHVy
biAwOwogICAgIAotICAgIGlmICghKm1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdv
cmRGb3JCYXNlbGluZUpJVCkKKyAgICBpZiAoISp2bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVj
b2RlV29yZEZvckJhc2VsaW5lSklUKQogICAgICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29k
IG9mIGEgcHJlZGljdGlvbiBhcyB3ZSdsbCBnZXQuCiAgICAgCiAgICAgLy8gQmUgY29uc2VydmF0
aXZlOiByZXR1cm4gYSBzaXplIHRoYXQgd2lsbCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2Yg
dGhlIHRpbWUuCi0gICAgZG91YmxlIG11bHRpcGxpZXIgPSBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPm1lYW4oKSArCi0gICAgICAgIG1fdm0tPm1h
Y2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZp
YXRpb24oKTsKKyAgICBkb3VibGUgbXVsdGlwbGllciA9IHZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPm1lYW4oKSArCisgICAgICAgIHZtLT5tYWNoaW5l
Q29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPnN0YW5kYXJkRGV2aWF0aW9u
KCk7CiAgICAgCiAgICAgLy8gQmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0
aXBpZXJzLiBTaWxlbnRseSBkb2luZyB0aGUgIndyb25nIiB0aGluZwogICAgIC8vIGhlcmUgaXMg
T0ssIHNpbmNlIHRoaXMgd2hvbGUgbWV0aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCkBAIC0zMDY2
LDcgKzMwNjgsNyBAQCBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluCiAg
ICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKICAgICB9CiAKLSAgICBmb3IgKEJhZzxTdHJ1
Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0
ZXI7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsg
ISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAqaXRl
cjsKICAgICAgICAgaWYgKHN0dWItPmNvbnRhaW5zUEMocGMpKQogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMjY1MjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENh
bWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJ
VENvZGUuaCIKICNpbmNsdWRlICJKSVRNYXRoSUNGb3J3YXJkcy5oIgorI2luY2x1ZGUgIkpTQ1Bv
aXNvbi5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCkBAIC0xMDYsMTIgKzEwNywyMCBAQCBjbGFzcyBDb2Rl
QmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBjbGFzcyBVbmNvbmRpdGlvbmFs
RmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7IAorICAgIHN0
cnVjdCBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZp
bmFsaXplciB7CisgICAgICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoQ29kZUJsb2NrJiBjb2Rl
QmxvY2spCisgICAgICAgICAgICA6IGNvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgIHsgfQog
ICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgICAg
IENvZGVCbG9jayYgY29kZUJsb2NrOwogICAgIH07CiAKLSAgICBjbGFzcyBXZWFrUmVmZXJlbmNl
SGFydmVzdGVyIDogcHVibGljIEpTQzo6V2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7CisgICAgc3Ry
dWN0IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgOiBwdWJsaWMgSlNDOjpXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyIHsKKyAgICAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihDb2RlQmxvY2smIGNvZGVC
bG9jaykKKyAgICAgICAgICAgIDogY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgeyB9CiAg
ICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpIG92ZXJyaWRlOwor
ICAgICAgICBDb2RlQmxvY2smIGNvZGVCbG9jazsKICAgICB9OwogCiBwdWJsaWM6CkBAIC0yNTUs
OSArMjY0LDkgQEAgcHVibGljOgogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhBcml0aFByb2Zp
bGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoQXJpdGhQcm9maWxlKik7CiAgICAgSklU
U3ViSUMqIGFkZEpJVFN1YklDKEFyaXRoUHJvZmlsZSopOwotICAgIEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdp
bigpOyB9Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQo
KSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQotICAgIAorICAgIGF1dG8gc3R1YkluZm9C
ZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KKyAgICBhdXRvIHN0dWJJbmZv
RW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KKwogICAgIC8vIE8obikgb3BlcmF0
aW9uLiBVc2UgZ2V0U3R1YkluZm9NYXAoKSB1bmxlc3MgeW91IHJlYWxseSBvbmx5IGludGVuZCB0
byBnZXQgb25lCiAgICAgLy8gc3R1YiBpbmZvLgogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBmaW5k
U3R1YkluZm8oQ29kZU9yaWdpbik7CkBAIC0yNjUsOCArMjc0LDggQEAgcHVibGljOgogICAgIEJ5
VmFsSW5mbyogYWRkQnlWYWxJbmZvKCk7CiAKICAgICBDYWxsTGlua0luZm8qIGFkZENhbGxMaW5r
SW5mbygpOwotICAgIEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBjYWxsTGlua0luZm9zQmVn
aW4oKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgfQotICAgIEJhZzxDYWxsTGlu
a0luZm8+OjppdGVyYXRvciBjYWxsTGlua0luZm9zRW5kKCkgeyByZXR1cm4gbV9jYWxsTGlua0lu
Zm9zLmVuZCgpOyB9CisgICAgYXV0byBjYWxsTGlua0luZm9zQmVnaW4oKSB7IHJldHVybiBtX2Nh
bGxMaW5rSW5mb3MuYmVnaW4oKTsgfQorICAgIGF1dG8gY2FsbExpbmtJbmZvc0VuZCgpIHsgcmV0
dXJuIG1fY2FsbExpbmtJbmZvcy5lbmQoKTsgfQogCiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVu
Y3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUg
Y2FzZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlm
IHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CkBAIC0zMDgsMTEgKzMxNywxMSBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdHlwZWRlZiBKU0M6Okluc3RydWN0aW9uIEluc3RydWN0
aW9uOwotICAgIHR5cGVkZWYgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgVW5wYWNrZWRJ
bnN0cnVjdGlvbnM7CisgICAgdHlwZWRlZiBQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxv
Y2tQb2lzb24sIEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVjdGlvbnM7CiAKICAgICB1bnNp
Z25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25z
LnNpemUoKTsgfQotICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9u
cygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9Ci0gICAgY29uc3QgUmVmQ291bnRlZEFycmF5
PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlv
bnM7IH0KKyAgICBQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxvY2tQb2lzb24sIEluc3Ry
dWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KKyAgICBj
b25zdCBQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxvY2tQb2lzb24sIEluc3RydWN0aW9u
PiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KIAogICAg
IHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKTsKIApAQCAtMzYxLDcgKzM3MCw3IEBA
IHB1YmxpYzoKICAgICBFeGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KICAgICBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lclNjcmlwdEV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8U2NyaXB0RXhlY3V0
YWJsZSo+KG1fb3duZXJFeGVjdXRhYmxlLmdldCgpKTsgfQogCi0gICAgVk0qIHZtKCkgY29uc3Qg
eyByZXR1cm4gbV92bTsgfQorICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm0udW5wb2lz
b25lZCgpOyB9CiAKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9
CkBAIC04OTUsNiArOTA0LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzVGFpbENhbGxzKCk7IH0KIAorICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHNfcG9pc29uID0gbWFrZUNvbnN0RXhwclBvaXNvbihD
b2RlQmxvY2tQb2lzb24pOworCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGVzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7
CkBAIC05NTMsNiArOTY0LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnNlcnRCYXNpY0Jsb2Nr
Qm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoUmVmQ291bnRlZEFycmF5PEluc3RydWN0
aW9uPiYpOwogICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29k
ZU9mZnNldFNsb3codW5zaWduZWQpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUuLi4gQXJndW1lbnRzLCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorICAgIHN0YXRpYyBQb2lz
b25lZFVuaXF1ZVB0cjxDb2RlQmxvY2tQb2lzb24sIFQ+IG1ha2VQb2lzb25lZFVuaXF1ZShBcmd1
bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjptYWtlUG9p
c29uZWRVbmlxdWU8Q29kZUJsb2NrUG9pc29uLCBUPihzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihh
cmd1bWVudHMpLi4uKTsKKyAgICB9CisKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxv
Y2s+IG1fdW5saW5rZWRDb2RlOwogICAgIGludCBtX251bVBhcmFtZXRlcnM7CiAgICAgaW50IG1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgeyAwIH07CkBAIC05NjUsMzAgKzk4MiwzMCBAQCBwcml2
YXRlOgogICAgICAgICB9OwogICAgIH07CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNl
PiBtX293bmVyRXhlY3V0YWJsZTsKLSAgICBWTSogbV92bTsKKyAgICBDb25zdEV4cHJQb2lzb25l
ZDxDb2RlQmxvY2tQb2lzb24sIFZNKj4gbV92bTsKIAotICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0
cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CisgICAgUG9pc29uZWRSZWZDb3VudGVkQXJyYXk8Q29k
ZUJsb2NrUG9pc29uLCBJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwogICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0
ZXI7CiAgICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKIAotICAgIFJlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gbV9zb3VyY2U7CisgICAgUG9pc29uZWRSZWZQdHI8Q29kZUJsb2NrUG9pc29u
LCBTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7
CiAgICAgdW5zaWduZWQgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQ7CiAKICAgICBSZWZDb3VudGVk
QXJyYXk8TExJbnRDYWxsTGlua0luZm8+IG1fbGxpbnRDYWxsTGlua0luZm9zOwogICAgIFNlbnRp
bmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8TExJ
bnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJbnRDYWxsczsKICAgICBTdHJ1Y3R1cmVXYXRj
aHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKLSAgICBSZWZQdHI8SklUQ29k
ZT4gbV9qaXRDb2RlOworICAgIFBvaXNvbmVkUmVmUHRyPENvZGVCbG9ja1BvaXNvbiwgSklUQ29k
ZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lz
dGVyQXRPZmZzZXRMaXN0PiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwotICAg
IEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAg
ICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOwotICAgIEJhZzxCeVZhbEluZm8+IG1fYnlWYWxJbmZv
czsKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CisgICAgUG9pc29uZWRC
YWc8Q29kZUJsb2NrUG9pc29uLCBTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CisgICAg
UG9pc29uZWRCYWc8Q29kZUJsb2NrUG9pc29uLCBKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgUG9p
c29uZWRCYWc8Q29kZUJsb2NrUG9pc29uLCBKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgUG9pc29u
ZWRCYWc8Q29kZUJsb2NrUG9pc29uLCBKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgUG9pc29uZWRC
YWc8Q29kZUJsb2NrUG9pc29uLCBKSVRTdWJJQz4gbV9zdWJJQ3M7CisgICAgUG9pc29uZWRCYWc8
Q29kZUJsb2NrUG9pc29uLCBCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKKyAgICBQb2lzb25lZEJh
ZzxDb2RlQmxvY2tQb2lzb24sIENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFNl
bnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxM
aW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1v
cnBoaWNDYWxsTm9kZSwgQmFzaWNSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+
IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29k
ZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKQEAgLTEwMzAsOCArMTA0Nyw4IEBAIHBy
aXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAKLSAg
ICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKLSAgICBX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKKyAgICBQb2lz
b25lZFVuaXF1ZVB0cjxDb2RlQmxvY2tQb2lzb24sIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+IG1f
dW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBQb2lzb25lZFVuaXF1ZVB0cjxDb2RlQmxvY2tQ
b2lzb24sIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI+IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsK
IH07CiAKIGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaAkocmV2aXNpb24gMjI2NTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Nyw2ICs4Nyw3IEBA
IHZvaWQgYWRqdXN0RnJhbWVBbmRTdGFja0luT1NSRXhpdENvbXBpbGUKICAgICAvLyBXZSBuZWVk
IHRvIG1ha2Ugc3VyZSBTUCBpcyBjb3JyZWN0IGluIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgogICAg
IGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6OmppdENvZGVPZmZzZXQo
KSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQueG9yUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKENvZGVCbG9jazo6c19wb2lzb24pLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgaml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpJVENvZGVUeXBlOjpjb21tb25E
YXRhT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgaml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29tbW9uRGF0YTo6ZnJhbWVSZWdpc3RlckNv
dW50T2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgLy8gVGhpcyBkb2VzIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudCAtIDEpKnNpemVvZihSZWdpc3Rlcikg
d2hlcmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDIyNjUyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MDMs
OCArOTAzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEluc3RydWN0aW9uKiBjb3BpZWRJ
bnN0cnVjdGlvbihJbnN0cnVjdGlvbiopOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwotICAgICAgICAKLSAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBt
X2luc3RydWN0aW9uczsKKworICAgICAgICBQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxv
Y2tQb2lzb24sIEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKIAogICAgICAgICBWZWN0b3I8
Q2FsbFJlY29yZD4gbV9jYWxsczsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZmxpbmVBc21Db25maWcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZsaW5lQXNt
Q29uZmlnLmgJKHJldmlzaW9uIDIyNjUyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludE9mZmxpbmVBc21Db25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJMTEludENvbW1vbi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL0dpZ2FjYWdlLmg+CisjaW5jbHVkZSA8d3RmL1BvaXNvbmVkLmg+CiAK
ICNpZiAhRU5BQkxFKEpJVCkKICNkZWZpbmUgT0ZGTElORV9BU01fQ19MT09QIDEKQEAgLTE0Miw2
ICsxNDMsMTIgQEAKICNkZWZpbmUgT0ZGTElORV9BU01fSlNWQUxVRTY0IDAKICNlbmRpZgogCisj
aWYgRU5BQkxFKFBPSVNPTikKKyNkZWZpbmUgT0ZGTElORV9BU01fUE9JU09OIDEKKyNlbHNlCisj
ZGVmaW5lIE9GRkxJTkVfQVNNX1BPSVNPTiAwCisjZW5kaWYKKwogI2lmICFBU1NFUlRfRElTQUJM
RUQKICNkZWZpbmUgT0ZGTElORV9BU01fQVNTRVJUX0VOQUJMRUQgMQogI2Vsc2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCShyZXZpc2lvbiAyMjY1MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAK
LSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDYgKzQ1LDcgQEAgbWFjcm8g
ZGlzcGF0Y2hBZnRlckNhbGwoKQogICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRb
Y2ZyXSwgUEMKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1faW5zdHJ1Y3Rpb25zW1BCXSwgUEIKKyAgICB1bnBvaXNvbihDb2RlQmxvY2tQb2lzb24s
IFBCKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKICAgICBzdG9yZXEgcjAsIFtj
ZnIsIHQxLCA4XQogICAgIHZhbHVlUHJvZmlsZShyMCwgKENhbGxPcENvZGVTaXplIC0gMSksIHQz
KQpAQCAtNDgyLDYgKzQ4Myw3IEBAIGVuZAogbWFjcm8gc3RydWN0dXJlSURUb1N0cnVjdHVyZVdp
dGhTY3JhdGNoKHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZSwgc2NyYXRjaCkKICAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgc2NyYXRjaAogICAgIGxvYWRwIENvZGVCbG9jazo6bV92bVtzY3JhdGNo
XSwgc2NyYXRjaAorICAgIHVucG9pc29uKENvZGVCbG9ja1BvaXNvbiwgc2NyYXRjaCkKICAgICBs
b2FkcCBWTTo6aGVhcCArIEhlYXA6Om1fc3RydWN0dXJlSURUYWJsZSArIFN0cnVjdHVyZUlEVGFi
bGU6Om1fdGFibGVbc2NyYXRjaF0sIHNjcmF0Y2gKICAgICBsb2FkcCBbc2NyYXRjaCwgc3RydWN0
dXJlSURUaGVuU3RydWN0dXJlLCA4XSwgc3RydWN0dXJlSURUaGVuU3RydWN0dXJlCiBlbmQKQEAg
LTQ5NSw2ICs0OTcsNyBAQCBtYWNybyBsb2FkU3RydWN0dXJlQW5kQ2xvYmJlckZpcnN0QXJnKGNl
CiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW2NlbGxdLCBzdHJ1Y3R1cmUKICAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgY2VsbAogICAgIGxvYWRwIENvZGVCbG9jazo6bV92bVtjZWxs
XSwgY2VsbAorICAgIHVucG9pc29uKENvZGVCbG9ja1BvaXNvbiwgY2VsbCkKICAgICBsb2FkcCBW
TTo6aGVhcCArIEhlYXA6Om1fc3RydWN0dXJlSURUYWJsZSArIFN0cnVjdHVyZUlEVGFibGU6Om1f
dGFibGVbY2VsbF0sIGNlbGwKICAgICBsb2FkcCBbY2VsbCwgc3RydWN0dXJlLCA4XSwgc3RydWN0
dXJlCiBlbmQKQEAgLTU1OSw2ICs1NjIsNyBAQCBtYWNybyBmdW5jdGlvbkFyaXR5Q2hlY2soZG9u
ZUxhYmVsLCBzbG93CiAgICAgIyBSZWxvYWQgQ29kZUJsb2NrIGFuZCByZXNldCBQQywgc2luY2Ug
dGhlIHNsb3dfcGF0aCBjbG9iYmVyZWQgdGhlbS4KICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDEKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zW3QxXSwgUEIKKyAgICB1bnBv
aXNvbihDb2RlQmxvY2tQb2lzb24sIFBCKQogICAgIG1vdmUgMCwgUEMKICAgICBqbXAgZG9uZUxh
YmVsCiBlbmQKQEAgLTE5NDksMTQgKzE5NTMsMTQgQEAgbWFjcm8gZG9DYWxsKHNsb3dQYXRoLCBw
cmVwYXJlQ2FsbCkKICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2Zy
XQogICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudCArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAg
bW92ZSB0Mywgc3AKLSAgICBpZiBYODZfNjRfV0lOCi0gICAgICAgIHByZXBhcmVDYWxsKExMSW50
Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQpCi0gICAgICAg
IGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRb
dDFdKQotICAgIGVsc2UKKyAgICBpZiBQT0lTT04KICAgICAgICAgbG9hZHAgX2dfaml0Q29kZVBv
aXNvbiwgdDIKICAgICAgICAgeG9ycCBMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJn
ZXRbdDFdLCB0MgogICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDEsIHQzLCB0NCkKICAgICAgICAg
Y2FsbFRhcmdldEZ1bmN0aW9uKHQyKQorICAgIGVsc2UKKyAgICAgICAgcHJlcGFyZUNhbGwoTExJ
bnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCkKKyAgICAg
ICAgY2FsbFRhcmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdl
dFt0MV0pCiAgICAgZW5kCiAKIC5vcENhbGxTbG93OgpAQCAtMjAwMyw2ICsyMDA3LDcgQEAgX2xs
aW50X29wX2NhdGNoOgogCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAg
Q29kZUJsb2NrOjptX2luc3RydWN0aW9uc1tQQl0sIFBCCisgICAgdW5wb2lzb24oQ29kZUJsb2Nr
UG9pc29uLCBQQikKICAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3Qz
XSwgUEMKICAgICBzdWJwIFBCLCBQQwogICAgIHJzaGlmdHAgMywgUEMKQEAgLTI0OTUsNiArMjUw
MCw3IEBAIF9sbGludF9vcF9wcm9maWxlX3R5cGU6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAg
IGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQogICAgIGxvYWRwIENvZGVCbG9jazo6bV92bVt0MV0s
IHQxCisgICAgdW5wb2lzb24oQ29kZUJsb2NrUG9pc29uLCB0MSkKICAgICAjIHQxIGlzIGhvbGRp
bmcgdGhlIHBvaW50ZXIgdG8gdGhlIHR5cGVQcm9maWxlckxvZy4KICAgICBsb2FkcCBWTTo6bV90
eXBlUHJvZmlsZXJMb2dbdDFdLCB0MQogICAgICMgdDIgaXMgaG9sZGluZyB0aGUgcG9pbnRlciB0
byB0aGUgY3VycmVudCBsb2cgZW50cnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMjY1MjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMDQsNiArMjA0LDEwIEBAIGVsc2UKICAgICBjb25zdCBMb3dlc3RUYWcgPSBEZWxl
dGVkVmFsdWVUYWcKIGVuZAogCitpZiBQT0lTT04KKyAgICBjb25zdCBDb2RlQmxvY2tQb2lzb24g
PSBjb25zdGV4cHIgQ29kZUJsb2NrOjpzX3BvaXNvbgorZW5kCisKICMgUHV0QnlJZEZsYWdzIGRh
dGEKIGNvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSBjb25zdGV4cHIgUHV0QnlJZFByaW1h
cnlUeXBlTWFzawogY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gY29uc3RleHBy
IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeQpAQCAtNzUyLDYgKzc1NiwxMiBAQCBtYWNybyBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoZGVzCiAgICAgZW5kCiBlbmQKIAorbWFjcm8g
dW5wb2lzb24ocG9pc29uLCBmaWVsZCkKKyAgICBpZiBQT0lTT04KKyAgICAgICAgeG9ycCBwb2lz
b24sIGZpZWxkCisgICAgZW5kCitlbmQKKwogbWFjcm8gZnVuY3Rpb25Qcm9sb2d1ZSgpCiAgICAg
aWYgWDg2IG9yIFg4Nl9XSU4gb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KICAgICAgICAgcHVzaCBj
ZnIKQEAgLTEwMTQsNiArMTAyNCw3IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwg
Y29kZUJsb2MKICAgICAjIFNldCB1cCB0aGUgUEMuCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAg
IGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCBQQgorICAgICAgICB1bnBvaXNv
bihDb2RlQmxvY2tQb2lzb24sIFBCKQogICAgICAgICBtb3ZlIDAsIFBDCiAgICAgZWxzZQogICAg
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zW3QxXSwgUEMKQEAgLTEwMjQsNiAr
MTAzNSw3IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBz
dWJwIGNmciwgdDAsIHQwCiAgICAgYnBhIHQwLCBjZnIsIC5uZWVkU3RhY2tDaGVjawogICAgIGxv
YWRwIENvZGVCbG9jazo6bV92bVt0MV0sIHQyCisgICAgdW5wb2lzb24oQ29kZUJsb2NrUG9pc29u
LCB0MikKICAgICBpZiBDX0xPT1AKICAgICAgICAgYnBiZXEgVk06Om1fY2xvb3BTdGFja0xpbWl0
W3QyXSwgdDAsIC5zdGFja0hlaWdodE9LCiAgICAgZWxzZQpAQCAtMTYxMSw2ICsxNjIzLDcgQEAg
X2xsaW50X29wX2NoZWNrX3RyYXBzOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgdDEKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDFdLCB0MQorICAg
IHVucG9pc29uKENvZGVCbG9ja1BvaXNvbiwgdDEpCiAgICAgbG9hZGIgVk06Om1fdHJhcHMrVk1U
cmFwczo6bV9uZWVkVHJhcEhhbmRsaW5nW3QxXSwgdDAKICAgICBidHBueiB0MCwgLmhhbmRsZVRy
YXBzCiAuYWZ0ZXJIYW5kbGluZ1RyYXBzOgpAQCAtMTYyNiw2ICsxNjM5LDcgQEAgX2xsaW50X29w
X2NoZWNrX3RyYXBzOgogbWFjcm8gYWNxdWlyZVNoYWRvd0NoaWNrZW5QYWNrZXQoc2xvdykKICAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDFd
LCB0MQorICAgIHVucG9pc29uKENvZGVCbG9ja1BvaXNvbiwgdDEpCiAgICAgbG9hZHAgVk06Om1f
c2hhZG93Q2hpY2tlblt0MV0sIHQyCiAgICAgbG9hZHAgU2hhZG93Q2hpY2tlbjo6bV9sb2dDdXJz
b3JbdDJdLCB0MAogICAgIGJwYWVxIHQwLCBTaGFkb3dDaGlja2VuOjptX2xvZ0VuZFt0Ml0sIHNs
b3cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNv
dXJjZUNvZGUuaAkocmV2aXNpb24gMjI2NTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiSlNDUG9pc29uLmgiCiAjaW5j
bHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTk4
LDkgKzk5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2VuZE9mZnNldCAtIG1fc3RhcnRPZmZzZXQ7IH0KIAogICAgIHByb3RlY3RlZDoK
LSAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgUmVmPFNvdXJjZVByb3ZpZGllcj4uCisgICAgICAg
IC8vIEZJWE1FOiBNYWtlIGl0IFBvaXNvbmVkUmVmPFNvdXJjZVByb3ZpZGllcj4uCiAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgzMjUKLSAgICAg
ICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOworICAgICAgICBQb2lzb25lZFJl
ZlB0cjxVbmxpbmtlZFNvdXJjZUNvZGVQb2lzb24sIFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVy
OwogICAgICAgICBpbnQgbV9zdGFydE9mZnNldDsKICAgICAgICAgaW50IG1fZW5kT2Zmc2V0Owog
ICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAko
cmV2aXNpb24gMjI2NTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUG9p
c29uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwyMiBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIGVudW0gUG9pc29uIHsKLSAgICBOb3RQb2lzb25lZCA9IDAsCisgICAgTm90UG9pc29uZWQg
PSAwLCAvLyBSZXNlcnZlZCAoYW5kIHVudXNlZCkgc28gdGhhdCBwb2lzb24ga2V5cyBhcmUgbmV2
ZXIgMC4KKworICAgIC8vIEFkZCBuZXcgcG9pc29uIGtleXMgYmVsb3cgaW4gYWxwaGFiZXRpY2Fs
IG9yZGVyLiBUaGUgb3JkZXIgZG9lc24ndCByZWFsbHkKKyAgICAvLyBtYXR0ZXIsIGJ1dCB3ZSBt
aWdodCBhcyB3ZWxsIGtlZXAgdGhlbSBpbiBhbHBoYWJldGljYWxseSBvcmRlciBmb3IKKyAgICAv
LyBncmVhdGVyIHJlYWRhYmlsaXR5LgorICAgIENvZGVCbG9ja1BvaXNvbiwKKyAgICBKU0dsb2Jh
bE9iamVjdFBvaXNvbiwKKyAgICBKU1NjcmlwdEZldGNoUGFyYW1ldGVyc1BvaXNvbiwKKyAgICBK
U1NjcmlwdEZldGNoZXJQb2lzb24sCiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1BvaXNvbiwK
ICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2VQb2lzb24sCiAgICAgSlNXZWJBc3NlbWJseU1lbW9y
eVBvaXNvbiwKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlUG9pc29uLAogICAgIEpTV2ViQXNzZW1i
bHlUYWJsZVBvaXNvbiwKLSAgICBUcmFuc2l0aW9uTWFwUG9pc29uLAotICAgIFdlYWtJbXBsUG9p
c29uLAorICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZVBvaXNvbiwKKyAgICBVbmxpbmtlZFNv
dXJjZUNvZGVQb2lzb24sCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDIyNjUyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMTg4LDcgKzE4OCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1z
dGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwgSlNPYmplY3QqIG9iamVj
dCkKKyAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwgSlNPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICByZXR1cm4gUHJveHlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KHZtLCBQcm94eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbCwgZ2xvYmFs
LT5mdW5jdGlvblByb3RvdHlwZSgpKSk7CkBAIC00MDEsOCArNDAxLDggQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAgbV9kZWJ1Z2dlciA9IDA7CiAKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyPigqdGhp
cyk7Ci0gICAgbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlID0gc3RkOjptYWtlX3VuaXF1ZTxKU0dsb2Jh
bE9iamVjdERlYnVnZ2FibGU+KCp0aGlzKTsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSBt
YWtlUG9pc29uZWRVbmlxdWU8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRy
b2xsZXI+KCp0aGlzKTsKKyAgICBtX2luc3BlY3RvckRlYnVnZ2FibGUgPSBtYWtlUG9pc29uZWRV
bmlxdWU8SlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlPigqdGhpcyk7CiAgICAgbV9pbnNwZWN0b3JE
ZWJ1Z2dhYmxlLT5pbml0KCk7CiAgICAgbV9jb25zb2xlQ2xpZW50ID0gbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5jb25zb2xlQ2xpZW50KCk7CiAjZW5kaWYKQEAgLTEwMTEsNjMgKzEwMTEsNjMgQEAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogCiAgICAgICAgIHsKICAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRp
dmVXYXRjaHBvaW50KGFycmF5SXRlcmF0b3JQcm90b3R5cGUsIG1fdm0ucHJvcGVydHlOYW1lcy0+
bmV4dCk7Ci0gICAgICAgICAgICBtX2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0ID0gc3RkOjpt
YWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVX
YXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9hcnJheUl0ZXJhdG9yUHJvdG9jb2xXYXRj
aHBvaW50KTsKKyAgICAgICAgICAgIG1fYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQgPSBtYWtl
UG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5s
aW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fYXJyYXlJdGVyYXRvclByb3RvY29s
V2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LT5p
bnN0YWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQodGhpcy0+YXJy
YXlQcm90b3R5cGUoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0gICAg
ICAgICAgICBtX2FycmF5UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50ID0gc3RkOjpt
YWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVX
YXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9hcnJheUl0ZXJhdG9yUHJvdG9jb2xXYXRj
aHBvaW50KTsKKyAgICAgICAgICAgIG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNo
cG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdh
dGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fYXJyYXlJdGVy
YXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX2FycmF5UHJvdG90eXBlU3lt
Ym9sSXRlcmF0b3JXYXRjaHBvaW50LT5pbnN0YWxsKCk7CiAgICAgICAgIH0KIAogICAgICAgICB7
CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFk
YXB0aXZlV2F0Y2hwb2ludChtYXBJdGVyYXRvclByb3RvdHlwZSwgbV92bS5wcm9wZXJ0eU5hbWVz
LT5uZXh0KTsKLSAgICAgICAgICAgIG1fbWFwSXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2lu
dCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9p
bnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fbWFwSXRlcmF0b3JQcm90
b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9tYXBJdGVyYXRvclByb3RvdHlwZU5leHRX
YXRjaHBvaW50ID0gbWFrZVBvaXNvbmVkVW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRp
dmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcEl0
ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKICAgICAgICAgICAgIG1fbWFwSXRlcmF0b3JQcm90
b3R5cGVOZXh0V2F0Y2hwb2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAgICAgICAgIHsKICAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVwQWRhcHRp
dmVXYXRjaHBvaW50KG1fbWFwUHJvdG90eXBlLmdldCgpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yU3ltYm9sKTsKLSAgICAgICAgICAgIG1fbWFwUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JX
YXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9tYXBJdGVy
YXRvclByb3RvY29sV2F0Y2hwb2ludCk7CisgICAgICAgICAgICBtX21hcFByb3RvdHlwZVN5bWJv
bEl0ZXJhdG9yV2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNo
YW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlv
biwgbV9tYXBJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX21hcFBy
b3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludC0+aW5zdGFsbCgpOwogICAgICAgICB9CiAK
ICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9u
ID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQoc2V0SXRlcmF0b3JQcm90b3R5cGUsIG1fdm0ucHJv
cGVydHlOYW1lcy0+bmV4dCk7Ci0gICAgICAgICAgICBtX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4
dFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRp
dmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX3NldEl0
ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fc2V0SXRlcmF0b3JQcm90
b3R5cGVOZXh0V2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNo
YW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlv
biwgbV9zZXRJdGVyYXRvclByb3RvY29sV2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX3NldEl0
ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogICAg
ICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBz
ZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtX3NldFByb3RvdHlwZS5nZXQoKSwgbV92bS5wcm9wZXJ0
eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0gICAgICAgICAgICBtX3NldFByb3RvdHlwZVN5bWJv
bEl0ZXJhdG9yV2F0Y2hwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFu
Z2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24s
IG1fc2V0SXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9zZXRQcm90
b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0
UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZt
LCBjb25kaXRpb24sIG1fc2V0SXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOwogICAgICAgICAg
ICAgbV9zZXRQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQtPmluc3RhbGwoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IGNvbmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1fc3RyaW5nSXRlcmF0b3JQcm90
b3R5cGUuZ2V0KCksIG1fdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7Ci0gICAgICAgICAgICBtX3N0
cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9i
amVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+
Pih2bSwgY29uZGl0aW9uLCBtX3N0cmluZ0l0ZXJhdG9yUHJvdG9jb2xXYXRjaHBvaW50KTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nSXRlcmF0b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludCA9IG1ha2VQ
b2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxp
bmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zdHJpbmdJdGVyYXRvclByb3RvY29s
V2F0Y2hwb2ludCk7CiAgICAgICAgICAgICBtX3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dFdh
dGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgfQogICAgICAgICB7CiAgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2lu
dChtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5
bWJvbCk7Ci0gICAgICAgICAgICBtX3N0cmluZ1Byb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hw
b2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNo
cG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRpb24sIG1fc3RyaW5nSXRlcmF0
b3JQcm90b2NvbFdhdGNocG9pbnQpOworICAgICAgICAgICAgbV9zdHJpbmdQcm90b3R5cGVTeW1i
b2xJdGVyYXRvcldhdGNocG9pbnQgPSBtYWtlUG9pc29uZWRVbmlxdWU8T2JqZWN0UHJvcGVydHlD
aGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHZtLCBjb25kaXRp
b24sIG1fc3RyaW5nSXRlcmF0b3JQcm90b2NvbFdhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9z
dHJpbmdQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHsKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNv
bmRpdGlvbiA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KG1fbWFwUHJvdG90eXBlLmdldCgpLCBt
X3ZtLnByb3BlcnR5TmFtZXMtPnNldCk7Ci0gICAgICAgICAgICBtX21hcFByb3RvdHlwZVNldFdh
dGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVX
YXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcFNldFdh
dGNocG9pbnQpOworICAgICAgICAgICAgbV9tYXBQcm90b3R5cGVTZXRXYXRjaHBvaW50ID0gbWFr
ZVBvaXNvbmVkVW5pcXVlPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElu
bGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9uLCBtX21hcFNldFdhdGNocG9pbnQpOwog
ICAgICAgICAgICAgbV9tYXBQcm90b3R5cGVTZXRXYXRjaHBvaW50LT5pbnN0YWxsKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBj
b25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludChtX3NldFByb3RvdHlwZS5nZXQoKSwg
bV92bS5wcm9wZXJ0eU5hbWVzLT5hZGQpOwotICAgICAgICAgICAgbV9zZXRQcm90b3R5cGVBZGRX
YXRjaHBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRBZGRX
YXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1fc2V0UHJvdG90eXBlQWRkV2F0Y2hwb2ludCA9IG1h
a2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJ
bmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRpdGlvbiwgbV9zZXRBZGRXYXRjaHBvaW50KTsK
ICAgICAgICAgICAgIG1fc2V0UHJvdG90eXBlQWRkV2F0Y2hwb2ludC0+aW5zdGFsbCgpOwogICAg
ICAgICB9CiAKICAgICAgICAgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
Y29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQobnVtYmVyUHJvdG90eXBlKCksIG1f
dm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcpOwotICAgICAgICAgICAgbV9udW1iZXJQcm90b3R5
cGVUb1N0cmluZ1dhdGNocG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih2bSwgY29uZGl0aW9u
LCBtX251bWJlclRvU3RyaW5nV2F0Y2hwb2ludCk7CisgICAgICAgICAgICBtX251bWJlclByb3Rv
dHlwZVRvU3RyaW5nV2F0Y2hwb2ludCA9IG1ha2VQb2lzb25lZFVuaXF1ZTxPYmplY3RQcm9wZXJ0
eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4odm0sIGNvbmRp
dGlvbiwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnQpOwogICAgICAgICAgICAgbV9udW1iZXJQ
cm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQtPmluc3RhbGwoKTsKICAgICAgICAgICAgIG1fbnVt
YmVyUHJvdG9Ub1N0cmluZ0Z1bmN0aW9uLnNldCh2bSwgdGhpcywganNDYXN0PEpTRnVuY3Rpb24q
PihudW1iZXJQcm90b3R5cGUoKS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZykpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMjY1MjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0NQb2lzb24uaCIK
ICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCkBAIC00Niw2
ICs0Nyw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8
YXJyYXk+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUG9pc29uZWRV
bmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIHN0cnVjdCBPcGFxdWVK
U0NsYXNzOwpAQCAtMzk5LDkgKzQwMSwxMSBAQCBwdWJsaWM6CiAKICAgICBWTSYgbV92bTsKIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIFBvaXNvbmVkVW5pcXVlUHRyID0gV1RGOjpQ
b2lzb25lZFVuaXF1ZVB0cjxKU0dsb2JhbE9iamVjdFBvaXNvbiwgVD47CisKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpKU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlPiBtX2luc3BlY3RvckRlYnVn
Z2FibGU7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBQb2lzb25lZFVu
aXF1ZVB0cjxKU0dsb2JhbE9iamVjdERlYnVnZ2FibGU+IG1faW5zcGVjdG9yRGVidWdnYWJsZTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEwpCkBAIC00MzYsMTcgKzQ0MCwxNyBAQCBwdWJsaWM6
CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3NldEFkZFdhdGNocG9pbnQ7CiAgICAgSW5saW5l
V2F0Y2hwb2ludFNldCBtX2FycmF5U3BlY2llc1dhdGNocG9pbnQ7CiAgICAgSW5saW5lV2F0Y2hw
b2ludFNldCBtX251bWJlclRvU3RyaW5nV2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNl
dD4+IG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQ7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdh
dGNocG9pbnRTZXQ+PiBtX2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRj
aHBvaW50U2V0Pj4gbV9tYXBQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElu
bGluZVdhdGNocG9pbnRTZXQ+PiBtX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBv
aW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX3NldFByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0
Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc2V0SXRlcmF0b3JQcm90b3R5cGVO
ZXh0V2F0Y2hwb2ludDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VB
ZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc3RyaW5nUHJvdG90eXBl
U3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9w
ZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9zdHJp
bmdJdGVyYXRvclByb3RvdHlwZU5leHRXYXRjaHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxP
YmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0
Pj4gbV9tYXBQcm90b3R5cGVTZXRXYXRjaHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmpl
Y3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4g
bV9zZXRQcm90b3R5cGVBZGRXYXRjaHBvaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQ
cm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9u
dW1iZXJQcm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8
T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNl
dD4+IG1fYXJyYXlQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQ7CisgICAgUG9pc29u
ZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5l
V2F0Y2hwb2ludFNldD4+IG1fYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQ7CisgICAgUG9pc29u
ZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5l
V2F0Y2hwb2ludFNldD4+IG1fbWFwUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50Owor
ICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBv
aW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNo
cG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc2V0UHJvdG90eXBlU3ltYm9sSXRl
cmF0b3JXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX3NldEl0ZXJhdG9y
UHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7CisgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJv
cGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc3Ry
aW5nUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JXYXRjaHBvaW50OworICAgIFBvaXNvbmVkVW5pcXVl
UHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9p
bnRTZXQ+PiBtX3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7CisgICAgUG9p
c29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5s
aW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwUHJvdG90eXBlU2V0V2F0Y2hwb2ludDsKKyAgICBQb2lz
b25lZFVuaXF1ZVB0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxp
bmVXYXRjaHBvaW50U2V0Pj4gbV9zZXRQcm90b3R5cGVBZGRXYXRjaHBvaW50OworICAgIFBvaXNv
bmVkVW5pcXVlUHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGlu
ZVdhdGNocG9pbnRTZXQ+PiBtX251bWJlclByb3RvdHlwZVRvU3RyaW5nV2F0Y2hwb2ludDsKIAog
ICAgIGJvb2wgaXNBcnJheVByb3RvdHlwZUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2
YWJsZSgpOwogICAgIGJvb2wgaXNNYXBQcm90b3R5cGVJdGVyYXRvclByb3RvY29sRmFzdEFuZE5v
bk9ic2VydmFibGUoKTsKQEAgLTkxNiw2ICs5MjAsMTIgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNsZWFyUmFyZURhdGEoSlNDZWxsKik7CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHMsIHR5cGVuYW1lIEVuYWJs
ZSA9IHZvaWQ+CisgICAgc3RhdGljIEpTR2xvYmFsT2JqZWN0OjpQb2lzb25lZFVuaXF1ZVB0cjxU
PiBtYWtlUG9pc29uZWRVbmlxdWUoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bWFrZVBvaXNvbmVkVW5pcXVlPEpTR2xvYmFsT2JqZWN0UG9pc29u
LCBUPihzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKICAg
ICBib29sIG1fbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgeyBmYWxzZSB9OwogI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiAgICAgUmV0YWluUHRyPEpTV3JhcHBlck1hcD4gbV93cmFwcGVyTWFwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njcmlw
dEZldGNoUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyMjY1MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NSw5ICsyNiwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkpTQ1BvaXNvbi5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNs
dWRlICJTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC03MSw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0K
IAotICAgIFJlZjxTY3JpcHRGZXRjaFBhcmFtZXRlcnM+IG1fcGFyYW1ldGVyczsKKyAgICBQb2lz
b25lZFJlZjxKU1NjcmlwdEZldGNoUGFyYW1ldGVyc1BvaXNvbiwgU2NyaXB0RmV0Y2hQYXJhbWV0
ZXJzPiBtX3BhcmFtZXRlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hlci5oCShyZXZpc2lv
biAyMjY1MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNo
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOSArMjYsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJKU0NQb2lzb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0RmV0Y2hlci5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTcxLDcgKzc0LDcgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPFNjcmlwdEZldGNoZXI+IG1fZmV0Y2hlcjsK
KyAgICBQb2lzb25lZFJlZlB0cjxKU1NjcmlwdEZldGNoZXJQb2lzb24sIFNjcmlwdEZldGNoZXI+
IG1fZmV0Y2hlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
LmgJKHJldmlzaW9uIDIyNjUyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg3LDggKzE4Nyw4
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2luZ2xlU2xvdFRyYW5z
aXRpb25XZWFrT3duZXI7Ci0gICAgdXNpbmcgUG9pc29uZWRUcmFuc2l0aW9uTWFwUHRyID0gQ29u
c3RFeHByUG9pc29uZWQ8VHJhbnNpdGlvbk1hcFBvaXNvbiwgVHJhbnNpdGlvbk1hcCo+OwotICAg
IHVzaW5nIFBvaXNvbmVkV2Vha0ltcGxQdHIgPSBDb25zdEV4cHJQb2lzb25lZDxXZWFrSW1wbFBv
aXNvbiwgV2Vha0ltcGwqPjsKKyAgICB1c2luZyBQb2lzb25lZFRyYW5zaXRpb25NYXBQdHIgPSBD
b25zdEV4cHJQb2lzb25lZDxTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVQb2lzb24sIFRyYW5zaXRp
b25NYXAqPjsKKyAgICB1c2luZyBQb2lzb25lZFdlYWtJbXBsUHRyID0gQ29uc3RFeHByUG9pc29u
ZWQ8U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlUG9pc29uLCBXZWFrSW1wbCo+OwogCiAgICAgYm9v
bCBpc1VzaW5nU2luZ2xlU2xvdCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDIyNjUyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDYgKzUxLDggQEAgSlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZAogICAgIDogQmFzZSh2bSwgdm0ud2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2NvZGVCbG9jayhXVEZN
b3ZlKGNvZGVCbG9jaykpCiB7CisgICAgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyID0gUG9pc29u
ZWRVbmlxdWVQdHI8SlNXZWJBc3NlbWJseUNvZGVCbG9ja1BvaXNvbiwgVW5jb25kaXRpb25hbEZp
bmFsaXplcj46OmNyZWF0ZSgqdGhpcyk7CisKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBu
ZWVkIHRvIGRvIHRoaXMgc3luY2hyb25vdXNseS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTY3CiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNl
cnZlQ2FwYWNpdHkobV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CkBAIC05Miwx
NSArOTQsMTMgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcgogCiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIHZpc2l0
b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFs
RmluYWxpemVyKTsKKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhpc09i
amVjdC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVyLmdldCgpKTsKIH0KIAogdm9pZCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgpCiB7Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGJp
dHdpc2VfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oCi0gICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaywg
bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSB0aGlzT2Jq
ZWN0LT5tX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCi0gICAgICAgICgq
aXRlciktPnZpc2l0V2VhaygqdGhpc09iamVjdC0+dm0oKSk7CisgICAgZm9yIChhdXRvIGl0ZXIg
PSBjb2RlQmxvY2subV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQorICAg
ICAgICAoKml0ZXIpLT52aXNpdFdlYWsoKmNvZGVCbG9jay52bSgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMjY1MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVk
ZSAiV2FzbU1vZHVsZS5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvUG9p
c29uZWRVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCkBAIC04OCwxMyArODksMTcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJs
aWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBzdHJ1Y3QgVW5jb25kaXRpb25h
bEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgICAg
ICBVbmNvbmRpdGlvbmFsRmluYWxpemVyKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2smIGNvZGVCbG9j
aykKKyAgICAgICAgICAgIDogY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgeyB9CiAgICAg
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICAgICAgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayYgY29kZUJsb2NrOwogICAgIH07CiAKICAgICBQb2lzb25lZFJl
ZjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrUG9pc29uLCBXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJs
b2NrOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvSlNFeGl0U3R1
YnM7Ci0gICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7
CisgICAgUG9pc29uZWRVbmlxdWVQdHI8SlNXZWJBc3NlbWJseUNvZGVCbG9ja1BvaXNvbiwgVW5j
b25kaXRpb25hbEZpbmFsaXplcj4gbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwogICAgIEJhZzxD
YWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7
CiB9OwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNjUyNikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTgtMDEtMDcgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFwcGx5IHBvaXNvbmluZyB0byBtb3JlIHBvaW50
ZXJzIGluIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MTA5NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYxODI5NzA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgSkYgQmFzdGllbi4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBQb2lz
b25lZEJhZyBhbmQgUG9pc29uZWRSZWZDb3VudGVkQXJyYXkuCisKKyAgICAgICAgKiB3dGYvQmFn
Lmg6CisgICAgICAgIChXVEY6OlByaXZhdGU6OkJhZ05vZGU6OkJhZ05vZGUpOgorICAgICAgICAo
V1RGOjpCYWc6OkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdURjo6QmFnOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJhZzo6YWRkKToKKyAgICAgICAgKFdU
Rjo6QmFnOjpiZWdpbik6CisgICAgICAgIChXVEY6OkJhZzo6dW53cmFwcGVkSGVhZCk6CisgICAg
ICAgIChXVEY6OkJhZzo6Tm9kZTo6Tm9kZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0JhZ1Rv
SGFzaE1hcC5oOgorICAgICAgICAoV1RGOjp0b0hhc2hNYXApOgorICAgICAgICAqIHd0Zi9Qb2lz
b25lZC5oOgorICAgICAgICAoV1RGOjpjb25zdEV4cHJQb2lzb25SYW5kb20pOgorICAgICAgICAo
V1RGOjptYWtlQ29uc3RFeHByUG9pc29uKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5
Lmg6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6UmVmQ291bnRlZEFycmF5KToKKyAg
ICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpjbG9uZSBjb25zdCk6CisgICAgICAgIChXVEY6
OlJlZkNvdW50ZWRBcnJheTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFy
cmF5Ojp+UmVmQ291bnRlZEFycmF5KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5Ojpy
ZWZDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6c2l6ZSBjb25z
dCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6ZGF0YSk6CisgICAgICAgIChXVEY6
OlJlZkNvdW50ZWRBcnJheTo6YmVnaW4pOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6
OmVuZCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6ZGF0YSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpS
ZWZDb3VudGVkQXJyYXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV1RGOjpSZWZDb3Vu
dGVkQXJyYXk6OkhlYWRlcjo6ZnJvbVBheWxvYWQpOgorICAgICAgICAqIHd0Zi9XVEZBc3NlcnRp
b25zLmNwcDoKKwogMjAxOC0wMS0wNSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+
CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IHBvaXNvbiBKUyBvYmplY3QncyBzZWNyZXRzCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAkocmV2aXNpb24gMjI2NTI2KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsNDQgKzI2LDUwIEBACiAjaWZuZGVmIEJhZ19oCiAjZGVmaW5lIEJhZ19oCiAKKyNpbmNs
dWRlIDx3dGYvRHVtYlB0clRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCituYW1lc3Bh
Y2UgUHJpdmF0ZSB7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCYWdOb2RlIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmdzPgorICAgIEJhZ05vZGUoQXJncyYmLi4uIGFyZ3MpCisgICAgICAgIDogbV9pdGVt
KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikKKyAgICB7IH0KKyAgICAKKyAgICBUIG1faXRl
bTsKKyAgICBCYWdOb2RlKiBtX25leHQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBQcml2YXRlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clRyYWl0cyA9IER1
bWJQdHJUcmFpdHM8UHJpdmF0ZTo6QmFnTm9kZTxUPj4+CiBjbGFzcyBCYWcgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhZyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wcml2
YXRlOgotICAgIGNsYXNzIE5vZGUgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAg
IE5vZGUoQXJncyYmLi4uIGFyZ3MpCi0gICAgICAgICAgICA6IG1faXRlbShzdGQ6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
VCBtX2l0ZW07Ci0gICAgICAgIE5vZGUqIG1fbmV4dCB7IG51bGxwdHIgfTsKLSAgICB9OwotICAg
IAorICAgIHVzaW5nIE5vZGUgPSBQcml2YXRlOjpCYWdOb2RlPFQ+OworCiBwdWJsaWM6Ci0gICAg
QmFnKCkKLSAgICB7Ci0gICAgfQorICAgIEJhZygpID0gZGVmYXVsdDsKIAotICAgIEJhZyhCYWc8
VD4mJiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyhCYWc8VCwgVT4m
JiBvdGhlcikKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9oZWFkKTsKLSAgICAgICAgbV9oZWFk
ID0gb3RoZXIubV9oZWFkOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7
CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgQmFnJiBvcGVy
YXRvcj0oQmFnPFQ+JiYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcm
IG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1faGVhZCA9IG90
aGVyLm1faGVhZDsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOwogICAg
ICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQpAQCAtNzUsOSArODEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAg
IHsKLSAgICAgICAgd2hpbGUgKG1faGVhZCkgewotICAgICAgICAgICAgTm9kZSogY3VycmVudCA9
IG1faGVhZDsKLSAgICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKKyAgICAgICAg
Tm9kZSogaGVhZCA9IHRoaXMtPnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgd2hpbGUgKGhlYWQp
IHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSBoZWFkOworICAgICAgICAgICAgaGVhZCA9
IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwogICAgICAgICB9
CiAgICAgICAgIG1faGVhZCA9IG51bGxwdHI7CkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoKICAg
ICBUKiBhZGQoQXJncyYmLi4uIGFyZ3MpCiAgICAgewogICAgICAgICBOb2RlKiBuZXdOb2RlID0g
bmV3IE5vZGUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgbmV3Tm9kZS0+
bV9uZXh0ID0gbV9oZWFkOworICAgICAgICBuZXdOb2RlLT5tX25leHQgPSB1bndyYXBwZWRIZWFk
KCk7CiAgICAgICAgIG1faGVhZCA9IG5ld05vZGU7CiAgICAgICAgIHJldHVybiAmbmV3Tm9kZS0+
bV9pdGVtOwogICAgIH0KQEAgLTEyMSwxNCArMTI4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gZnJpZW5kIGNsYXNz
IFdURjo6QmFnOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+IGZyaWVuZCBj
bGFzcyBXVEY6OkJhZzsKICAgICAgICAgTm9kZSogbV9ub2RlOwogICAgIH07CiAgICAgCiAgICAg
aXRlcmF0b3IgYmVnaW4oKQogICAgIHsKICAgICAgICAgaXRlcmF0b3IgcmVzdWx0OwotICAgICAg
ICByZXN1bHQubV9ub2RlID0gbV9oZWFkOworICAgICAgICByZXN1bHQubV9ub2RlID0gdW53cmFw
cGVkSGVhZCgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTEzNywx
MiArMTQ0LDIwIEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAh
bV9oZWFkOyB9CiAgICAgCiBwcml2YXRlOgotICAgIE5vZGUqIG1faGVhZCB7IG51bGxwdHIgfTsK
KyAgICBOb2RlKiB1bndyYXBwZWRIZWFkKCkgeyByZXR1cm4gUHRyVHJhaXRzOjp1bndyYXAobV9o
ZWFkKTsgfQorCisgICAgdHlwZW5hbWUgUHRyVHJhaXRzOjpTdG9yYWdlVHlwZSBtX2hlYWQgeyBu
dWxscHRyIH07CiB9OwogCit0ZW1wbGF0ZTx1aW50MzJfdCBrZXksIHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb25zdEV4cHJQb2lzb25lZFB0clRyYWl0czsKKwordGVtcGxhdGU8dWludDMyX3Qga2V5LCB0
eXBlbmFtZSBUPgordXNpbmcgUG9pc29uZWRCYWcgPSBCYWc8VCwgQ29uc3RFeHByUG9pc29uZWRQ
dHJUcmFpdHM8a2V5LCBQcml2YXRlOjpCYWdOb2RlPFQ+Pj47CisKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCiB1c2luZyBXVEY6OkJhZzsKK3VzaW5nIFdURjo6UG9pc29uZWRCYWc7CiAKICNlbmRpZiAv
LyBCYWdfaAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWdUb0hhc2hNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWdUb0hhc2hNYXAuaAkocmV2aXNpb24gMjI2NTI2KQorKysg
U291cmNlL1dURi93dGYvQmFnVG9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTAg
KzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50
VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5R2V0
dGVyRnVuY3Rvcj4KLXZvaWQgdG9IYXNoTWFwKEJhZzxFbGVtZW50VHlwZT4mIGJhZywgS2V5R2V0
dGVyRnVuY3RvciYgZ2V0S2V5LCBIYXNoTWFwPEtleVR5cGUsIEVsZW1lbnRUeXBlKiwgSGFzaEFy
Zz4mIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCB0eXBlbmFtZSBCYWdQ
dHJUcmFpdHMsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtl
eUdldHRlckZ1bmN0b3I+Cit2b2lkIHRvSGFzaE1hcChCYWc8RWxlbWVudFR5cGUsIEJhZ1B0clRy
YWl0cz4mIGJhZywgS2V5R2V0dGVyRnVuY3RvciYgZ2V0S2V5LCBIYXNoTWFwPEtleVR5cGUsIEVs
ZW1lbnRUeXBlKiwgSGFzaEFyZz4mIHJlc3VsdCkKIHsKLSAgICBmb3IgKHR5cGVuYW1lIEJhZzxF
bGVtZW50VHlwZT46Oml0ZXJhdG9yIGl0ZXIgPSBiYWcuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIp
IHsKKyAgICBmb3IgKHR5cGVuYW1lIEJhZzxFbGVtZW50VHlwZSwgQmFnUHRyVHJhaXRzPjo6aXRl
cmF0b3IgaXRlciA9IGJhZy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICBFbGVt
ZW50VHlwZSogZWxlbWVudCA9ICppdGVyOwogICAgICAgICBLZXlUeXBlIGtleSA9IGdldEtleSgq
ZWxlbWVudCk7CiAgICAgICAgIHJlc3VsdC5hZGQoa2V5LCBlbGVtZW50KTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1BvaXNvbmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUG9pc29u
ZWQuaAkocmV2aXNpb24gMjI2NTI2KQorKysgU291cmNlL1dURi93dGYvUG9pc29uZWQuaAkod29y
a2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBhc1JlZmVyZW5jZShUIHB0cikgeyByZXR1cm4g
KnB0cjsgfQogCiB9IC8vIG5hbWVzcGFjZSBQb2lzb25lZEltcGxIZWxwZXIKIAorLy8gRklYTUU6
IG9uY2Ugd2UgaGF2ZSBDKysxNywgd2UgY2FuIG1ha2UgdGhlIGtleSBvZiB0eXBlIGF1dG8gYW5k
IHJlbW92ZSB0aGUgbmVlZCBmb3IgS2V5VHlwZS4KIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUs
IEtleVR5cGUga2V5LCB0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19wb2ludGVyPFQ+Ojp2YWx1ZT4+CiBjbGFzcyBQb2lzb25lZEltcGwgewogcHVibGljOgpA
QCAtMjI3LDEzICsyMjgsMjAgQEAgaW5saW5lIHZvaWQgc3dhcChQb2lzb25lZEltcGw8SzEsIGsx
LCBUMQogCiBXVEZfRVhQT1JUX1BSSVZBVEUgdWludHB0cl90IG1ha2VQb2lzb24oKTsKIAorI2lm
IEVOQUJMRShQT0lTT04pCisvLyBGSVhNRTogb25jZSB3ZSBoYXZlIEMrKzE3LCB3ZSBjYW4gbWFr
ZSB0aGlzIGEgbGFtYmRhIGluIG1ha2VDb25zdEV4cHJQb2lzb24oKS4KK2lubGluZSBjb25zdGV4
cHIgdWludHB0cl90IGNvbnN0RXhwclBvaXNvblJhbmRvbSh1aW50cHRyX3Qgc2VlZCkKK3sKKyAg
ICB1aW50cHRyX3QgcmVzdWx0MSA9IHNlZWQgKiA2OTA2OTY5MDY5ICsgMTIzNDU2NzsKKyAgICB1
aW50cHRyX3QgcmVzdWx0MiA9IHNlZWQgKiA4MjUzNzI5ICsgMjM5NjQwMzsKKyAgICByZXR1cm4g
KHJlc3VsdDEgPDwgMykgXiAocmVzdWx0MiA8PCAxNik7Cit9CisjZW5kaWYKKwogaW5saW5lIGNv
bnN0ZXhwciB1aW50cHRyX3QgbWFrZUNvbnN0RXhwclBvaXNvbih1aW50MzJfdCBrZXkpCiB7CiAj
aWYgRU5BQkxFKFBPSVNPTikKLSAgICB1aW50cHRyX3QgdWludHB0cktleSA9IGtleTsKLSAgICB1
aW50cHRyX3QgcG9pc29uMSA9IHVpbnRwdHJLZXkgKiA2OTA2OTY5MDY5ICsgMTIzNDU2NzsKLSAg
ICB1aW50cHRyX3QgcG9pc29uMiA9IHVpbnRwdHJLZXkgKiA4MjUzNzI5ICsgMjM5NjQwMzsKLSAg
ICB1aW50cHRyX3QgcG9pc29uID0gKHBvaXNvbjEgPDwgMykgXiAocG9pc29uMiA8PCAxNik7Cisg
ICAgdWludHB0cl90IHBvaXNvbiA9IGNvbnN0RXhwclBvaXNvblJhbmRvbShrZXkpOwogICAgIHBv
aXNvbiAmPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHhmZmZmKSA8PCA0OCk7IC8vIEVuc3Vy
ZSB0aGF0IHBvaXNvbmVkIGJpdHMgbG9vayBsaWtlIGEgcG9pbnRlci4KICAgICBwb2lzb24gfD0g
KDEgPDwgMik7IC8vIEVuc3VyZSB0aGF0IHBvaXNvbmVkIGJpdHMgY2Fubm90IGJlIDAuCiAgICAg
cmV0dXJuIHBvaXNvbjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCShyZXZpc2lvbiAy
MjY1MjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFJlZkNvdW50ZWRBcnJheV9oCiAjZGVmaW5l
IFJlZkNvdW50ZWRBcnJheV9oCiAKKyNpbmNsdWRlIDx3dGYvRHVtYlB0clRyYWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQzLDIwICs0NCwyMSBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFB0clRyYWl0cyA9IER1bWJQdHJUcmFpdHM8VD4+CiBjbGFzcyBSZWZDb3VudGVkQXJyYXkg
eworICAgIGVudW0gQ29tbW9uQ29weUNvbnN0cnVjdG9yVGFnIHsgQ29tbW9uQ29weUNvbnN0cnVj
dG9yIH07CisKIHB1YmxpYzoKLSAgICBSZWZDb3VudGVkQXJyYXkoKQotICAgICAgICA6IG1fZGF0
YSgwKQotICAgIHsKLSAgICB9CisgICAgUmVmQ291bnRlZEFycmF5KCkgPSBkZWZhdWx0OwogICAg
IAogICAgIFJlZkNvdW50ZWRBcnJheShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKQotICAg
ICAgICA6IG1fZGF0YShvdGhlci5tX2RhdGEpCi0gICAgewotICAgICAgICBpZiAobV9kYXRhKQot
ICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCsrOwotICAg
IH0KKyAgICAgICAgOiBSZWZDb3VudGVkQXJyYXkoQ29tbW9uQ29weUNvbnN0cnVjdG9yLCBvdGhl
cikKKyAgICB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzPgorICAgIFJl
ZkNvdW50ZWRBcnJheShjb25zdCBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBvdGhl
cikKKyAgICAgICAgOiBSZWZDb3VudGVkQXJyYXkoQ29tbW9uQ29weUNvbnN0cnVjdG9yLCBvdGhl
cikKKyAgICB7IH0KIAogICAgIGV4cGxpY2l0IFJlZkNvdW50ZWRBcnJheShzaXplX3Qgc2l6ZSkK
ICAgICB7CkBAIC02NSwxOCArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgbV9kYXRhID0gKHN0YXRpY19jYXN0PEhlYWRlcio+KGZhc3RN
YWxsb2MoSGVhZGVyOjpzaXplKCkgKyBzaXplb2YoVCkgKiBzaXplKSkpLT5wYXlsb2FkKCk7Ci0g
ICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQgPSAxOwotICAgICAg
ICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9IHNpemU7Ci0gICAgICAgIEFT
U0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9PSBzaXplKTsKKyAgICAg
ICAgVCogZGF0YSA9IChzdGF0aWNfY2FzdDxIZWFkZXIqPihmYXN0TWFsbG9jKEhlYWRlcjo6c2l6
ZSgpICsgc2l6ZW9mKFQpICogc2l6ZSkpKS0+cGF5bG9hZCgpOworICAgICAgICBtX2RhdGEgPSBk
YXRhOworICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5yZWZDb3VudCA9IDE7Cisg
ICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPmxlbmd0aCA9IHNpemU7CisgICAgICAg
IEFTU0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5ndGggPT0gc2l6ZSk7CiAgICAg
ICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojppbml0aWFsaXplKGJlZ2luKCksIGVuZCgpKTsK
ICAgICB9CiAKLSAgICBSZWZDb3VudGVkQXJyYXkgY2xvbmUoKSBjb25zdAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE90aGVyVHJhaXRzID0gUHRyVHJhaXRzPgorICAgIFJlZkNvdW50ZWRBcnJheTxU
LCBPdGhlclRyYWl0cz4gY2xvbmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgUmVmQ291bnRlZEFy
cmF5IHJlc3VsdChzaXplKCkpOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJUcmFp
dHM+IHJlc3VsdChzaXplKCkpOworICAgICAgICBjb25zdCBUKiBkYXRhID0gdGhpcy0+ZGF0YSgp
OworICAgICAgICBUKiByZXN1bHREYXRhID0gcmVzdWx0LmRhdGEoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgcmVzdWx0W2ldID0gYXQoaSk7
CisgICAgICAgICAgICByZXN1bHREYXRhW2ldID0gZGF0YVtpXTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKQEAgLTg4LDIwICs5NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fZGF0YSA9IChzdGF0aWNfY2Fz
dDxIZWFkZXIqPihmYXN0TWFsbG9jKEhlYWRlcjo6c2l6ZSgpICsgc2l6ZW9mKFQpICogb3RoZXIu
c2l6ZSgpKSkpLT5wYXlsb2FkKCk7Ci0gICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRh
KS0+cmVmQ291bnQgPSAxOwotICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxl
bmd0aCA9IG90aGVyLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKEhlYWRlcjo6ZnJvbVBheWxvYWQo
bV9kYXRhKS0+bGVuZ3RoID09IG90aGVyLnNpemUoKSk7Ci0gICAgICAgIFZlY3RvclR5cGVPcGVy
YXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwg
bV9kYXRhKTsKLSAgICB9Ci0gICAgCi0gICAgUmVmQ291bnRlZEFycmF5JiBvcGVyYXRvcj0oY29u
c3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIFQqIG9sZERhdGEgPSBt
X2RhdGE7Ci0gICAgICAgIG1fZGF0YSA9IG90aGVyLm1fZGF0YTsKLSAgICAgICAgaWYgKG1fZGF0
YSkKLSAgICAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQrKzsK
LSAgICAgICAgCisgICAgICAgIFQqIGRhdGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVyKj4oZmFzdE1h
bGxvYyhIZWFkZXI6OnNpemUoKSArIHNpemVvZihUKSAqIG90aGVyLnNpemUoKSkpKS0+cGF5bG9h
ZCgpOworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2Fk
KGRhdGEpLT5yZWZDb3VudCA9IDE7CisgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSkt
Pmxlbmd0aCA9IG90aGVyLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKEhlYWRlcjo6ZnJvbVBheWxv
YWQoZGF0YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOworICAgICAgICBWZWN0b3JUeXBlT3Bl
cmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCks
IGRhdGEpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0cyA9
IFB0clRyYWl0cz4KKyAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3Vu
dGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBvdGhlcikKKyAgICB7CisgICAgICAgIFQqIG9sZERh
dGEgPSBkYXRhKCk7CisgICAgICAgIFQqIG90aGVyRGF0YSA9IGNvbnN0X2Nhc3Q8VCo+KG90aGVy
LmRhdGEoKSk7CisgICAgICAgIGlmIChvdGhlckRhdGEpCisgICAgICAgICAgICBIZWFkZXI6OmZy
b21QYXlsb2FkKG90aGVyRGF0YSktPnJlZkNvdW50Kys7CisgICAgICAgIG1fZGF0YSA9IG90aGVy
RGF0YTsKKwogICAgICAgICBpZiAoIW9sZERhdGEpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgIGlmICgtLUhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0YSktPnJlZkNvdW50KQpA
QCAtMTEwLDQ0ICsxMTksNDggQEAgcHVibGljOgogICAgICAgICBmYXN0RnJlZShIZWFkZXI6OmZy
b21QYXlsb2FkKG9sZERhdGEpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLSAgICAK
KworICAgIFJlZkNvdW50ZWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IFJlZkNvdW50ZWRBcnJheSYg
b3RoZXIpIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPTxQdHJUcmFpdHM+KG90aGVyKTsgfQorCiAg
ICAgflJlZkNvdW50ZWRBcnJheSgpCiAgICAgewogICAgICAgICBpZiAoIW1fZGF0YSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKC0tSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEp
LT5yZWZDb3VudCkKKyAgICAgICAgVCogZGF0YSA9IHRoaXMtPmRhdGEoKTsKKyAgICAgICAgaWYg
KC0tSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+cmVmQ291bnQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+OjpkZXN0cnVjdChiZWdpbigpLCBl
bmQoKSk7Ci0gICAgICAgIGZhc3RGcmVlKEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKSk7Cisg
ICAgICAgIGZhc3RGcmVlKEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSkpOwogICAgIH0KICAgICAK
ICAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fZGF0
YSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5
bG9hZChtX2RhdGEpLT5yZWZDb3VudDsKKyAgICAgICAgcmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxv
YWQoZGF0YSgpKS0+cmVmQ291bnQ7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBzaXplKCkgY29u
c3QKICAgICB7CiAgICAgICAgIGlmICghbV9kYXRhKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aDsKKyAgICAg
ICAgcmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSgpKS0+bGVuZ3RoOwogICAgIH0KICAg
ICAKICAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplKCkgKiBzaXplb2Yo
VCk7IH0KICAgICAKLSAgICBUKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgVCogYmVn
aW4oKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBUKiBkYXRhKCkgeyByZXR1cm4gUHRyVHJhaXRz
Ojp1bndyYXAobV9kYXRhKTsgfQorICAgIFQqIGJlZ2luKCkgeyByZXR1cm4gZGF0YSgpOyB9CiAg
ICAgVCogZW5kKCkKICAgICB7CiAgICAgICAgIGlmICghbV9kYXRhKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2RhdGEgKyBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0
YSktPmxlbmd0aDsKKyAgICAgICAgVCogZGF0YSA9IHRoaXMtPmRhdGEoKTsKKyAgICAgICAgcmV0
dXJuIGRhdGEgKyBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5ndGg7CiAgICAgfQogICAg
IAotICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICBjb25z
dCBUKiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIGNvbnN0IFQqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PFJlZkNvdW50ZWRBcnJheSo+KHRoaXMpLT5kYXRh
KCk7IH0KKyAgICBjb25zdCBUKiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVm
Q291bnRlZEFycmF5Kj4odGhpcyktPmJlZ2luKCk7IH0KICAgICBjb25zdCBUKiBlbmQoKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PFJlZkNvdW50ZWRBcnJheSo+KHRoaXMpLT5lbmQoKTsgfQog
ICAgIAogICAgIFQmIGF0KHNpemVfdCBpKQpAQCAtMTY1LDIxICsxNzgsMjYgQEAgcHVibGljOgog
ICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgY29uc3Qg
VCYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KIAotICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKSBjb25zdAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzID0gUHRyVHJhaXRzPgorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBvdGhlcikgY29uc3QK
ICAgICB7Ci0gICAgICAgIGlmIChtX2RhdGEgPT0gb3RoZXIubV9kYXRhKQorICAgICAgICBUKiBk
YXRhID0gY29uc3RfY2FzdDxUKj4odGhpcy0+ZGF0YSgpKTsKKyAgICAgICAgVCogb3RoZXJEYXRh
ID0gY29uc3RfY2FzdDxUKj4ob3RoZXIuZGF0YSgpKTsKKyAgICAgICAgaWYgKGRhdGEgPT0gb3Ro
ZXJEYXRhKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghbV9kYXRhIHx8
ICFvdGhlci5tX2RhdGEpCisgICAgICAgIGlmICghZGF0YSB8fCAhb3RoZXJEYXRhKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBIZWFkZXI6OmZy
b21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aDsKLSAgICAgICAgaWYgKGxlbmd0aCAhPSBIZWFkZXI6
OmZyb21QYXlsb2FkKG90aGVyLm1fZGF0YSktPmxlbmd0aCkKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+bGVuZ3RoOworICAgICAgICBpZiAobGVu
Z3RoICE9IEhlYWRlcjo6ZnJvbVBheWxvYWQob3RoZXJEYXRhKS0+bGVuZ3RoKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX2RhdGFbaV0gIT0gb3RoZXIubV9kYXRhW2ldKQor
ICAgICAgICAgICAgaWYgKGRhdGFbaV0gIT0gb3RoZXJEYXRhW2ldKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmQ291bnRlZEFycmF5JiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gdGhpcy0+b3BlcmF0b3I9PTxQdHJUcmFpdHM+KG90aGVyKTsgfQogICAgIAogcHJp
dmF0ZToKICAgICBzdHJ1Y3QgSGVhZGVyIHsKQEAgLTIwMiwxMyArMjIwLDMyIEBAIHByaXZhdGU6
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxIZWFk
ZXIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihwYXlsb2FkKSAtIHNpemUoKSk7CiAgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgY29uc3QgSGVhZGVyKiBmcm9tUGF5bG9hZChjb25zdCBUKiBw
YXlsb2FkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZnJvbVBheWxvYWQoY29uc3Rf
Y2FzdDxUKj4ocGF5bG9hZCkpOworICAgICAgICB9CiAgICAgfTsKLSAgICAKLSAgICBUKiBtX2Rh
dGE7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0cz4KKyAgICBSZWZDb3VudGVk
QXJyYXkoQ29tbW9uQ29weUNvbnN0cnVjdG9yVGFnLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8VCwg
T3RoZXJUcmFpdHM+JiBvdGhlcikKKyAgICAgICAgOiBtX2RhdGEoY29uc3RfY2FzdDxUKj4ob3Ro
ZXIuZGF0YSgpKSkKKyAgICB7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICBIZWFk
ZXI6OmZyb21QYXlsb2FkKGRhdGEoKSktPnJlZkNvdW50Kys7CisgICAgfQorCisgICAgdHlwZW5h
bWUgUHRyVHJhaXRzOjpTdG9yYWdlVHlwZSBtX2RhdGEgeyBudWxscHRyIH07CiB9OwogCit0ZW1w
bGF0ZTx1aW50MzJfdCBrZXksIHR5cGVuYW1lIFQ+IHN0cnVjdCBDb25zdEV4cHJQb2lzb25lZFB0
clRyYWl0czsKKwordGVtcGxhdGU8dWludDMyX3Qga2V5LCB0eXBlbmFtZSBUPgordXNpbmcgUG9p
c29uZWRSZWZDb3VudGVkQXJyYXkgPSBSZWZDb3VudGVkQXJyYXk8VCwgQ29uc3RFeHByUG9pc29u
ZWRQdHJUcmFpdHM8a2V5LCBUPj47CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCit1c2luZyBXVEY6
OlBvaXNvbmVkUmVmQ291bnRlZEFycmF5OwogdXNpbmcgV1RGOjpSZWZDb3VudGVkQXJyYXk7CiAK
ICNlbmRpZiAvLyBSZWZDb3VudGVkQXJyYXlfaApJbmRleDogU291cmNlL1dURi93dGYvV1RGQXNz
ZXJ0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvV1RGQXNzZXJ0aW9ucy5j
cHAJKHJldmlzaW9uIDIyNjUyNikKKysrIFNvdXJjZS9XVEYvd3RmL1dURkFzc2VydGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCisjaW5jbHVkZSA8d3RmL0JhZy5oPgogI2luY2x1ZGUgPHd0Zi9Qb2lzb25lZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Qb2lzb25lZFVuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBu
YW1lc3BhY2Ugewogc3RydWN0IER1bW15U3RydWN0IHsgfTsKK2NvbnN0IHVpbnQzMl90IGR1bW15
UG9pc29uID0gMHhmZmZmOwogfQogCiAjaWYgRU5BQkxFKFBPSVNPTikKQEAgLTY1LDE1ICs2OCwy
MSBAQCBzdGF0aWNfYXNzZXJ0KCEobWFrZUNvbnN0RXhwclBvaXNvbigxMDAwCiBzdGF0aWNfYXNz
ZXJ0KCEobWFrZUNvbnN0RXhwclBvaXNvbigweGZmZmZmZmZmKSAmIDB4MyksICJlbnN1cmUgYm90
dG9tIDIgYWxpZ25tZW50IGJpdHMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlIGFzIGZsYWcgYml0cy4i
KTsKICNlbmRpZiAvLyBFTkFCTEUoUE9JU09OKQogCitzdGF0aWNfYXNzZXJ0KHNpemVvZihCYWc8
RHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2Yodm9pZCopLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNpemVv
ZihQb2lzb25lZEJhZzxkdW1teVBvaXNvbiwgRHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2Yodm9pZCop
LCAiIik7CisKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJlZjxEdW1teVN0cnVjdD4pID09IHNpemVv
ZihEdW1teVN0cnVjdCopLCAiIik7Ci1zdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFJlZjww
eGZmZmYsIER1bW15U3RydWN0PikgPT0gc2l6ZW9mKER1bW15U3RydWN0KiksICIiKTsKK3N0YXRp
Y19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkUmVmPGR1bW15UG9pc29uLCBEdW1teVN0cnVjdD4pID09
IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7CiAKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJlZlB0
cjxEdW1teVN0cnVjdD4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7Ci1zdGF0aWNfYXNz
ZXJ0KHNpemVvZihQb2lzb25lZFJlZlB0cjwweGZmZmYsIER1bW15U3RydWN0PikgPT0gc2l6ZW9m
KER1bW15U3RydWN0KiksICIiKTsKLQotc3RhdGljX2Fzc2VydChzaXplb2YoUG9pc29uZWRVbmlx
dWVQdHI8MHhmZmZmLCBEdW1teVN0cnVjdD4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7
Ci1zdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFVuaXF1ZVB0cjwweGZmZmYsIGludFtdPikg
PT0gc2l6ZW9mKGludCopLCAiIik7Ci1zdGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFVuaXF1
ZVB0cjwweGZmZmYsIER1bW15U3RydWN0W10+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIp
Oworc3RhdGljX2Fzc2VydChzaXplb2YoUG9pc29uZWRSZWZQdHI8ZHVtbXlQb2lzb24sIER1bW15
U3RydWN0PikgPT0gc2l6ZW9mKER1bW15U3RydWN0KiksICIiKTsKIAorc3RhdGljX2Fzc2VydChz
aXplb2YoUG9pc29uZWRVbmlxdWVQdHI8ZHVtbXlQb2lzb24sIER1bW15U3RydWN0PikgPT0gc2l6
ZW9mKER1bW15U3RydWN0KiksICIiKTsKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKFBvaXNvbmVkVW5p
cXVlUHRyPGR1bW15UG9pc29uLCBpbnRbXT4pID09IHNpemVvZihpbnQqKSwgIiIpOworc3RhdGlj
X2Fzc2VydChzaXplb2YoUG9pc29uZWRVbmlxdWVQdHI8ZHVtbXlQb2lzb24sIER1bW15U3RydWN0
W10+KSA9PSBzaXplb2YoRHVtbXlTdHJ1Y3QqKSwgIiIpOworCitzdGF0aWNfYXNzZXJ0KHNpemVv
ZihSZWZDb3VudGVkQXJyYXk8RHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2Yodm9pZCopLCAiIik7Citz
dGF0aWNfYXNzZXJ0KHNpemVvZihQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxkdW1teVBvaXNvbiwg
RHVtbXlTdHJ1Y3Q+KSA9PSBzaXplb2Yodm9pZCopLCAiIik7CisgICAgCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>