<?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>192782</bug_id>
          
          <creation_ts>2018-12-17 15:48:39 -0800</creation_ts>
          <short_desc>[JSC] Cache bytecode to disk</short_desc>
          <delta_ts>2025-08-27 18:16:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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>
          <dependson>193640</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>ahmedkabo2810</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mathias</cc>
    
    <cc>mcatanzaro</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>1488639</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2018-12-17 15:48:39 -0800</bug_when>
    <thetext>Serialize and cache the new bytecode to disk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488641</commentid>
    <comment_count>1</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2018-12-17 15:49:26 -0800</bug_when>
    <thetext>&lt;rdar://problem/46084932&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488645</commentid>
    <comment_count>2</comment_count>
      <attachid>357490</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2018-12-17 16:01:27 -0800</bug_when>
    <thetext>Created attachment 357490
WIP

Serialization &amp; Deserialization + dummy logic to write to /tmp for testing purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490901</commentid>
    <comment_count>3</comment_count>
      <attachid>358112</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2018-12-27 06:50:17 -0800</bug_when>
    <thetext>Created attachment 358112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491508</commentid>
    <comment_count>4</comment_count>
      <attachid>358275</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-03 13:40:55 -0800</bug_when>
    <thetext>Created attachment 358275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491873</commentid>
    <comment_count>5</comment_count>
      <attachid>358362</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-04 13:50:58 -0800</bug_when>
    <thetext>Created attachment 358362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492299</commentid>
    <comment_count>6</comment_count>
      <attachid>358507</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-07 10:16:12 -0800</bug_when>
    <thetext>Created attachment 358507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492604</commentid>
    <comment_count>7</comment_count>
      <attachid>358594</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-08 08:30:43 -0800</bug_when>
    <thetext>Created attachment 358594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492879</commentid>
    <comment_count>8</comment_count>
      <attachid>358679</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-09 00:02:06 -0800</bug_when>
    <thetext>Created attachment 358679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495005</commentid>
    <comment_count>9</comment_count>
      <attachid>358679</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-15 20:49:14 -0800</bug_when>
    <thetext>Comment on attachment 358679
Patch

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

I think you need to name things more in line with WebKit style. Overall it looks pretty good, I&apos;ll take a closer look after the style update.

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +

Can you put a description of how you designed the hierarchy of CachedTypes? That will probably help people digest this in the future.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:53
&gt; +struct SourceTypeImpl&lt;T, std::enable_if_t&lt;!std::is_fundamental&lt;T&gt;::value &amp;&amp; !std::is_same&lt;typename T::SourceType_, void&gt;::value&gt;&gt; {

why do you need the std::is_fundamental&lt;T&gt;::value? Wouldn&apos;t typename T::SourceType_ fail for any fundamental type?

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:63
&gt; +

You might also want WTF_FORBID_HEAP_ALLOCATION.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:139
&gt; +

Ditto.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:392
&gt; +template&lt;typename T, typename ST = SourceType&lt;T&gt;&gt;

We should use full names for these per WebKit style specifically for things like Source. The T is probably fine since it&apos;s pretty obvious.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:409
&gt; +template&lt;typename T, size_t IC = 0, typename OH = CrashOnOverflow&gt;

Ditto for IC and OH. They should be something like InlineCapacity and OverflowHandler.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:431
&gt; +template&lt;typename Fst, typename Snd&gt;

Ditto here and elsewhere.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:983
&gt; +        if (classInfo == SymbolTable::info()) {

Nit: these could all be:

if (auto* symbolTable = jsDynamicCast&lt;SymbolTable*&gt;(cell))
...

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:1068
&gt; +        Vector&lt;uint8_t, 0, UnsafeVectorOverflow&gt; instructionsVector;

Why does this need do be unsafe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495241</commentid>
    <comment_count>10</comment_count>
      <attachid>358679</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-16 14:42:12 -0800</bug_when>
    <thetext>Comment on attachment 358679
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:53
&gt;&gt; +struct SourceTypeImpl&lt;T, std::enable_if_t&lt;!std::is_fundamental&lt;T&gt;::value &amp;&amp; !std::is_same&lt;typename T::SourceType_, void&gt;::value&gt;&gt; {
&gt; 
&gt; why do you need the std::is_fundamental&lt;T&gt;::value? Wouldn&apos;t typename T::SourceType_ fail for any fundamental type?

The compiler doesn&apos;t like e.g. `int::SourceType_`

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:392
&gt;&gt; +template&lt;typename T, typename ST = SourceType&lt;T&gt;&gt;
&gt; 
&gt; We should use full names for these per WebKit style specifically for things like Source. The T is probably fine since it&apos;s pretty obvious.

Yeah, I started with SourceType, but it conflicted with the top-level type. I&apos;ll change it to Source.

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:409
&gt;&gt; +template&lt;typename T, size_t IC = 0, typename OH = CrashOnOverflow&gt;
&gt; 
&gt; Ditto for IC and OH. They should be something like InlineCapacity and OverflowHandler.

Oops, this one I just copied from WTF/Vector and didn&apos;t even think about it. I&apos;ll fix it.

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:1068
&gt;&gt; +        Vector&lt;uint8_t, 0, UnsafeVectorOverflow&gt; instructionsVector;
&gt; 
&gt; Why does this need do be unsafe?

It has to match the OverflowHandler in the InstructionStream. I&apos;m not sure why that one is unsafe though...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495256</commentid>
    <comment_count>11</comment_count>
      <attachid>359316</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-16 15:01:49 -0800</bug_when>
    <thetext>Created attachment 359316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495715</commentid>
    <comment_count>12</comment_count>
      <attachid>359316</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-17 18:01:20 -0800</bug_when>
    <thetext>Comment on attachment 359316
Patch

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

r- on some more changes. I should have looked closer last time. I&apos;ll take another look once you&apos;ve addressed my comments.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:82
&gt; +        m_offset = WTF::roundUpToMultipleOf(sizeof(void*), m_offset);

does this work on 32-bit? isn&apos;t alignment wrong for things that need to be 8-byte aligned? It seems like this should take an alignment.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:132
&gt; +    uint8_t* m_buffer;

This should be MallocPtr&lt;uint8_t&gt;.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:231
&gt; +template&lt;typename Source, typename Dst&gt;

Dst seems unused?

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:267
&gt; +template&lt;typename Source, typename Dst&gt;

Ditto.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:272
&gt; +    ptrdiff_t offset { s_invalidOffset };

This should be at the bottom of the class per WebKit style.

Also, why is it public? it should probably just have a getter and be prefixed with m_

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:316
&gt; +    bool isEmpty;

Ditto on location/naming/visibility of member.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:329
&gt; +        T* cachedObject = this-&gt;template allocate&lt;T&gt;(encoder);

I think this can just be &quot;allocate&lt;T&gt;(encoder);&quot;

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:344
&gt; +        Source* ptr = operator-&gt;()-&gt;decode(decoder, args...);

Let&apos;s not invoke the operator and make another method get() or something that the operator-&gt; also calls.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:353
&gt; +        return this-&gt;template buffer&lt;T&gt;();

I think this can just be &quot;return buffer&lt;T&gt;();&quot;

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:360
&gt; +        return this-&gt;template buffer&lt;T&gt;();

Ditto.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:366
&gt; +    CachedPtr&lt;T, Source&gt; ptr;

Ditto on naming/visibility/location

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:667
&gt; +struct CachedRareData : public CachedObject&lt;UnlinkedCodeBlock::RareData, CachedRareData&gt; {

Can we name this CachedCodeBlockRaredata? It&apos;s not clear which objects rare data it is right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495756</commentid>
    <comment_count>13</comment_count>
      <attachid>359316</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-18 00:07:39 -0800</bug_when>
    <thetext>Comment on attachment 359316
Patch

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

I&apos;ll give it another full pass to adjust it to WebKit style.

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:329
&gt;&gt; +        T* cachedObject = this-&gt;template allocate&lt;T&gt;(encoder);
&gt; 
&gt; I think this can just be &quot;allocate&lt;T&gt;(encoder);&quot;

Apparently this doesn&apos;t work when the base class is a template, it has to either be `this-&gt;allocate` or `Base&lt;...&gt;::allocate`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495855</commentid>
    <comment_count>14</comment_count>
      <attachid>359489</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-18 08:07:46 -0800</bug_when>
    <thetext>Created attachment 359489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496003</commentid>
    <comment_count>15</comment_count>
      <attachid>359489</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-18 13:21:12 -0800</bug_when>
    <thetext>Comment on attachment 359489
Patch

Attachment 359489 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/10799692

New failing tests:
microbenchmarks/deltablue-varargs.js.bytecode-cache
apiTests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496007</commentid>
    <comment_count>16</comment_count>
      <attachid>359530</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-18 13:29:35 -0800</bug_when>
    <thetext>Created attachment 359530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496257</commentid>
    <comment_count>17</comment_count>
      <attachid>359530</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-19 11:32:11 -0800</bug_when>
    <thetext>Comment on attachment 359530
Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496318</commentid>
    <comment_count>18</comment_count>
      <attachid>359530</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-20 03:20:31 -0800</bug_when>
    <thetext>Comment on attachment 359530
Patch

Clearing flags on attachment: 359530

Committed r240210: &lt;https://trac.webkit.org/changeset/240210&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496319</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-20 03:20:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496487</commentid>
    <comment_count>20</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-20 19:43:00 -0800</bug_when>
    <thetext>I actually think you&apos;ll need to have a shell script version of your runner since iOS can&apos;t run ruby.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496494</commentid>
    <comment_count>21</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-20 19:59:22 -0800</bug_when>
    <thetext>broke iOS tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496511</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-01-20 21:06:48 -0800</bug_when>
    <thetext>Also, be sure to RELEASE_ASSERT_NOT_REACHED() if the end of a function is unreachable:

[2184/4122] Building CXX object Source/JavaScriptCo...Core/unified-sources/UnifiedSource-f2e18ffc-4.cpp.o
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f2e18ffc-4.cpp:1:
../../Source/JavaScriptCore/runtime/CachedTypes.cpp: In member function ‘std::pair&lt;JSC::SourceCodeKey, JSC::UnlinkedCodeBlock*&gt; JSC::GenericCacheEntry::decode(JSC::Decoder&amp;) const’:
../../Source/JavaScriptCore/runtime/CachedTypes.cpp:1985:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496584</commentid>
    <comment_count>23</comment_count>
      <attachid>359688</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-21 06:27:51 -0800</bug_when>
    <thetext>Created attachment 359688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496586</commentid>
    <comment_count>24</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-21 06:43:13 -0800</bug_when>
    <thetext>I converted the `bytecode-cache-test-helper` to bash, just double checking if everything works now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496612</commentid>
    <comment_count>25</comment_count>
      <attachid>359697</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-21 10:20:17 -0800</bug_when>
    <thetext>Created attachment 359697
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496758</commentid>
    <comment_count>26</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-22 07:12:55 -0800</bug_when>
    <thetext>Is this ready to be relanded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496766</commentid>
    <comment_count>27</comment_count>
      <attachid>359697</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-22 08:14:42 -0800</bug_when>
    <thetext>Comment on attachment 359697
Patch

Rejecting attachment 359697 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 359697, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=359697&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=192782&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Processing patch 359697 from bug 192782.
Fetching: https://bugs.webkit.org/attachment.cgi?id=359697
Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 42 diffs from patch file(s).
patching file Source/JavaScriptCore/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WTF/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/JavaScriptCore/CMakeLists.txt
patching file Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
patching file Source/JavaScriptCore/Sources.txt
patching file Source/JavaScriptCore/builtins/BuiltinNames.cpp
patching file Source/JavaScriptCore/builtins/BuiltinNames.h
patching file Source/JavaScriptCore/bytecode/CodeBlock.cpp
patching file Source/JavaScriptCore/bytecode/CodeBlock.h
patching file Source/JavaScriptCore/bytecode/HandlerInfo.h
patching file Source/JavaScriptCore/bytecode/InstructionStream.h
patching file Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h
patching file Source/JavaScriptCore/bytecode/UnlinkedEvalCodeBlock.h
patching file Source/JavaScriptCore/bytecode/UnlinkedFunctionCodeBlock.h
patching file Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h
patching file Source/JavaScriptCore/bytecode/UnlinkedGlobalCodeBlock.h
patching file Source/JavaScriptCore/bytecode/UnlinkedMetadataTable.h
patching file Source/JavaScriptCore/bytecode/UnlinkedModuleProgramCodeBlock.h
patching file Source/JavaScriptCore/bytecode/UnlinkedProgramCodeBlock.h
patching file Source/JavaScriptCore/interpreter/Interpreter.cpp
patching file Source/JavaScriptCore/jsc.cpp
patching file Source/JavaScriptCore/parser/SourceCode.h
patching file Source/JavaScriptCore/parser/SourceCodeKey.h
patching file Source/JavaScriptCore/parser/UnlinkedSourceCode.h
patching file Source/JavaScriptCore/parser/VariableEnvironment.h
patching file Source/JavaScriptCore/runtime/CachedTypes.cpp
patching file Source/JavaScriptCore/runtime/CachedTypes.h
patching file Source/JavaScriptCore/runtime/CodeCache.cpp
patching file Source/JavaScriptCore/runtime/CodeCache.h
patching file Source/JavaScriptCore/runtime/JSBigInt.cpp
patching file Source/JavaScriptCore/runtime/JSBigInt.h
patching file Source/JavaScriptCore/runtime/Options.cpp
Hunk #1 succeeded at 517 (offset -7 lines).
patching file Source/JavaScriptCore/runtime/Options.h
Hunk #1 FAILED at 509.
1 out of 1 hunk FAILED -- saving rejects to file Source/JavaScriptCore/runtime/Options.h.rej
patching file Source/JavaScriptCore/runtime/RegExp.h
patching file Source/JavaScriptCore/runtime/ScopedArgumentsTable.h
patching file Source/JavaScriptCore/runtime/StackFrame.h
patching file Source/JavaScriptCore/runtime/StructureInlines.h
patching file Source/JavaScriptCore/runtime/SymbolTable.h
patching file Source/WTF/wtf/BitVector.h
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh
patching file Tools/Scripts/run-jsc-stress-tests

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/10839393</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496790</commentid>
    <comment_count>28</comment_count>
      <attachid>359741</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-22 09:30:16 -0800</bug_when>
    <thetext>Created attachment 359741
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496802</commentid>
    <comment_count>29</comment_count>
      <attachid>359741</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-22 10:00:21 -0800</bug_when>
    <thetext>Comment on attachment 359741
Patch for landing

Clearing flags on attachment: 359741

Committed r240255: &lt;https://trac.webkit.org/changeset/240255&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496803</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-22 10:00:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496819</commentid>
    <comment_count>31</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-22 10:33:27 -0800</bug_when>
    <thetext>Committed r240257: &lt;https://trac.webkit.org/changeset/240257&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496823</commentid>
    <comment_count>32</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-22 10:51:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/47451479&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357490</attachid>
            <date>2018-12-17 16:01:27 -0800</date>
            <delta_ts>2018-12-27 06:50:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-192782-20181218010023.patch</filename>
            <type>text/plain</type>
            <size>107709</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3Njc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MWRiOTNiY2FhM2M1MjYxNTNkOGY5ZGU1OWVjZGQ1NWEzZjM5YzdmLi4yZjM0NDc5MTcyOTA1NmM1
NzcyYTJjNDNiMGM3ZDBkNTZkYTY4ZmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzkgQEAKKzIwMTgtMTItMTcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5h
bWVzOjpCdWlsdGluTmFtZXMpOgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEhhbmRsZXJJbmZvOjpVbmxpbmtlZEhhbmRsZXJJbmZvKToKKyAgICAg
ICAgKiBieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRT
ZXRDb25zdGFudCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudElk
ZW50aWZpZXJTZXRzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2su
aDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jazo6VW5saW5rZWRHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAqIGJ5
dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jay5oOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAg
KiBwYXJzZXIvU291cmNlQ29kZS5oOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VDb2RlS2V5Lmg6
CisgICAgICAgIChKU0M6OlNvdXJjZUNvZGVLZXk6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAg
ICAqIHBhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvVmFyaWFi
bGVFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkVuY29kZXI6OkVuY29kZXIpOgorICAgICAgICAoSlNDOjpFbmNvZGVy
Ojp+RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnZtKToKKyAgICAgICAgKEpTQzo6
RW5jb2Rlcjo6YnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6c2l6ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkVuY29kZXI6Om1hbGxvY09mZnNldCk6CisgICAgICAgIChKU0M6
OkVuY29kZXI6Om1hbGxvYyk6CisgICAgICAgIChKU0M6OkVuY29kZXI6Om9mZnNldE9mKToKKyAg
ICAgICAgKEpTQzo6RW5jb2Rlcjo6Y2FjaGVQdHIpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpv
ZmZzZXRGb3JQdHIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAg
KEpTQzo6RGVjb2Rlcjo6fkRlY29kZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjp2bSk6Cisg
ICAgICAgIChKU0M6OkRlY29kZXI6Om9mZnNldE9mKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6
Y2FjaGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjphZGRGaW5hbGl6ZXIpOgorICAg
ICAgICAoSlNDOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpkZWNvZGUpOgorICAgICAgICAoSlND
OjpDYWNoZWRPYmplY3Q6OnNpemVPZik6CisgICAgICAgIChKU0M6OkNhY2hlZE9iamVjdDo6Y2Fz
dCk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YnVmZmVyKToKKyAgICAgICAgKEpT
Qzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UHRyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFB0cjo6b3BlcmF0b3ItPik6CisgICAgICAgIChKU0M6OkNhY2hl
ZFB0cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZW5j
b2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFdyaXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9y
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFBh
aXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRVbmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
U3RyaW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZGVj
b2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZElkZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRl
Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjplbmNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
U2ltcGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1w
VGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJs
ZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSYXJlRGF0YTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZEJpdFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQml0VmVjdG9yOjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNh
Y2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRBcnJheTo6ZGVjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpkZWNvZGUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3lt
Ym9sVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEltbXV0YWJsZUJ1
dHRlcmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdFeHA6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpD
YWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQmlnSW50Ojpk
ZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjplbmNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW5z
dHJ1Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE1ldGFk
YXRhVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmRl
Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9yaWdpbjo6ZW5jb2RlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFRleHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNl
UHJvdmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlk
ZXJTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nU291cmNl
UHJvdmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ1NvdXJjZVByb3Zp
ZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRXZWJBc3NlbWJseVNvdXJj
ZVByb3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRXZWJBc3NlbWJseVNvdXJj
ZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92
aWRlcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlkZXI6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTo6ZGVj
b2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UHJvZ3JhbUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkTW9k
dWxlQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRNb2R1bGVDb2RlQmxv
Y2s6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6OmVu
Y29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6OmRlY29kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6
CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9ja1R5cGU+OjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFs
Q29kZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkQ29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJj
ZUNvZGVLZXk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmRl
Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OmVuY29kZSk6CisgICAgICAg
IChKU0M6OkNhY2hlRW50cnk6OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVCbG9j
ayk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
Q2FjaGU6OmdldFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNh
Y2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6
OkNvZGVDYWNoZTo6d3JpdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAg
ICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVN
YXA6OmVuZCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmluZENhY2hlQW5kVXBkYXRl
QWdlKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6Om9mZnNldE9mRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpk
YXRhU3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0JpZ0ludC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVu
dHNUYWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKwogMjAxOC0xMC0z
MSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQ2FudmFzOiBjcmVhdGUgYSBzZXR0aW5nIGZvciBhdXRvLXJlY29yZGluZyBuZXdseSBj
cmVhdGVkIGNvbnRleHRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDg4MWI1MWVkYTc5MTUwMTNmNjIwNWFlNDQ2NGYxNDdjZTdk
M2NjMDAuLjc1YmMyMmExOTI2MmRkZjQ3YTIzZmE5OGY4NWNhZGM3ZTVhMjkwMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTgtMTItMTcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKwogMjAxOC0xMC0zMCAgRG9uIE9sbXN0ZWFkICA8
ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtQbGF5U3RhdGlvbl0gRW5hYmxlIEph
dmFTY3JpcHRDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMzODc4ZTE4MDdk
MmIyYzI1YTg1ZTlmYWNmNzEzNmEzNWE4NmRjMjUuLmU5ZjBkYjg1ODkzNWQyZjQzOTI5NzA1NjBh
ZTk5Mjc0YTQwMzUwZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTM5LDYg
KzMxMzksNyBAQAogCQkxNDM4NkE3MzFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0RXZhbEV4ZWN1
dGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzODZBNzYxREQ2OTg5QzAw
ODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0Mzg2QTc3MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2
YWxFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGlyZWN0
RXZhbEV4ZWN1dGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQzQkUyNjUy
MUM4NTc3NzAwMjBDRDE3IC8qIENhY2hlZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhY2hlZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
NDAwNTFGMEE1MzFEM0IwMDA1RjA2MSAvKiBOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE5vZGUuaDsgcGF0aCA9IHRlc3RzL05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ0MDA1MjAwQTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gTm9kZS5jOyBwYXRoID0gdGVzdHMvTm9kZS5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQwMDc0ODBBNTM2Q0MyMDAwNUYwNjEgLyogTm9k
ZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTm9kZUxpc3QuaDsgcGF0
aCA9IHRlc3RzL05vZGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTY4
LDYgKzY1NjksNyBAQAogCQkJCTlFNzI5NDA5MTkwRjAzMDYwMDFBOTFCNSAvKiBCdW5kbGVQYXRo
Lm1tICovLAogCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywK
IAkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oICovLAor
CQkJCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBDYWNoZWRUeXBlcy5oICovLAogCQkJCTBG
RUMzQzVGMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLywKIAkJCQlCQ0E2
MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5
REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAppbmRleCA0NWRlODJlN2NiNThhMjgzYjIwZmNh
ZTU5ODJiYmI1YzA0ZGE5MTc1Li5hMGY4NTNhNmUwNWRjNDYxOGZmMDRkZTU5MDE5YjFlYTEzZDZi
MzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5h
bWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmNwcApAQCAtNjMsNiArNjMsNyBAQCBCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyhWTSogdm0s
IENvbW1vbklkZW50aWZpZXJzKiBjb21tb25JZGVudGlmaWVycykKICAgICBKU0NfQ09NTU9OX1BS
SVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFJJVkFURV9U
T19QVUJMSUNfRU5UUlkpCiAgICAgSlNDX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElPTl9OQU1FKElO
SVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRF
X0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX1BVQkxJQ19UT19QUklW
QVRFX0VOVFJZKQorICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExf
S05PV05fU1lNQk9MKElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZKQog
ICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9M
KElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQogICAgIG1fcHJpdmF0
ZVRvUHVibGljTWFwLmFkZChtX2RvbGxhclZNUHJpdmF0ZU5hbWUuaW1wbCgpLCAmbV9kb2xsYXJW
TU5hbWUpOwogICAgIG1fcHVibGljVG9Qcml2YXRlTWFwLmFkZChtX2RvbGxhclZNTmFtZS5pbXBs
KCksICZtX2RvbGxhclZNUHJpdmF0ZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGY2NmI4Y2I1MWViNDAyZDg3MzZmZDdkZDBkMmQw
ZTdhMjkyZjQ1MTIuLjg1MzFkYjI2MGJkMDcwMWIzNzE5MDFiNjc0YmZmNWRmMGJmYmQ4NzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTIx
Myw2ICsyMTMsNyBAQCBleHRlcm4gU3ltYm9sSW1wbDo6U3RhdGljU3ltYm9sSW1wbCBwb2x5UHJv
dG9Qcml2YXRlTmFtZTsKIC8vIFdlIGNvbW1hbmRlZXIgdGhlIHB1YmxpY1RvUHJpdmF0ZU1hcCB0
byBhbGxvdyB1cyB0byBjb252ZXJ0IHByaXZhdGUgc3ltYm9sIG5hbWVzIGludG8gdGhlIGFwcHJv
cHJpYXRlIHN5bWJvbC4KIC8vIGUuZy4gQGl0ZXJhdG9yU3ltYm9sIHBvaW50cyB0byBTeW1ib2wu
aXRlcmF0b3IgaW4gdGhpcyBtYXAgcmF0aGVyIHRoYW4gdG8gYSBhbiBhY3R1YWwgcHJpdmF0ZSBu
YW1lLgogLy8gRklYTUU6IFRoaXMgaXMgYSB3ZWlyZCBoYWNrIGFuZCB3ZSBzaG91bGRuJ3QgbmVl
ZCB0byBkbyB0aGlzLgorI2RlZmluZSBJTklUSUFMSVpFX1NZTUJPTF9QUklWQVRFX1RPX1BVQkxJ
Q19FTlRSWShuYW1lKSBtX3ByaXZhdGVUb1B1YmxpY01hcC5hZGQobV8jI25hbWUjI1N5bWJvbC5p
bXBsKCksICZtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIpOwogI2RlZmluZSBJTklU
SUFMSVpFX1NZTUJPTF9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWShuYW1lKSBtX3B1YmxpY1RvUHJp
dmF0ZU1hcC5hZGQobV8jI25hbWUjI1N5bWJvbFByaXZhdGVJZGVudGlmaWVyLmltcGwoKSwgJm1f
IyNuYW1lIyNTeW1ib2wpOwogCiBjbGFzcyBCdWlsdGluTmFtZXMgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBlZGZlYzFhOTNmNDZjYWZlMTgw
MWFkM2ExY2Y0MGMxZDBiMDRkNjJkLi45MWQzOTM2Y2U1MDNkNjYzODkyYWMzZGEyMWNjMjZjNzEy
ZjhjMmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cApAQCAtODYwLDcgKzg2MCw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNl
dFJlZ2lzdGVycyhWTSYgdm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50
cnk+JiBjb25zdGFudHMpCit2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0
UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
PiYgY29uc3RhbnRzKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggYjhm
ODQwYjNlNWI2ZjBkMzc5ZTllZDhkODQ1N2IxMzVmODUxYzA3My4uZDgwNzkyNjEyMDAyMjRmNmUz
OTE5OTViYTYwMDNlNmZmMTlmZDZhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaApAQCAtODkxLDcgKzg5MSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVw
ZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZl
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyk7CiAKLSAgICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYs
IGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwor
ICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgVmVj
dG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKTsKIAogICAgIHZvaWQg
c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4m
IGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggNjZjM2I3Njg3NzU2MjA3NzZkMjYzZmYwOThk
ZTZmNDZiNjZlNzc4My4uN2Y0NjVkMmFlOTM3OTliOTFkZjc4NzE0MTk0ZmNhMzRiZDJhMWExMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKQEAgLTg5
LDYgKzg5LDEwIEBAIHN0cnVjdCBIYW5kbGVySW5mb0Jhc2UgewogfTsKIAogc3RydWN0IFVubGlu
a2VkSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBVbmxpbmtlZEhh
bmRsZXJJbmZvKCkKKyAgICB7CisgICAgfQorCiAgICAgVW5saW5rZWRIYW5kbGVySW5mbyh1aW50
MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLCB1aW50MzJfdCB0YXJnZXQsIEhhbmRsZXJUeXBlIGhh
bmRsZXJUeXBlKQogICAgIHsKICAgICAgICAgdGhpcy0+c3RhcnQgPSBzdGFydDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgKaW5kZXgg
OGFlZGFiYTM0Y2E0YjU5Y2E5YWE5ZDk3NzBlZTZhZDk2NmU2MzdjNC4uOTA4YjU5ODkwODc5NmM2
MTliMzc4YjZkMmJhYzA2NDk4NjY4YjgyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3Mg
SW5zdHJ1Y3Rpb25TdHJlYW0gewogICAgIHVzaW5nIEluc3RydWN0aW9uQnVmZmVyID0gVmVjdG9y
PHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKIAogICAgIGZyaWVuZCBjbGFzcyBJ
bnN0cnVjdGlvblN0cmVhbVdyaXRlcjsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZEluc3RydWN0
aW9uU3RyZWFtOwogcHVibGljOgogICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CmluZGV4IGYwZTlkNjRjODU0YTNmNTM2NzUyZDQ4NzQ2OTJkMjc4NzdkNjcwNDkuLjBiMjM2YTAy
ZDU5ZGMyNThlOTA4OTBjOTI1YTNjODhiMDVjNTA3ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC02NSwxMiArNjUsMTUg
QEAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorc3RydWN0IENh
Y2hlZENvZGVCbG9jazsKKwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsK
IHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVk
IFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5r
ZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTElu
dENhbGxMaW5rSW5mbzsKLXVzaW5nIENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeSA9IHN0ZDo6
cGFpcjxJZGVudGlmaWVyU2V0LCB1bnNpZ25lZD47Cit1c2luZyBDb25zdGFudElkZW50aWZpZXJT
ZXRFbnRyeSA9IHN0ZDo6cGFpcjxJZGVudGlmaWVyU2V0LCB1bnNpZ25lZD47CiAKIHN0cnVjdCBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKQEAg
LTE2OCw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVu
ZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CiAgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsK
LSAgICAgICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmFwcGVuZChDb25zdGFudEluZGVudGlm
aWVyU2V0RW50cnkoc2V0LCByZXN1bHQpKTsKKyAgICAgICAgbV9jb25zdGFudElkZW50aWZpZXJT
ZXRzLmFwcGVuZChDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOwogICAg
IH0KIAogICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6T3RoZXIpCkBAIC0yMDIsNyArMjA1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9saW5rVGltZUNvbnN0YW50c1tpbmRleF07CiAgICAgfQogICAgIGNvbnN0IFZlY3RvcjxXcml0
ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnM7IH0KLSAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJbmRlbnRpZmllclNldEVu
dHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlm
aWVyU2V0czsgfQorICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4m
IGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IHJldHVybiBtX2NvbnN0YW50SWRlbnRpZmllclNl
dHM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0
Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2lu
ZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CkBAIC0zNjcsNiArMzcw
LDEwIEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwg
U3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgRGVidWdnZXJNb2Rl
KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hl
ZENvZGVCbG9ja1R5cGU+CisgICAgVW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYsIFN0cnVjdHVy
ZSosIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tU
eXBlPiYpOworCiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CiAKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKQEAgLTM3OCw2ICszODUsOSBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBCeXRlY29kZVJld3JpdGVyOwogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUdlbmVyYXRv
cjsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hl
ZENvZGVCbG9ja1R5cGU+CisgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRDb2RlQmxvY2s7CisKICAg
ICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImLCBJbnN0cnVjdGlvblN0
cmVhbVdyaXRlciYpOwogCiAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKQEAg
LTQ0NCw3ICs0NTQsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50
aWZpZXJzOwogICAgIFZlY3RvcjxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKICAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3RvcjxD
b25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAg
ICBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVy
U2V0czsKICAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CiAg
ICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaApp
bmRleCA5OTg3YjQzMTMzNDNiNmNiNzUyYTQyMGIzNThkOWEzNjAzMTcyZjI2Li4yYWM3NGFlOThi
NTBjZjIyNjE3YmM5NDI5NDVlMDIzODRkMTJjZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCkBAIC0yOSw2ICsy
OSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgQ2FjaGVkRXZhbENvZGVCbG9jazsK
KwogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xv
YmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJs
b2NrIEJhc2U7CkBAIC01OSwxMSArNjEsMTUgQEAgcHVibGljOgogICAgICAgICBtX2Z1bmN0aW9u
SG9pc3RpbmdDYW5kaWRhdGVzID0gV1RGTW92ZShmdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7
CiAgICAgfQogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVkRXZhbENvZGVCbG9jazsKKwogICAg
IFVubGlua2VkRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAg
ICAgewogICAgIH0KIAorICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhEZWNvZGVyJiwgY29uc3Qg
Q2FjaGVkRXZhbENvZGVCbG9jayYpOworCiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXM7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jay5oCmluZGV4IGI1NDgyYjY1YzhiOGVmYjNhYTMwNmE0MTNiZDU0NjAzNDkx
YTkwMTMuLjZhMzBhYTNkMWU1MmVlOTY5NmNlNzk2MzI1YzUwNTliZmJmOTIyY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3Ry
dWN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOworCiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0
eXBlZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7CkBAIC00NCwxMCArNDYsMTQgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQog
ICAgIHsKICAgICB9CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKERlY29kZXImLCBj
b25zdCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayYpOwogICAgIAogcHVibGljOgogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IGY5ZTg5
Mzk5OTMxMTQ0YzNkNTZjMDU4YjkxMjcyZTJkOWJkODkyNjAuLjM0Y2IwYWE3M2VkYTA2ZDE3MTUy
OWQ2YWJmYzU3ZjliN2FkOGFkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0zOSwxMSAr
MzksMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIERlY29kZXI7CiBjbGFzcyBGdW5j
dGlvbk1ldGFkYXRhTm9kZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIFBhcnNl
ckVycm9yOwogY2xhc3MgU291cmNlUHJvdmlkZXI7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOworc3RydWN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogZW51bSBVbmxpbmtl
ZEZ1bmN0aW9uS2luZCB7CiAgICAgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwKQEAgLTU0LDYgKzU2
LDcgQEAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwogICAgIGZyaWVuZCBj
bGFzcyBWTTsKKyAgICBmcmllbmQgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiAgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CkBAIC0xNDcs
NiArMTUwLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2Vy
U2NyaXB0TW9kZSwgVmFyaWFibGVFbnZpcm9ubWVudCYsICBKU0M6OkRlcml2ZWRDb250ZXh0VHlw
ZSwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CisgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBjb25zdCBD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAogICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zm
c2V0OwogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAppbmRleCAzNDM4
NjJlNjQ3MGZlMWIxYTQyNDg1ZDg3NjllMjc3ZDcyYzE1MDhlLi44Njk5NjE1ODdjZGQ1MTcxN2Zm
NjNjMTY3ZGJmMjQ5YmQ2MGUzODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaApAQCAtMzgsNiArMzgsMTIg
QEAgcHJvdGVjdGVkOgogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGlu
Zm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+
JiBjYWNoZWRDb2RlQmxvY2spCisgICAgICAgIDogQmFzZShkZWNvZGVyLCBzdHJ1Y3R1cmUsIGNh
Y2hlZENvZGVCbG9jaykKKyAgICB7CisgICAgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCmluZGV4IDkz
OGQ2YmNiYjczNWY4MjM5NmE3MTgzNjFkODY3YWQzYThhZjU5NTIuLjY2NGU2NzdiYzNlNWM0M2I4
NGNlNDE2NjEzZjVjZWJjNTYzMWFlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKQEAgLTM1LDYgKzM1LDcgQEAg
Y2xhc3MgTWV0YWRhdGFUYWJsZTsKIGNsYXNzIFVubGlua2VkTWV0YWRhdGFUYWJsZSB7CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3MgTWV0
YWRhdGFUYWJsZTsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZE1ldGFkYXRhVGFibGU7CiAKIHB1
YmxpYzoKICAgICBVbmxpbmtlZE1ldGFkYXRhVGFibGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2suaAppbmRleCAwZTljNWY1YmRkZTZjNzU2MmI2NmEwM2JjMGE5OGM4N2FkYmQ5MzAyLi5l
NjRkY2U2MTI1NDc3ZGQ1YzU0MTJjZWQ5MmJlMjU2MDRiNWYzODQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBEZWNvZGVyOworc3RydWN0IENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKwogY2xhc3MgVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2Nr
IEJhc2U7CkBAIC03NCwxMSArNzcsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAg
ICBmcmllbmQgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSwgTW9kdWxlQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAg
ICB9CiAKKyAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0
IENhY2hlZE1vZHVsZUNvZGVCbG9jayYpOworCiAgICAgaW50IG1fbW9kdWxlRW52aXJvbm1lbnRT
eW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgeyAwIH07CiAKIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2suaAppbmRleCBhZmUyNmFlZDFhNTAzYWIyM2ZkOGY0NDdmOWRlYzJkYzA2Y2E1ODI2
Li45ZDdlNDM1YWZkOGNhNWZiMGE3NGU5NTVkMzYyNTkxMWE2MjhhYTE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVC
bG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgQ2Fj
aGVkUHJvZ3JhbUNvZGVCbG9jazsKKwogY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIGZp
bmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CkBAIC01MCwxMSArNTIsMTUgQEAgcHVi
bGljOgogICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxEZWNsYXJhdGlvbnMo
KSBjb25zdCB7IHJldHVybiBtX2xleGljYWxEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKKyAg
ICBmcmllbmQgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQog
CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRQcm9n
cmFtQ29kZUJsb2NrJik7CisKICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRp
b25zOwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApp
bmRleCBhZDY1MzYxOGI0MjhmY2EwNmJlMDRkZGI2NmMwZjNkMzFkMmIyNjRjLi5lZTFjNGQ5M2I0
NjQyNGQwOTE0Y2U2YjBhYWI3MzMwNTU4MTg5MWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRp
cmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5o
IgpAQCAtODMwLDYgKzgzMSw3IEBAIGZhaWxlZEpTT05QOgogICAgIC8vIEV4ZWN1dGUgdGhlIGNv
ZGU6CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBwcm9n
cmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCktPmV4ZWN1dGUoJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwor
ICAgIHZtLmNvZGVDYWNoZSgpLT53cml0ZSh2bSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4o
cmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaApp
bmRleCA3ODA3Y2U0OWNlMDU2NTY4NjIyM2M0NGYyZGFjMWIwOWFlOTczNGE1Li5lODY0YjhjNTVl
MDgxM2ZmNWQ5OGU1ZThiNjk1OTFiN2ZiZjI5MmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZUNvZGUuaApAQCAtMzMsNiArMzMsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBTb3VyY2VDb2RlIDogcHVibGljIFVubGlua2VkU291cmNlQ29kZSB7CisgICAg
ICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkU291cmNlQ29kZTsKKwogICAgIHB1YmxpYzoKICAgICAg
ICAgU291cmNlQ29kZSgpCiAgICAgICAgICAgICA6IFVubGlua2VkU291cmNlQ29kZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCmluZGV4IGFiZTQxODEy
ZDk5ZDI3Y2Y5MzJlM2EzMGQyZmVmYzA2YTU0ZmY5NDAuLmFkODJhNzNjM2JiMWVhNjM3NGUyZGU5
MmQ2ODVmYWMyZjk2ZmRlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlQ29kZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZUtleS5oCkBAIC0zNyw2ICszNyw4IEBAIGVudW0gY2xhc3MgVHlwZVByb2ZpbGVyRW5h
YmxlZCB7IE5vLCBZZXMgfTsKIGVudW0gY2xhc3MgQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQg
eyBObywgWWVzIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVGbGFncyB7CisgICAgZnJpZW5kIHN0cnVj
dCBDYWNoZWRTb3VyY2VDb2RlS2V5OworCiBwdWJsaWM6CiAgICAgU291cmNlQ29kZUZsYWdzKCkg
PSBkZWZhdWx0OwogCkBAIC03MCw2ICs3Miw4IEBAIHByaXZhdGU6CiB9OwogCiBjbGFzcyBTb3Vy
Y2VDb2RlS2V5IHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFNvdXJjZUNvZGVLZXk7CisKIHB1
YmxpYzoKICAgICBTb3VyY2VDb2RlS2V5KCkKICAgICB7CkBAIC0xMTIsNiArMTE2LDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICYmIHN0cmluZygpID09IG90aGVyLnN0cmluZygpOwogICAgIH0K
IAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VDb2RlS2V5JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKICAgICBz
dHJ1Y3QgSGFzaCB7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNvdXJjZUNv
ZGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBTb3VyY2VDb2RlS2V5JiBhLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBiKSB7IHJl
dHVybiBhID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
VW5saW5rZWRTb3VyY2VDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlu
a2VkU291cmNlQ29kZS5oCmluZGV4IDZlYzU5MGI1M2U2YzljMzI3ZTQyNDRkMGIxMTliMzZkMDk2
ZmM4MWUuLjQ5MGE4OGFhODMxZDFjYjdhZjVmZjFhNmE3MWNlMGNhOTI2N2FmMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaApAQCAt
MzUsNiArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBVbmxpbmtlZFNvdXJj
ZUNvZGUgeworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBD
YWNoZVR5cGU+CisgICAgICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2Rl
U2hhcGU7CisKICAgICBwdWJsaWM6CiAgICAgICAgIFVubGlua2VkU291cmNlQ29kZSgpCiAgICAg
ICAgICAgICA6IG1fcHJvdmlkZXIoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgKaW5kZXggMTI5YjVlYTZiZDliNzI2YTFkOWE0MDEx
ZWY5NjkwZjhjYzZiMGRkMy4uMzZmOWRkZjgxNzc2Y2NiMGE3NmZlZTA4YTBhNThjMzgwN2E5MzVj
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmly
b25tZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmly
b25tZW50LmgKQEAgLTExNiw2ICsxMTYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0V2ZXJ5dGhp
bmdDYXB0dXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7IH0KIAog
cHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ7CisK
ICAgICBNYXAgbV9tYXA7CiAgICAgYm9vbCBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkIHsgZmFsc2Ug
fTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iN2M4Y2MwZTQ5OWI3MzA4ZjA5MmI3NjUxN2M2ZjcxZDJiMjJmZDliCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaApA
QCAtMCwwICsxLDE3ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oIgorI2luY2x1ZGUgIkpTQ2FzdC5oIgorI2luY2x1ZGUgIkpTSW1tdXRhYmxlQnV0dGVyZmx5
LmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKKyNpbmNsdWRlICJTb3VyY2VD
b2RlS2V5LmgiCisjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkTWV0YWRhdGFU
YWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2su
aCIKKyNpbmNsdWRlICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgorCituYW1l
c3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZD4KK3N0
cnVjdCBTb3VyY2VUeXBlSW1wbCB7CisgICAgdXNpbmcgdHlwZSA9IFQ7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RydWN0IFNvdXJjZVR5cGVJbXBsPFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8
IXN0ZDo6aXNfZnVuZGFtZW50YWw8VD46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8dHlwZW5hbWUg
VDo6U291cmNlVHlwZSwgdm9pZD46OnZhbHVlPj4geworICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFt
ZSBUOjpTb3VyY2VUeXBlOworCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgU291
cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJjZVR5cGVJbXBsPFQ+Ojp0eXBlOworCitjbGFzcyBFbmNv
ZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbmNvZGVyKTsKKworcHVibGljOgorICAg
IEVuY29kZXIoVk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisgICAgICAgICwgbV9vZmZzZXQo
MCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyID0gKHVpbnQ4X3QqKWZhc3RaZXJvZWRNYWxsb2Mo
c19tYXhTaXplKTsKKyAgICB9CisKKyAgICB+RW5jb2RlcigpCisgICAgeworICAgICAgICBpZiAo
bV9idWZmZXIpCisgICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgfQorCisgICAg
Vk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldDsgfQorCisgICAgcHRyZGlmZl90IG1hbGxvY09mZnNldCh1bnNpZ25lZCBzaXpl
KQorICAgIHsKKyAgICAgICAgbV9vZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2l6
ZW9mKHZvaWQqKSwgbV9vZmZzZXQpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX29mZnNldCArIHNpemUpIDwgc19tYXhTaXplKTsKKyAgICAgICAgcHRyZGlmZl90IHJlc3Vs
dCA9IG1fb2Zmc2V0OworICAgICAgICBtX29mZnNldCArPSBzaXplOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHVpbnQ4X3QqIG1hbGxvYyh1bnNpZ25lZCBzaXplKQorICAg
IHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IG1hbGxvY09mZnNldChzaXplKTsKKyAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyICsgb2Zmc2V0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgVCogbWFsbG9jKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFQqPihtYWxsb2Moc2l6ZW9mKFQpKSk7CisgICAgfQorCisgICAgcHRyZGlmZl90IG9m
ZnNldE9mKGNvbnN0IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90
KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFkZHJlc3MpOworICAgICAgICBB
U1NFUlQoYWRkciA+PSBtX2J1ZmZlciAmJiBhZGRyIDwgbV9idWZmZXIgKyBtX29mZnNldCk7Cisg
ICAgICAgIHJldHVybiBhZGRyIC0gbV9idWZmZXI7CisgICAgfQorCisgICAgdm9pZCBjYWNoZVB0
cihjb25zdCB2b2lkKiBwdHIsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBtX3B0
clRvT2Zmc2V0TWFwLmFkZChwdHIsIG9mZnNldCk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25h
bDxwdHJkaWZmX3Q+IG9mZnNldEZvclB0cihjb25zdCB2b2lkKiBwdHIpCisgICAgeworICAgICAg
ICBhdXRvIGl0ID0gbV9wdHJUb09mZnNldE1hcC5maW5kKHB0cik7CisgICAgICAgIGlmIChpdCA9
PSBtX3B0clRvT2Zmc2V0TWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVlIH07CisgICAgfQorCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIHNfbWF4U2l6ZSA9IDEwICogTUI7CisKKyAgICBWTSYgbV92bTsKKyAgICB1aW50
OF90KiBtX2J1ZmZlcjsKKyAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7CisgICAgSGFzaE1hcDxjb25z
dCB2b2lkKiwgcHRyZGlmZl90PiBtX3B0clRvT2Zmc2V0TWFwOworfTsKKworY2xhc3MgRGVjb2Rl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rlcik7CisKK3B1YmxpYzoKKyAgICBE
ZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQorICAg
ICAgICA6IG1fdm0odm0pCisgICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAs
IG1fc2l6ZShzaXplKQorI2VuZGlmCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7
CisgICAgfQorCisgICAgfkRlY29kZXIoKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWly
IDogbV9maW5hbGl6ZXJzKQorICAgICAgICAgICAgcGFpci52YWx1ZSgpOworICAgIH0KKworICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KKworICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25z
dCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHB0cik7CisgICAgICAgIEFTU0VSVChhZGRyID49IG1fYmFz
ZUFkZHJlc3MgJiYgYWRkciA8IG1fYmFzZUFkZHJlc3MgKyBtX3NpemUpOworICAgICAgICByZXR1
cm4gYWRkciAtIG1fYmFzZUFkZHJlc3M7CisgICAgfQorCisgICAgdm9pZCBjYWNoZU9mZnNldChw
dHJkaWZmX3Qgb2Zmc2V0LCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBtX29mZnNldFRvUHRy
TWFwLmFkZChvZmZzZXQsIHB0cik7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDx2b2lkKj4g
cHRyRm9yT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBhdXRvIGl0ID0g
bV9vZmZzZXRUb1B0ck1hcC5maW5kKG9mZnNldCk7CisgICAgICAgIGlmIChpdCA9PSBtX29mZnNl
dFRvUHRyTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIHsgaXQtPnZhbHVlIH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGFkZEZpbmFsaXplcihwdHJkaWZmX3Qgb2Zmc2V0LCBjb25zdCBG
dW5jdG9yJiBmbikKKyAgICB7CisgICAgICAgIG1fZmluYWxpemVycy5hZGQob2Zmc2V0LCBmbik7
CisgICAgfQorCitwcml2YXRlOgorICAgIFZNJiBtX3ZtOworICAgIGNvbnN0IHVpbnQ4X3QqIG1f
YmFzZUFkZHJlc3M7CisjaWZuZGVmIE5ERUJVRworICAgIHNpemVfdCBtX3NpemU7CisjZW5kaWYK
KyAgICBIYXNoTWFwPHB0cmRpZmZfdCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7CisgICAgSGFz
aE1hcDxwdHJkaWZmX3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJzOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYgZHN0LCBj
b25zdCBTb3VyY2VUeXBlPFQ+JiBzcmMpCit7CisgICAgZHN0ID0gc3JjOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBT
b3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUJiBkc3QsIGNv
bnN0IFNvdXJjZVR5cGU8VD4mIHNyYykKK3sKKyAgICBkc3QuZW5jb2RlKGVuY29kZXIsIHNyYyk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CitzdGF0aWMgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNv
ZGUoRGVjb2RlciYsIGNvbnN0IFQmIHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uKQor
eworICAgIGRzdCA9IHNyYzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
QXJncz4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlw
ZTxUPj46OnZhbHVlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjLCBTb3Vy
Y2VUeXBlPFQ+JiBkc3QsIEFyZ3MuLi4gYXJncykKK3sKKyAgICBzcmMuZGVjb2RlKGRlY29kZXIs
IGRzdCwgYXJncy4uLik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlLCBUPiBkZWNv
ZGUoRGVjb2RlciYsIFQgc3JjKQoreworICAgIHJldHVybiBzcmM7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJj
ZVR5cGU8VD4+Ojp2YWx1ZSwgU291cmNlVHlwZTxUPj4mJiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgY29uc3QgVCYgc3JjKQoreworICAgIHJldHVybiBzcmMuZGVjb2RlKGRlY29kZXIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2UsIHR5cGVuYW1lIERzdD4KK3N0cnVjdCBDYWNoZWRP
YmplY3QgeworICAgIHVzaW5nIFNvdXJjZVR5cGUgPSBTb3VyY2U7CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgc2l6ZU9mKGNvbnN0IFNvdXJjZSYgc291cmNlKQorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgc2l6ZSA9IDA7CisgICAgICAgIGNvbXB1dGVPdXRPZkxpbmVTaXplKHNpemUsIHNvdXJjZSk7
CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgc3RhdGljIFQmIGNhc3QoVCogc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpz
b3VyY2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVlPj4KKyAgICBzdGF0aWMgVCYg
Y2FzdChUJiBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIGNvbnN0IFQmIGNhc3QoY29uc3Qg
VCogY29uc3Qgc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpzb3VyY2U7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PCFz
dGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVlPj4KKyAgICBzdGF0aWMgY29uc3QgVCYgY2FzdChjb25z
dCBUJiBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgRHN0Pgorc3RydWN0IFZhcmlhYmxl
TGVuZ3RoT2JqZWN0IDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2UsIERzdD4geworcHJpdmF0
ZToKKyAgICBjb25zdGV4cHIgc3RhdGljIHB0cmRpZmZfdCBzX2ludmFsaWRPZmZzZXQgPSBQVFJE
SUZGX01BWDsKK3B1YmxpYzoKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0IHsgc19pbnZhbGlkT2Zmc2V0
IH07CisKKyAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9mZnNldCAhPSBzX2ludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odGhpcykgKyBvZmZzZXQ7CisgICAgfQorCisgICAg
dWludDhfdCogYnVmZmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZzZXQgIT0gc19pbnZh
bGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRo
aXMpICsgb2Zmc2V0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29u
c3QgVCogYnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNvbnN0IFQqPihidWZmZXIoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBUKiBidWZmZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VCo+KGJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICB1aW50OF90KiBhbGxvY2F0ZShFbmNvZGVy
JiBlbmNvZGVyLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRP
ZmZzZXQgPSBlbmNvZGVyLm9mZnNldE9mKCZvZmZzZXQpOworICAgICAgICBwdHJkaWZmX3QgYWxs
b2NhdGlvbk9mZnNldCA9IGVuY29kZXIubWFsbG9jT2Zmc2V0KHNpemUpOworICAgICAgICBvZmZz
ZXQgPSBhbGxvY2F0aW9uT2Zmc2V0IC0gb2Zmc2V0T2Zmc2V0OworICAgICAgICByZXR1cm4gYnVm
ZmVyKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhbGxvY2F0
ZShFbmNvZGVyJiBlbmNvZGVyLCB1bnNpZ25lZCBzaXplID0gMSkKKyAgICB7CisgICAgICAgIGFs
bG9jYXRlKGVuY29kZXIsIHNpemVvZihUW3NpemVdKSk7CisgICAgICAgIHJldHVybiBidWZmZXI8
VD4oKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTb3VyY2VU
eXBlID0gU291cmNlVHlwZTxUPj4KK3N0cnVjdCBDYWNoZWRQdHIgOiBwdWJsaWMgVmFyaWFibGVM
ZW5ndGhPYmplY3Q8U291cmNlVHlwZSosIENhY2hlZFB0cjxUPj4geworICAgIGJvb2wgaXNFbXB0
eTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVR5cGUq
IHNyYykKKyAgICB7CisgICAgICAgIGlzRW1wdHkgPSAhc3JjOworICAgICAgICBpZiAoaXNFbXB0
eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxwdHJk
aWZmX3Q+IG9mZnNldCA9IGVuY29kZXIub2Zmc2V0Rm9yUHRyKHNyYykpIHsKKyAgICAgICAgICAg
IHRoaXMtPm9mZnNldCA9ICpvZmZzZXQgLSBlbmNvZGVyLm9mZnNldE9mKCZ0aGlzLT5vZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVCogY2FjaGVkT2Jq
ZWN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlcik7CisgICAgICAgIGNhY2hl
ZE9iamVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOworICAgICAgICBlbmNvZGVyLmNhY2hlUHRy
KHNyYywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFNvdXJjZVR5cGUqIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHB0cmRpZmZfdCBidWZmZXJP
ZmZzZXQgPSBkZWNvZGVyLm9mZnNldE9mKHRoaXMtPmJ1ZmZlcigpKTsKKyAgICAgICAgaWYgKHN0
ZDo6b3B0aW9uYWw8dm9pZCo+IHB0ciA9IGRlY29kZXIucHRyRm9yT2Zmc2V0KGJ1ZmZlck9mZnNl
dCkpCisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTb3VyY2VUeXBlKj4oKnB0
cik7CisKKyAgICAgICAgU291cmNlVHlwZSogcHRyID0gb3BlcmF0b3ItPigpLT5kZWNvZGUoZGVj
b2RlciwgYXJncy4uLik7CisgICAgICAgIGRlY29kZXIuY2FjaGVPZmZzZXQoYnVmZmVyT2Zmc2V0
LCBwdHIpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIFQqIG9wZXJhdG9yLT4o
KQorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgIH0KKwor
ICAgIGNvbnN0IFQqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1w
dHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnRl
bXBsYXRlIGJ1ZmZlcjxUPigpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFNvdXJjZVR5cGUgPSBTb3VyY2VUeXBlPFQ+Pgorc3RydWN0IENhY2hlZFJlZlB0ciA6
IHB1YmxpYyBDYWNoZWRPYmplY3Q8UmVmUHRyPFNvdXJjZVR5cGU+LCBDYWNoZWRSZWZQdHI8VD4+
IHsKKyAgICBDYWNoZWRQdHI8VCwgU291cmNlVHlwZT4gcHRyOworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlVHlwZSogc3JjKQorICAgIHsKKyAgICAgICAg
cHRyLmVuY29kZShlbmNvZGVyLCBzcmMpOworICAgIH0KKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFJlZlB0cjxTb3VyY2VUeXBlPiBzcmMpCisgICAgeworICAgICAg
ICBlbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8U291cmNl
VHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTb3Vy
Y2VUeXBlKiBkZWNvZGVkUHRyID0gcHRyLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgZGVjb2Rl
ci5hZGRGaW5hbGl6ZXIoZGVjb2Rlci5vZmZzZXRPZihwdHIuYnVmZmVyKCkpLCBbPV0geyBkZXJl
ZklmTm90TnVsbChkZWNvZGVkUHRyKTsgfSk7CisgICAgICAgIHJlZklmTm90TnVsbChkZWNvZGVk
UHRyKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGRlY29kZWRQdHIpOworICAgIH0KKworICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlZlB0cjxTb3VyY2VUeXBlPiYgc3JjKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3JjID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJjZVR5cGUgPSBTb3VyY2VUeXBlPFQ+
Pgorc3RydWN0IENhY2hlZFdyaXRlQmFycmllciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8V3JpdGVC
YXJyaWVyPFNvdXJjZVR5cGU+LCBDYWNoZWRXcml0ZUJhcnJpZXI8VD4+IHsKKyAgICBDYWNoZWRQ
dHI8VCwgU291cmNlVHlwZT4gcHRyOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgV3JpdGVCYXJyaWVyPFNvdXJjZVR5cGU+IHNyYykKKyAgICB7CisgICAgICAgIHB0
ci5lbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8U291cmNlVHlwZT4mIHNyYywgY29uc3QgSlND
ZWxsKiBvd25lcikgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGUqIGRlY29kZWRQdHIg
PSBwdHIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoZGVjb2RlZFB0cikKKyAgICAgICAg
ICAgIHNyYy5zZXQoZGVjb2Rlci52bSgpLCBvd25lciwgZGVjb2RlZFB0cik7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IElDID0gMCwgdHlwZW5hbWUgT0ggPSBDcmFz
aE9uT3ZlcmZsb3c+CitzdHJ1Y3QgQ2FjaGVkVmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3Ro
T2JqZWN0PFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJQywgT0g+LCBDYWNoZWRWZWN0b3I8VCwgSUMs
IE9IPj4geworICAgIHVuc2lnbmVkIHNpemU7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBWZWN0b3I8U291cmNlVHlwZTxUPiwgSUMsIE9IPiYgdmVjdG9yKQorICAg
IHsKKyAgICAgICAgc2l6ZSA9IHZlY3Rvci5zaXplKCk7CisgICAgICAgIFQqIGJ1ZmZlciA9IHRo
aXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIsIHNpemUpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShl
bmNvZGVyLCBidWZmZXJbaV0sIHZlY3RvcltpXSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8
U291cmNlVHlwZTxUPiwgSUMsIE9IPiYgdmVjdG9yLCBBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAg
eworICAgICAgICB2ZWN0b3IucmVzaXplVG9GaXQoc2l6ZSk7CisgICAgICAgIGNvbnN0IFQqIGJ1
ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVy
LCBidWZmZXJbaV0sIHZlY3RvcltpXSwgYXJncy4uLik7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgRnN0LCB0eXBlbmFtZSBTbmQ+CitzdHJ1Y3QgQ2FjaGVkUGFpciA6IHB1YmxpYyBD
YWNoZWRPYmplY3Q8c3RkOjpwYWlyPFNvdXJjZVR5cGU8RnN0PiwgU291cmNlVHlwZTxTbmQ+Piwg
Q2FjaGVkUGFpcjxGc3QsIFNuZD4+IHsKKyAgICBGc3QgZnN0OworICAgIFNuZCBzbmQ7CisKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnBhaXI8U291cmNlVHlw
ZTxGc3Q+LCBTb3VyY2VUeXBlPFNuZD4+JiBwYWlyKQorICAgIHsKKyAgICAgICAgOjpKU0M6OmVu
Y29kZShlbmNvZGVyLCBmc3QsIHN0ZDo6Z2V0PDA+KHBhaXIpKTsKKyAgICAgICAgOjpKU0M6OmVu
Y29kZShlbmNvZGVyLCBzbmQsIHN0ZDo6Z2V0PDE+KHBhaXIpKTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8U291cmNlVHlwZTxGc3Q+LCBTb3Vy
Y2VUeXBlPFNuZD4+JiBwYWlyKSBjb25zdAorICAgIHsKKyAgICAgICAgOjpKU0M6OmRlY29kZShk
ZWNvZGVyLCBmc3QsIHN0ZDo6Z2V0PDA+KHBhaXIpKTsKKyAgICAgICAgOjpKU0M6OmRlY29kZShk
ZWNvZGVyLCBzbmQsIHN0ZDo6Z2V0PDE+KHBhaXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUg
RGVmYXVsdEhhc2g8U291cmNlVHlwZTxLZXk+Pjo6SGFzaCwgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
ID0gSGFzaFRyYWl0czxTb3VyY2VUeXBlPEtleT4+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcg
PSBIYXNoVHJhaXRzPFNvdXJjZVR5cGU8VmFsdWU+Pj4KK3N0cnVjdCBDYWNoZWRIYXNoTWFwIDog
cHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEhhc2hNYXA8U291cmNlVHlwZTxLZXk+LCBTb3Vy
Y2VUeXBlPFZhbHVlPiwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+LCBD
YWNoZWRIYXNoTWFwPEtleSwgVmFsdWUsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnPj4geworCisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFBhaXI8S2V5LCBWYWx1ZT4+IGVu
dHJpZXM7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgorICAgIHVzaW5n
IE1hcCA9IEhhc2hNYXA8SywgViwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmc+OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTWFwPFNvdXJj
ZVR5cGU8S2V5PiwgU291cmNlVHlwZTxWYWx1ZT4+JiBtYXApCisgICAgeworICAgICAgICBlbnRy
aWVzLnNpemUgPSBtYXAuc2l6ZSgpOworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKGVudHJp
ZXMpPiBlbnRyaWVzVmVjdG9yKG1hcC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1hcCkKKyAgICAgICAgICAgIGVudHJpZXNW
ZWN0b3JbaSsrXSA9IHsgaXQua2V5LCBpdC52YWx1ZSB9OworICAgICAgICBlbnRyaWVzLmVuY29k
ZShlbmNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPj4mIG1h
cCkgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50cmllcyk+IGRl
Y29kZWRFbnRyaWVzOworICAgICAgICBlbnRyaWVzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkRW50
cmllcyk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IGRlY29kZWRFbnRyaWVzKQor
ICAgICAgICAgICAgbWFwLnNldChzdGQ6OmdldDwwPihwYWlyKSwgc3RkOjpnZXQ8MT4ocGFpcikp
OworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCA6IHB1YmxpYyBW
YXJpYWJsZUxlbmd0aE9iamVjdDxVbmlxdWVkU3RyaW5nSW1wbCwgQ2FjaGVkVW5pcXVlZFN0cmlu
Z0ltcGw+IHsKKyAgICBib29sIGlzOEJpdCA6IDE7CisgICAgYm9vbCBpc1N5bWJvbCA6IDE7Cisg
ICAgYm9vbCBpc0F0b21pYyA6IDE7CisgICAgdW5zaWduZWQgbGVuZ3RoOworCisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nSW1wbCYgc3RyaW5nKQorICAgIHsK
KyAgICAgICAgaXNBdG9taWMgPSBzdHJpbmcuaXNBdG9taWMoKTsKKyAgICAgICAgaXNTeW1ib2wg
PSBzdHJpbmcuaXNTeW1ib2woKTsKKyAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IGNvbnN0X2Nh
c3Q8U3RyaW5nSW1wbCo+KCZzdHJpbmcpOworICAgICAgICBpZiAoaXNTeW1ib2wpIHsKKyAgICAg
ICAgICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IHN0YXRpY19jYXN0PFN5bWJvbEltcGwqPihpbXBs
KTsKKyAgICAgICAgICAgIGlmICghc3ltYm9sLT5pc051bGxTeW1ib2woKSkgeworICAgICAgICAg
ICAgICAgIElkZW50aWZpZXIgdWlkID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmZW5jb2Rlci52bSgp
LCBzeW1ib2wpOworICAgICAgICAgICAgICAgIGltcGwgPSBlbmNvZGVyLnZtKCkucHJvcGVydHlO
YW1lcy0+bG9va1VwUHVibGljTmFtZSh1aWQpLnN0cmluZygpLmltcGwoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlzOEJpdCA9IGltcGwtPmlzOEJpdCgpOworICAgICAg
ICBsZW5ndGggPSBpbXBsLT5sZW5ndGgoKTsKKworICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBzaXplID0gbGVuZ3RoOworICAgICAg
ICBjb25zdCB2b2lkKiBwYXlsb2FkOworICAgICAgICBpZiAoaXM4Qml0KQorICAgICAgICAgICAg
cGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgcGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAgc2l6ZSAqPSAy
OworICAgICAgICB9CisKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUo
ZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIHBheWxvYWQsIHNpemUpOwor
ICAgIH0KKworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gY3JlYXRlID0gWyZdKGNvbnN0IGF1dG8qIGJ1ZmZl
cikgLT4gVW5pcXVlZFN0cmluZ0ltcGwqIHsKKyAgICAgICAgICAgIGlmICghaXNTeW1ib2wpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZ0ltcGw6OmFkZChidWZmZXIsIGxlbmd0
aCkubGVha1JlZigpOworCisgICAgICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJlN5bWJvbEltcGw6OmNyZWF0ZU51bGxTeW1ib2woKS5sZWFrUmVmKCk7CisKKyAg
ICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZkZWNv
ZGVyLnZtKCksIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIFN0cmluZyBzdHIgPSBkZWNv
ZGVyLnZtKCkucHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoaWRlbnQpLT5zdHJpbmco
KTsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIGltcGwgPSBzdHIucmVsZWFzZUltcGwoKS5nZXQo
KTsKKyAgICAgICAgICAgIEFTU0VSVChpbXBsLT5pc1N5bWJvbCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KGltcGwpOworICAgICAgICB9Owor
CisgICAgICAgIGlmIChpczhCaXQpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlKHRoaXMtPmJ1
ZmZlcjxMQ2hhcj4oKSk7CisgICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVmZmVyPFVDaGFy
PigpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxTdHJpbmdJbXBsLCBDYWNoZWRTdHJpbmdJbXBsPiB7CisgICAgQ2Fj
aGVkVW5pcXVlZFN0cmluZ0ltcGwgdW5pcXVlZFN0cmluZ0ltcGw7CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmdJbXBsJiBpbXBsKQorICAgIHsKKyAgICAg
ICAgdW5pcXVlZFN0cmluZ0ltcGwuZW5jb2RlKGVuY29kZXIsIGltcGwpOworICAgIH0KKworICAg
IFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHVuaXF1ZWRTdHJpbmdJbXBsLmRlY29kZShkZWNvZGVyKTsKKyAgICB9Cit9Owor
CitzdHJ1Y3QgQ2FjaGVkU3RyaW5nIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFN0cmlu
ZywgQ2FjaGVkU3RyaW5nPiB7CisgICAgQ2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJ
bXBsPiBpbXBsOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBpbXBsLmVuY29kZShlbmNvZGVyLCBzdGF0aWNf
Y2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy5pbXBsKCkpKTsKKyAgICB9CisKKyAgICBT
dHJpbmcgZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU3RyaW5nKChSZWZQdHI8U3RyaW5nSW1wbD4paW1wbC5kZWNvZGUoZGVjb2RlcikpOworICAg
IH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmluZyYgZHN0KSBjb25z
dAorICAgIHsKKyAgICAgICAgZHN0ID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0KK307CisKK3N0
cnVjdCBDYWNoZWRJZGVudGlmaWVyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PElkZW50
aWZpZXIsIENhY2hlZElkZW50aWZpZXI+IHsKKyAgICBDYWNoZWRTdHJpbmcgc3RyaW5nOworCisg
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllcikKKyAgICB7CisgICAgICAgIHN0cmluZy5lbmNvZGUoZW5jb2RlciwgaWRlbnRpZmllci5z
dHJpbmcoKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHIgPSBzdHJpbmcuZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBpZiAoc3RyLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIElkZW50
aWZpZXIoKTsKKworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVVpZCgmZGVjb2Rlci52
bSgpLCAoVW5pcXVlZFN0cmluZ0ltcGwqKXN0ci5pbXBsKCkpOworICAgIH0KKworICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElkZW50aWZpZXImIGlkZW50KSBjb25zdAorICAgIHsK
KyAgICAgICAgaWRlbnQgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3N0cnVjdCBDYWNoZWRPcHRpb25hbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0
aE9iamVjdDxzdGQ6Om9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+LCBDYWNoZWRPcHRpb25hbDxUPj4g
eworICAgIGJvb2wgaXNFbXB0eTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8U291cmNlVHlwZTxUPj4mIHNvdXJjZSkKKyAgICB7CisgICAg
ICAgIGlzRW1wdHkgPSAhc291cmNlOworCisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIp
LT5lbmNvZGUoZW5jb2RlciwgKnNvdXJjZSk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxT
b3VyY2VUeXBlPFQ+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
ICAgICByZXR1cm4geyB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKS0+ZGVjb2RlKGRlY29kZXIp
IH07CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpvcHRp
b25hbDxTb3VyY2VUeXBlPFQ+PiYgZHN0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHN0ID0gZGVj
b2RlKGRlY29kZXIpOworICAgIH0KKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VUeXBlPFQ+PiYgc291cmNlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFzb3VyY2UpCisgICAgICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RkOjpudWxs
b3B0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jb2RlKGVuY29kZXIsIHsgKnNvdXJj
ZSB9KTsKKyAgICB9CisKKyAgICBTb3VyY2VUeXBlPFQ+KiBkZWNvZGVBc1B0cihEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+
KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU2ltcGxlSnVt
cFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSwgQ2Fj
aGVkU2ltcGxlSnVtcFRhYmxlPiB7CisgICAgaW50MzJfdCBtaW47CisgICAgQ2FjaGVkVmVjdG9y
PGludDMyX3Q+IGJyYW5jaE9mZnNldHM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlKQorICAgIHsKKyAg
ICAgICAgbWluID0ganVtcFRhYmxlLm1pbjsKKyAgICAgICAgYnJhbmNoT2Zmc2V0cy5lbmNvZGUo
ZW5jb2RlciwganVtcFRhYmxlLmJyYW5jaE9mZnNldHMpOworICAgIH0KKworICAgIHZvaWQgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUp
IGNvbnN0CisgICAgeworICAgICAgICBqdW1wVGFibGUubWluID0gbWluOworICAgICAgICBicmFu
Y2hPZmZzZXRzLmRlY29kZShkZWNvZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAg
fQorfTsKKworc3RydWN0IENhY2hlZFN0cmluZ0p1bXBUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8VW5saW5rZWRTdHJpbmdKdW1wVGFibGUsIENhY2hlZFN0cmluZ0p1bXBUYWJsZT4geworICAg
IENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENhY2hlZFN0cmluZ0ltcGw+LCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZTo6IE9mZnNldExvY2F0aW9uPiBvZmZzZXRUYWJsZTsKKworICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBq
dW1wVGFibGUpCisgICAgeworICAgICAgICBvZmZzZXRUYWJsZS5lbmNvZGUoZW5jb2RlciwganVt
cFRhYmxlLm9mZnNldFRhYmxlKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKSBjb25zdAorICAgIHsK
KyAgICAgICAgb2Zmc2V0VGFibGUuZGVjb2RlKGRlY29kZXIsIGp1bXBUYWJsZS5vZmZzZXRUYWJs
ZSk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFJhcmVEYXRhIDogcHVibGljIENhY2hlZE9i
amVjdDxVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEsIENhY2hlZFJhcmVEYXRhPiB7CisgICAg
Q2FjaGVkVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRsZXJzOworCisg
ICAgLy8gSnVtcCBUYWJsZXMKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkU2ltcGxlSnVtcFRhYmxl
PiBzd2l0Y2hKdW1wVGFibGVzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRTdHJpbmdKdW1wVGFi
bGU+IHN0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICBDYWNoZWRWZWN0b3I8RXhwcmVzc2lv
blJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IGV4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zOworCisg
ICAgQ2FjaGVkSGFzaE1hcDx1bnNpZ25lZCwgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhOjpU
eXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IHR5cGVQcm9maWxlckluZm9NYXA7CisgICAgQ2Fj
aGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG9wUHJvZmlsZUNvbnRyb2xGbG93
Qnl0ZWNvZGVPZmZzZXRzOworCisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEmIHJhcmVEYXRhKQorICAgIHsKKyAgICAg
ICAgZXhjZXB0aW9uSGFuZGxlcnMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fZXhjZXB0aW9u
SGFuZGxlcnMpOworICAgICAgICBzd2l0Y2hKdW1wVGFibGVzLmVuY29kZShlbmNvZGVyLCByYXJl
RGF0YS5tX3N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBzdHJpbmdTd2l0Y2hKdW1wVGFibGVz
LmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAg
ICAgICBleHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEu
bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIHR5cGVQcm9maWxlckluZm9N
YXAuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAg
ICAgIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmVuY29kZShlbmNvZGVyLCBy
YXJlRGF0YS5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTsKKyAgICB9CisK
KyAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhKiByYXJl
RGF0YSA9IG5ldyBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEgeyB9OworICAgICAgICBleGNl
cHRpb25IYW5kbGVycy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxl
cnMpOworICAgICAgICBzd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5kZWNv
ZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAg
IGV4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9l
eHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIHR5cGVQcm9maWxlckluZm9NYXAu
ZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXApOworICAgICAg
ICBvcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5kZWNvZGUoZGVjb2RlciwgcmFy
ZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOworICAgICAgICBy
ZXR1cm4gcmFyZURhdGE7CisgICAgfQorCit9OworCitzdHJ1Y3QgQ2FjaGVkQml0VmVjdG9yIDog
cHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEJpdFZlY3RvciwgQ2FjaGVkQml0VmVjdG9yPiB7
CisgICAgdW5zaWduZWQgc2l6ZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yKQorICAgIHsKKyAgICAgICAgc2l6ZSA9IGJpdFZl
Y3Rvci5zaXplKCk7CisgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHRoaXMtPmFsbG9jYXRlKGVu
Y29kZXIsIHNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBiaXRWZWN0b3IuYml0cygpLCBz
aXplKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgQml0VmVjdG9yJiBiaXRW
ZWN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBiaXRWZWN0b3IuZW5zdXJlU2l6ZShzaXplKTsK
KyAgICAgICAgbWVtY3B5KGJpdFZlY3Rvci5iaXRzKCksIHRoaXMtPmJ1ZmZlcigpLCBzaXplKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoQXJnID0gdHlw
ZW5hbWUgRGVmYXVsdEhhc2g8VD46Okhhc2g+CitzdHJ1Y3QgQ2FjaGVkSGFzaFNldCA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8SGFzaFNldDxTb3VyY2VUeXBlPFQ+LCBIYXNoQXJnPiwgQ2FjaGVkSGFz
aFNldDxULCBIYXNoQXJnPj4geworICAgIENhY2hlZFZlY3RvcjxUPiBlbnRyaWVzOworCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldDxTb3VyY2VUeXBlPFQ+
LCBIYXNoQXJnPiYgc2V0KQorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShlbnRy
aWVzKT4gZW50cmllc1ZlY3RvcihzZXQuc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7
CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IHNldCkKKyAgICAgICAgICAgIGVudHJp
ZXNWZWN0b3JbaSsrXSA9IGl0ZW07CisgICAgICAgIGVudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVu
dHJpZXNWZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IEhhc2hTZXQ8U291cmNlVHlwZTxUPiwgSGFzaEFyZz4mIHNldCkgY29uc3QKKyAgICB7CisgICAg
ICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50cmllcyk+IGVudHJpZXNWZWN0b3I7CisgICAgICAg
IGVudHJpZXMuZGVjb2RlKGRlY29kZXIsIGVudHJpZXNWZWN0b3IpOworICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGl0ZW0gOiBlbnRyaWVzVmVjdG9yKQorICAgICAgICAgICAgc2V0LmFkZChpdGVt
KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkg
OiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnks
IENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiB7CisgICAgdW5zaWduZWQgY29uc3Rh
bnQ7CisgICAgQ2FjaGVkSGFzaFNldDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0lt
cGw+LCBJZGVudGlmaWVyUmVwSGFzaD4gc2V0OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5KQorICAgIHsK
KyAgICAgICAgY29uc3RhbnQgPSBzdGQ6OmdldDwxPihlbnRyeSk7CisgICAgICAgIHNldC5lbmNv
ZGUoZW5jb2Rlciwgc3RkOjpnZXQ8MD4oZW50cnkpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpIGNv
bnN0CisgICAgeworICAgICAgICBzdGQ6OmdldDwxPihlbnRyeSkgPSBjb25zdGFudDsKKyAgICAg
ICAgc2V0LmRlY29kZShkZWNvZGVyLCBzdGQ6OmdldDwwPihlbnRyeSkpOworICAgIH0KK307CisK
K3N0cnVjdCBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IDogcHVibGljIENhY2hlZE9iamVjdDxW
YXJpYWJsZUVudmlyb25tZW50LCBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50PiB7CisKKyAgICBi
b29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkOworICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRy
PENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgVmFyaWFibGVFbnZpcm9ubWVudEVudHJ5LCBJZGVu
dGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiwgVmFy
aWFibGVFbnZpcm9ubWVudEVudHJ5SGFzaFRyYWl0cz4gbWFwOworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52KQorICAgIHsK
KyAgICAgICAgaXNFdmVyeXRoaW5nQ2FwdHVyZWQgPSBlbnYubV9pc0V2ZXJ5dGhpbmdDYXB0dXJl
ZDsKKyAgICAgICAgbWFwLmVuY29kZShlbmNvZGVyLCBlbnYubV9tYXApOworICAgIH0KKworICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudikg
Y29uc3QKKyAgICB7CisgICAgICAgIGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gaXNFdmVy
eXRoaW5nQ2FwdHVyZWQ7CisgICAgICAgIG1hcC5kZWNvZGUoZGVjb2RlciwgZW52Lm1fbWFwKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTb3VyY2VUeXBlID0g
U291cmNlVHlwZTxUPj4KK3N0cnVjdCBDYWNoZWRBcnJheSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0
aE9iamVjdDxTb3VyY2VUeXBlKiwgQ2FjaGVkQXJyYXk8VCwgU291cmNlVHlwZT4+IHsKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VUeXBlKiBhcnJheSwgdW5z
aWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIFQqIGRzdCA9IHRoaXMtPnRlbXBsYXRlIGFsbG9j
YXRlPFQ+KGVuY29kZXIsIHNpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBkc3RbaV0sIGFy
cmF5W2ldKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZv
aWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZVR5cGUqIGFycmF5LCB1bnNpZ25lZCBz
aXplLCBBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBUKiBidWZmZXIg
PSB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIDo6SlNDOjpkZWNvZGUoZGVjb2RlciwgYnVm
ZmVyW2ldLCBhcnJheVtpXSwgYXJncy4uLik7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFNj
b3BlZEFyZ3VtZW50c1RhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxTY29wZWRBcmd1bWVudHNU
YWJsZSwgQ2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU+IHsKKyAgICB1aW50MzJfdCBsZW5ndGg7
CisgICAgQ2FjaGVkQXJyYXk8U2NvcGVPZmZzZXQ+IGFyZ3VtZW50czsKKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNjb3BlZEFyZ3VtZW50c1RhYmxlJiBzY29wZWRB
cmd1bWVudHNUYWJsZSkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHNjb3BlZEFyZ3VtZW50c1Rh
YmxlLm1fbGVuZ3RoOworICAgICAgICBhcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHNjb3BlZEFy
Z3VtZW50c1RhYmxlLm1fYXJndW1lbnRzLmdldCgpLCBsZW5ndGgpOworICAgIH0KKworICAgIFNj
b3BlZEFyZ3VtZW50c1RhYmxlKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7
CisgICAgICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29wZWRBcmd1bWVudHNUYWJsZSA9IFNj
b3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBsZW5ndGgpOworICAgICAg
ICBhcmd1bWVudHMuZGVjb2RlKGRlY29kZXIsIHNjb3BlZEFyZ3VtZW50c1RhYmxlLT5tX2FyZ3Vt
ZW50cy5nZXQoKSwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlZEFyZ3VtZW50c1RhYmxl
OworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTeW1ib2xUYWJsZUVudHJ5IDogcHVibGljIENh
Y2hlZE9iamVjdDxTeW1ib2xUYWJsZUVudHJ5LCBDYWNoZWRTeW1ib2xUYWJsZUVudHJ5PiB7Cisg
ICAgaW50cHRyX3QgYml0czsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTeW1i
b2xUYWJsZUVudHJ5JiBzeW1ib2xUYWJsZUVudHJ5KQorICAgIHsKKyAgICAgICAgYml0cyA9IHN5
bWJvbFRhYmxlRW50cnkubV9iaXRzIHwgU3ltYm9sVGFibGVFbnRyeTo6U2xpbUZsYWc7CisgICAg
fQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYsIFN5bWJvbFRhYmxlRW50cnkmIHN5bWJvbFRh
YmxlRW50cnkpIGNvbnN0CisgICAgeworICAgICAgICBzeW1ib2xUYWJsZUVudHJ5Lm1fYml0cyA9
IGJpdHM7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFN5bWJvbFRhYmxlIDogcHVibGljIENh
Y2hlZE9iamVjdDxTeW1ib2xUYWJsZSwgQ2FjaGVkU3ltYm9sVGFibGU+IHsKKyAgICBDYWNoZWRI
YXNoTWFwPENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIENhY2hlZFN5bWJv
bFRhYmxlRW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxVbmlxdWVk
U3RyaW5nSW1wbD4+LCBTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0cz4gbWFwOworICAgIFNjb3Bl
T2Zmc2V0IG1heFNjb3BlT2Zmc2V0OworICAgIHVuc2lnbmVkIHVzZXNOb25TdHJpY3RFdmFsIDog
MTsKKyAgICB1bnNpZ25lZCBuZXN0ZWRMZXhpY2FsU2NvcGUgOiAxOworICAgIHVuc2lnbmVkIHNj
b3BlVHlwZSA6IDM7CisgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gY2FjaGVkIHRoaXMgZXZl
bnR1YWxseT8KKyAgICAvLyBDYWNoZWRQdHI8U3ltYm9sVGFibGVSYXJlRGF0YT4gcmFyZURhdGE7
CisgICAgQ2FjaGVkUHRyPENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBhcmd1bWVudHM7CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUpCisgICAgeworICAgICAgICBBU1NFUlQoIXN5bWJvbFRhYmxlLm1fcmFyZURhdGEp
OworICAgICAgICBtYXAuZW5jb2RlKGVuY29kZXIsIHN5bWJvbFRhYmxlLm1fbWFwKTsKKyAgICAg
ICAgbWF4U2NvcGVPZmZzZXQgPSBzeW1ib2xUYWJsZS5tX21heFNjb3BlT2Zmc2V0OworICAgICAg
ICB1c2VzTm9uU3RyaWN0RXZhbCA9IHN5bWJvbFRhYmxlLm1fdXNlc05vblN0cmljdEV2YWw7Cisg
ICAgICAgIG5lc3RlZExleGljYWxTY29wZSA9IHN5bWJvbFRhYmxlLm1fbmVzdGVkTGV4aWNhbFNj
b3BlOworICAgICAgICBzY29wZVR5cGUgPSBzeW1ib2xUYWJsZS5tX3Njb3BlVHlwZTsKKyAgICAg
ICAgYXJndW1lbnRzLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX2FyZ3VtZW50cy5nZXQo
KSk7CisgICAgfQorCisgICAgU3ltYm9sVGFibGUqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gU3ltYm9sVGFi
bGU6OmNyZWF0ZShkZWNvZGVyLnZtKCkpOworICAgICAgICBtYXAuZGVjb2RlKGRlY29kZXIsIHN5
bWJvbFRhYmxlLT5tX21hcCk7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX21heFNjb3BlT2Zmc2V0
ID0gbWF4U2NvcGVPZmZzZXQ7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX3VzZXNOb25TdHJpY3RF
dmFsID0gdXNlc05vblN0cmljdEV2YWw7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX25lc3RlZExl
eGljYWxTY29wZSA9IG5lc3RlZExleGljYWxTY29wZTsKKyAgICAgICAgc3ltYm9sVGFibGUtPm1f
c2NvcGVUeXBlID0gc2NvcGVUeXBlOworICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2Nv
cGVkQXJndW1lbnRzVGFibGUgPSBhcmd1bWVudHMuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBp
ZiAoc2NvcGVkQXJndW1lbnRzVGFibGUpCisgICAgICAgICAgICBzeW1ib2xUYWJsZS0+bV9hcmd1
bWVudHMuc2V0KGRlY29kZXIudm0oKSwgc3ltYm9sVGFibGUsIHNjb3BlZEFyZ3VtZW50c1RhYmxl
KTsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlOworICAgIH0KK307CisKK3N0cnVjdCBDYWNo
ZWRKU1ZhbHVlOworc3RydWN0IENhY2hlZEltbXV0YWJsZUJ1dHRlcmZseSA6IHB1YmxpYyBDYWNo
ZWRPYmplY3Q8SlNJbW11dGFibGVCdXR0ZXJmbHksIENhY2hlZEltbXV0YWJsZUJ1dHRlcmZseT4g
eworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU7CisgICAgdW5zaWduZWQgbGVuZ3RoOwor
ICAgIHVuaW9uIHsKKyAgICAgICAgQ2FjaGVkQXJyYXk8ZG91YmxlPiBjYWNoZWREb3VibGVzOwor
ICAgICAgICBDYWNoZWRBcnJheTxDYWNoZWRKU1ZhbHVlLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4+
IGNhY2hlZFZhbHVlczsKKyAgICB9OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgSlNJbW11dGFibGVCdXR0ZXJmbHkmIGltbXV0YWJsZUJ1dHRlcmZseSkKKyAgICB7CisgICAg
ICAgIGxlbmd0aCA9IGltbXV0YWJsZUJ1dHRlcmZseS5sZW5ndGgoKTsKKyAgICAgICAgaW5kZXhp
bmdUeXBlID0gaW1tdXRhYmxlQnV0dGVyZmx5LmluZGV4aW5nTW9kZSgpOyAvLyB0aGlzIGlzIGNv
bmZ1c2luZywgbm90IHN1cmUgd2h5IHdlIGhhdmUgdG8gdXNlIGluZGV4aW5nTW9kZSB2cyBpbmRl
eGluZ1R5cGUKKyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAg
ICAgY2FjaGVkRG91Ymxlcy5lbmNvZGUoZW5jb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LnRvQnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNhY2hlZFZhbHVlcy5lbmNvZGUoZW5jb2RlciwgaW1tdXRhYmxlQnV0
dGVyZmx5LnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGxlbmd0aCk7CisgICAg
fQorCisgICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGltbXV0YWJsZUJ1dHRl
cmZseSA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGUoZGVjb2Rlci52bSgpLCBpbmRleGlu
Z1R5cGUsIGxlbmd0aCk7CisgICAgICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkKKyAg
ICAgICAgICAgIGNhY2hlZERvdWJsZXMuZGVjb2RlKGRlY29kZXIsIGltbXV0YWJsZUJ1dHRlcmZs
eS0+dG9CdXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbGVuZ3RoLCBpbW11
dGFibGVCdXR0ZXJmbHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWNoZWRWYWx1ZXMu
ZGVjb2RlKGRlY29kZXIsIGltbXV0YWJsZUJ1dHRlcmZseS0+dG9CdXR0ZXJmbHkoKS0+Y29udGln
dW91cygpLmRhdGEoKSwgbGVuZ3RoLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICByZXR1
cm4gaW1tdXRhYmxlQnV0dGVyZmx5OworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRSZWdFeHAg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFJlZ0V4cCwgQ2FjaGVkUmVnRXhwPiB7CisgICAgQ2FjaGVk
U3RyaW5nIHBhdHRlcm5TdHJpbmc7CisgICAgUmVnRXhwRmxhZ3MgZmxhZ3M7CisKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWdFeHAmIHJlZ0V4cCkKKyAgICB7Cisg
ICAgICAgIHBhdHRlcm5TdHJpbmcuZW5jb2RlKGVuY29kZXIsIHJlZ0V4cC5tX3BhdHRlcm5TdHJp
bmcpOworICAgICAgICBmbGFncyA9IHJlZ0V4cC5tX2ZsYWdzOworICAgIH0KKworICAgIFJlZ0V4
cCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmcg
cGF0dGVybiB7IHBhdHRlcm5TdHJpbmcuZGVjb2RlKGRlY29kZXIpIH07CisgICAgICAgIHJldHVy
biBSZWdFeHA6OmNyZWF0ZShkZWNvZGVyLnZtKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAgICB9Cit9
OworCitzdHJ1Y3QgQ2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yIDogcHVibGljIENhY2hl
ZE9iamVjdDxUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IsIENhY2hlZFRlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvcj4geworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRTdHJpbmcsIDQ+IHJhd1N0cmluZ3M7
CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZE9wdGlvbmFsPENhY2hlZFN0cmluZz4sIDQ+IGNvb2tl
ZFN0cmluZ3M7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3ImIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcikKKyAgICB7Cisg
ICAgICAgIHJhd1N0cmluZ3MuZW5jb2RlKGVuY29kZXIsIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
ci5yYXdTdHJpbmdzKCkpOworICAgICAgICBjb29rZWRTdHJpbmdzLmVuY29kZShlbmNvZGVyLCB0
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY29va2VkU3RyaW5ncygpKTsKKyAgICB9CisKKyAgICBS
ZWY8VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6U3RyaW5nVmVjdG9y
IGRlY29kZWRSYXdTdHJpbmdzOworICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6Ok9w
dGlvbmFsU3RyaW5nVmVjdG9yIGRlY29kZWRDb29rZWRTdHJpbmdzOworICAgICAgICByYXdTdHJp
bmdzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkUmF3U3RyaW5ncyk7CisgICAgICAgIGNvb2tlZFN0
cmluZ3MuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRDb29rZWRTdHJpbmdzKTsKKyAgICAgICAgcmV0
dXJuIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6Y3JlYXRlKFdURk1vdmUoZGVjb2RlZFJhd1N0
cmluZ3MpLCBXVEZNb3ZlKGRlY29kZWRDb29rZWRTdHJpbmdzKSk7CisgICAgfQorfTsKKworc3Ry
dWN0IENhY2hlZEJpZ0ludCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxKU0JpZ0ludCwg
Q2FjaGVkQmlnSW50PiB7CisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIGJvb2wgc2lnbjsKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIEpTQmlnSW50JiBiaWdJbnQpCisgICAg
eworICAgICAgICBsZW5ndGggPSBiaWdJbnQubGVuZ3RoKCk7CisgICAgICAgIHNpZ24gPSBiaWdJ
bnQuc2lnbigpOworCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBzaXplb2YoSlNCaWdJbnQ6OkRpZ2l0W2xlbmd0aF0p
OworICAgICAgICB0aGlzLT5hbGxvY2F0ZShlbmNvZGVyLCBzaXplKTsKKyAgICAgICAgbWVtY3B5
KHRoaXMtPmJ1ZmZlcigpLCBiaWdJbnQuZGF0YVN0b3JhZ2UoKSwgc2l6ZSk7CisgICAgfQorCisg
ICAgSlNCaWdJbnQqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKGRlY29kZXIu
dm0oKSwgbGVuZ3RoKTsKKyAgICAgICAgYmlnSW50LT5zZXRTaWduKHNpZ24pOworICAgICAgICBt
ZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5idWZmZXIoKSwgc2l6ZW9mKEpTQmln
SW50OjpEaWdpdFtsZW5ndGhdKSk7CisgICAgICAgIHJldHVybiBiaWdJbnQ7CisgICAgfQorfTsK
Kworc3RydWN0IENhY2hlZEpTVmFsdWUgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8V3Jp
dGVCYXJyaWVyPFVua25vd24+LCBDYWNoZWRKU1ZhbHVlPiB7CisgICAgZW51bSBjbGFzcyBFbmNv
ZGVkVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBKU1ZhbHVlLAorICAgICAgICBTeW1ib2xUYWJs
ZSwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBJbW11dGFibGVCdXR0ZXJmbHksCisgICAgICAg
IFJlZ0V4cCwKKyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLAorICAgICAgICBCaWdJ
bnQsCisgICAgfTsKKworICAgIEVuY29kZWRUeXBlIHR5cGU7CisKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4gdmFsdWUpCisgICAg
eworICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZS5nZXQoKTsKKworICAgICAgICBpZiAoIXYuaXND
ZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6
SlNWYWx1ZTsKKyAgICAgICAgICAgICp0aGlzLT5hbGxvY2F0ZTxFbmNvZGVkSlNWYWx1ZT4oZW5j
b2RlcikgPSBKU1ZhbHVlOjplbmNvZGUodik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2LmFzQ2VsbCgpOworICAgICAgICBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbyA9IGNlbGwtPmNsYXNzSW5mbyhlbmNvZGVyLnZtKCkpOworCisg
ICAgICAgIGlmIChjbGFzc0luZm8gPT0gU3ltYm9sVGFibGU6OmluZm8oKSkgeworICAgICAgICAg
ICAgdHlwZSA9IEVuY29kZWRUeXBlOjpTeW1ib2xUYWJsZTsKKyAgICAgICAgICAgIHRoaXMtPmFs
bG9jYXRlPENhY2hlZFN5bWJvbFRhYmxlPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpqc0Nh
c3Q8U3ltYm9sVGFibGUqPihjZWxsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoY2xhc3NJbmZvID09IEpTU3RyaW5nOjppbmZvKCkpIHsKKyAgICAgICAg
ICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6U3RyaW5nOworICAgICAgICAgICAgU3RyaW5nSW1wbCog
aW1wbCA9IGFzU3RyaW5nKGNlbGwpLT50cnlHZXRWYWx1ZSgpLmltcGwoKTsKKyAgICAgICAgICAg
IEFTU0VSVCghaW1wbCB8fCAhaW1wbC0+aXNTeW1ib2woKSk7CisgICAgICAgICAgICB0aGlzLT5h
bGxvY2F0ZTxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVy
LCAqaW1wbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y2xhc3NJbmZvID09IEpTSW1tdXRhYmxlQnV0dGVyZmx5OjppbmZvKCkpIHsKKyAgICAgICAgICAg
IHR5cGUgPSBFbmNvZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OworICAgICAgICAgICAgdGhp
cy0+YWxsb2NhdGU8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PihlbmNvZGVyKS0+ZW5jb2RlKGVu
Y29kZXIsICpqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09IFJlZ0V4cDo6
aW5mbygpKSB7CisgICAgICAgICAgICB0eXBlID0gRW5jb2RlZFR5cGU6OlJlZ0V4cDsKKyAgICAg
ICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFJlZ0V4cD4oZW5jb2RlciktPmVuY29kZShlbmNv
ZGVyLCAqanNDYXN0PFJlZ0V4cCo+KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3I6OmluZm8oKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpUZW1wbGF0ZU9i
amVjdERlc2NyaXB0b3I7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwganNDYXN0PEpTVGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yKj4oY2VsbCktPmRlc2NyaXB0b3IoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09IEpTQmlnSW50
OjppbmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6QmlnSW50OworICAg
ICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkQmlnSW50PihlbmNvZGVyKS0+ZW5jb2RlKGVu
Y29kZXIsICpqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdmFsdWUsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU1Zh
bHVlIHY7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVuY29kZWRUeXBl
OjpKU1ZhbHVlOgorICAgICAgICAgICAgdiA9IEpTVmFsdWU6OmRlY29kZSgqdGhpcy0+YnVmZmVy
PEVuY29kZWRKU1ZhbHVlPigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVu
Y29kZWRUeXBlOjpTeW1ib2xUYWJsZToKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2Fj
aGVkU3ltYm9sVGFibGU+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiBpbXBsID0gdGhpcy0+YnVmZmVyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPigp
LT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICB2ID0gSlNTdHJpbmc6OmNyZWF0ZShkZWNv
ZGVyLnZtKCksIGFkb3B0UmVmKCppbXBsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpJbW11dGFibGVCdXR0ZXJmbHk6CisgICAgICAg
ICAgICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZEltbXV0YWJsZUJ1dHRlcmZseT4oKS0+ZGVjb2Rl
KGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6
OlJlZ0V4cDoKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkUmVnRXhwPigpLT5k
ZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVk
VHlwZTo6VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOgorICAgICAgICAgICAgdiA9IEpTVGVtcGxh
dGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUoZGVjb2Rlci52bSgpLCB0aGlzLT5idWZmZXI8Q2Fj
aGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPigpLT5kZWNvZGUoZGVjb2RlcikpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkJpZ0ludDoKKyAgICAgICAg
ICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkQmlnSW50PigpLT5kZWNvZGUoZGVjb2Rlcik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUuc2V0KGRlY29k
ZXIudm0oKSwgb3duZXIsIHYpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRJbnN0cnVjdGlv
blN0cmVhbSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SW5zdHJ1Y3Rpb25TdHJlYW0sIENhY2hlZElu
c3RydWN0aW9uU3RyZWFtPiB7CisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBpbnN0cnVjdGlvbnM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgc3RyZWFtKQorICAgIHsKKyAgICAgICAg
aW5zdHJ1Y3Rpb25zLmVuY29kZShlbmNvZGVyLCBzdHJlYW0ubV9pbnN0cnVjdGlvbnMpOworICAg
IH0KKworICAgIEluc3RydWN0aW9uU3RyZWFtKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gaW5zdHJ1Y3Rpb25zVmVjdG9yOworICAgICAgICBpbnN0cnVjdGlvbnMuZGVjb2RlKGRlY29k
ZXIsIGluc3RydWN0aW9uc1ZlY3Rvcik7CisgICAgICAgIHJldHVybiBuZXcgSW5zdHJ1Y3Rpb25T
dHJlYW0oV1RGTW92ZShpbnN0cnVjdGlvbnNWZWN0b3IpKTsKKyAgICB9Cit9OworCitzdHJ1Y3Qg
Q2FjaGVkTWV0YWRhdGFUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRNZXRhZGF0
YVRhYmxlLCBDYWNoZWRNZXRhZGF0YVRhYmxlPiB7CisgICAgYm9vbCBoYXNNZXRhZGF0YTsKKyAg
ICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBVbmxpbmtlZE1ldGFkYXRhVGFibGU6OnNfb2Zmc2V0VGFi
bGVFbnRyaWVzPiBtZXRhZGF0YTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBV
bmxpbmtlZE1ldGFkYXRhVGFibGUmIG1ldGFkYXRhVGFibGUpCisgICAgeworICAgICAgICBBU1NF
UlQobWV0YWRhdGFUYWJsZS5tX2lzRmluYWxpemVkKTsKKyAgICAgICAgaGFzTWV0YWRhdGEgPSBt
ZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGE7CisgICAgICAgIGlmICghaGFzTWV0YWRhdGEpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IFVubGlua2VkTWV0
YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM7IGktLTspCisgICAgICAgICAgICBtZXRh
ZGF0YVtpXSA9IG1ldGFkYXRhVGFibGUubV9idWZmZXJbaV07CisgICAgfQorCisgICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYsIFVubGlua2VkTWV0YWRhdGFUYWJsZSYgbWV0YWRhdGFUYWJsZSkgY29u
c3QKKyAgICB7CisgICAgICAgIG1ldGFkYXRhVGFibGUubV9pc0ZpbmFsaXplZCA9IHRydWU7Cisg
ICAgICAgIG1ldGFkYXRhVGFibGUubV9pc0xpbmtlZCA9IGZhbHNlOworICAgICAgICBtZXRhZGF0
YVRhYmxlLm1faGFzTWV0YWRhdGEgPSBoYXNNZXRhZGF0YTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllczsgaS0tOykK
KyAgICAgICAgICAgIG1ldGFkYXRhVGFibGUubV9idWZmZXJbaV0gPSBtZXRhZGF0YVtpXTsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU291cmNlT3JpZ2luIDogcHVibGljIENhY2hlZE9iamVj
dDxTb3VyY2VPcmlnaW4sIENhY2hlZFNvdXJjZU9yaWdpbj4geworICAgIENhY2hlZFN0cmluZyBz
dHJpbmc7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VP
cmlnaW4mIHNvdXJjZU9yaWdpbikKKyAgICB7CisgICAgICAgIHN0cmluZy5lbmNvZGUoZW5jb2Rl
ciwgc291cmNlT3JpZ2luLnN0cmluZygpKTsKKyAgICB9CisKKyAgICBTb3VyY2VPcmlnaW4gZGVj
b2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU291cmNl
T3JpZ2luIHsgc3RyaW5nLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KK307CisKK3N0cnVjdCBD
YWNoZWRUZXh0UG9zaXRpb24gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFRleHRQb3NpdGlvbiwgQ2Fj
aGVkVGV4dFBvc2l0aW9uPiB7CisgICAgaW50IGxpbmU7CisgICAgaW50IGNvbHVtbjsKKworICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImLCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKQorICAgIHsK
KyAgICAgICAgbGluZSA9IHRleHRQb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CisgICAg
ICAgIGNvbHVtbiA9IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKKyAgICB9
CisKKyAgICBUZXh0UG9zaXRpb24gZGVjb2RlKERlY29kZXImKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFRleHRQb3NpdGlvbiB7IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQo
bGluZSksIE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29sdW1uKSB9OworICAgIH0K
K307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBDYWNoZWRUeXBl
Pgorc3RydWN0IENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0
PFNvdXJjZVR5cGUsIENhY2hlZFR5cGU+IHsKKyAgICBib29sIHZhbGlkYXRlZCA6IDE7CisgICAg
Q2FjaGVkU291cmNlT3JpZ2luIHNvdXJjZU9yaWdpbjsKKyAgICBDYWNoZWRTdHJpbmcgdXJsOwor
ICAgIENhY2hlZFN0cmluZyBzb3VyY2VVUkxEaXJlY3RpdmU7CisgICAgQ2FjaGVkU3RyaW5nIHNv
dXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CisgICAgQ2FjaGVkVGV4dFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb247CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VQ
cm92aWRlciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAgICB2YWxpZGF0ZWQgPSBzb3Vy
Y2VQcm92aWRlci5pc1ZhbGlkKCk7CisgICAgICAgIHNvdXJjZU9yaWdpbi5lbmNvZGUoZW5jb2Rl
ciwgc291cmNlUHJvdmlkZXIuc291cmNlT3JpZ2luKCkpOworICAgICAgICB1cmwuZW5jb2RlKGVu
Y29kZXIsIHNvdXJjZVByb3ZpZGVyLnVybCgpKTsKKyAgICAgICAgc291cmNlVVJMRGlyZWN0aXZl
LmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3VyY2VVUkwoKSk7CisgICAgICAgIHNv
dXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNv
dXJjZU1hcHBpbmdVUkwoKSk7CisgICAgICAgIHN0YXJ0UG9zaXRpb24uZW5jb2RlKGVuY29kZXIs
IHNvdXJjZVByb3ZpZGVyLnN0YXJ0UG9zaXRpb24oKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKHZhbGlkYXRlZCkKKyAgICAgICAgICAgIHNvdXJjZVByb3Zp
ZGVyLnNldFZhbGlkKCk7CisgICAgICAgIHNvdXJjZVByb3ZpZGVyLnNldFNvdXJjZVVSTERpcmVj
dGl2ZShzb3VyY2VVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKTsKKyAgICAgICAgc291cmNl
UHJvdmlkZXIuc2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShzb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlLmRlY29kZShkZWNvZGVyKSk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFN0cmlu
Z1NvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8U3RyaW5n
U291cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPiB7CisgICAgdXNpbmcg
QmFzZSA9IENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8U3RyaW5nU291cmNlUHJvdmlkZXIsIENh
Y2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPjsKKworICAgIENhY2hlZFN0cmluZyBzb3VyY2U7CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmdTb3VyY2VQcm92
aWRlciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rl
ciwgc291cmNlUHJvdmlkZXIpOworICAgICAgICBzb3VyY2UuZW5jb2RlKGVuY29kZXIsIHNvdXJj
ZVByb3ZpZGVyLnNvdXJjZSgpLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIFN0cmluZ1NvdXJj
ZVByb3ZpZGVyKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlUHJvdmlkZXJTb3VyY2VU
eXBlIHNvdXJjZVR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmcgZGVjb2RlZFNvdXJj
ZSA9IHNvdXJjZS5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFNvdXJjZU9yaWdpbiBkZWNvZGVk
U291cmNlT3JpZ2luID0gc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgU3Ry
aW5nIGRlY29kZWRVUkwgPSB1cmwuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBUZXh0UG9zaXRp
b24gZGVjb2RlZFN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLmRlY29kZShkZWNvZGVyKTsK
KworICAgICAgICBSZWY8U3RyaW5nU291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gU3Ry
aW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShkZWNvZGVkU291cmNlLCBkZWNvZGVkU291cmNlT3Jp
Z2luLCBkZWNvZGVkVVJMLCBkZWNvZGVkU3RhcnRQb3NpdGlvbiwgc291cmNlVHlwZSk7CisgICAg
ICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VQcm92aWRlci5nZXQoKSk7CisgICAgICAg
IHJldHVybiAmc291cmNlUHJvdmlkZXIubGVha1JlZigpOworICAgIH0KK307CisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCitzdHJ1Y3QgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciA6
IHB1YmxpYyBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlk
ZXIsIENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0g
Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyLCBDYWNo
ZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPjsKKworICAgIENhY2hlZFZlY3Rvcjx1aW50OF90
PiBkYXRhOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQXNz
ZW1ibHlTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAgICBCYXNl
OjplbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIpOworICAgICAgICBkYXRhLmVuY29kZShl
bmNvZGVyLCBzb3VyY2VQcm92aWRlci5kYXRhKCkpOworICAgIH0KKworICAgIFdlYkFzc2VtYmx5
U291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZWREYXRhOworICAgICAgICBTb3VyY2VPcmlnaW4g
ZGVjb2RlZFNvdXJjZU9yaWdpbiA9IHNvdXJjZU9yaWdpbi5kZWNvZGUoZGVjb2Rlcik7CisgICAg
ICAgIFN0cmluZyBkZWNvZGVkVVJMID0gdXJsLmRlY29kZShkZWNvZGVyKTsKKworICAgICAgICBk
YXRhLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkRGF0YSk7CisKKyAgICAgICAgUmVmPFdlYkFzc2Vt
Ymx5U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQcm92
aWRlcjo6Y3JlYXRlKFdURk1vdmUoZGVjb2RlZERhdGEpLCBkZWNvZGVkU291cmNlT3JpZ2luLCBk
ZWNvZGVkVVJMKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVy
LmdldCgpKTsKKworICAgICAgICByZXR1cm4gJnNvdXJjZVByb3ZpZGVyLmxlYWtSZWYoKTsKKyAg
ICB9Cit9OworI2VuZGlmCisKK3N0cnVjdCBDYWNoZWRTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBW
YXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2VQcm92aWRlciwgQ2FjaGVkU291cmNlUHJvdmlkZXI+
IHsKKyAgICBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGUgc291cmNlVHlwZTsKKworICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92
aWRlcikKKyAgICB7CisgICAgICAgIHNvdXJjZVR5cGUgPSBzb3VyY2VQcm92aWRlci5zb3VyY2VU
eXBlKCk7CisgICAgICAgIHN3aXRjaCAoc291cmNlVHlwZSkgeworICAgICAgICBjYXNlIFNvdXJj
ZVByb3ZpZGVyU291cmNlVHlwZTo6UHJvZ3JhbToKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRl
clNvdXJjZVR5cGU6Ok1vZHVsZToKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFN0
cmluZ1NvdXJjZVByb3ZpZGVyPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgU3RyaW5nU291cmNlUHJvdmlkZXImPihzb3VyY2VQcm92aWRlcikpOworICAg
ICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBjYXNlIFNv
dXJjZVByb3ZpZGVyU291cmNlVHlwZTo6V2ViQXNzZW1ibHk6CisgICAgICAgICAgICB0aGlzLT5h
bGxvY2F0ZTxDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPihlbmNvZGVyKS0+ZW5jb2Rl
KGVuY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRl
ciY+KHNvdXJjZVByb3ZpZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFNvdXJjZVByb3ZpZGVyKiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc291cmNlVHlwZSkgeworICAgICAg
ICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6UHJvZ3JhbToKKyAgICAgICAgY2FzZSBT
b3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZToKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LT5idWZmZXI8Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+KCktPmRlY29kZShkZWNvZGVyLCBz
b3VyY2VUeXBlKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGNhc2UgU291cmNl
UHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LT5idWZmZXI8Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2RlKGRlY29k
ZXIpOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgU291cmNlVHlwZSwgdHlwZW5hbWUgQ2FjaGVUeXBlPgorc3RydWN0IENhY2hlZFVubGlua2Vk
U291cmNlQ29kZVNoYXBlIDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2VUeXBlLCAgQ2FjaGVU
eXBlPiB7CisgICAgQ2FjaGVkUHRyPENhY2hlZFNvdXJjZVByb3ZpZGVyPiBwcm92aWRlcjsKKyAg
ICBpbnQgc3RhcnRPZmZzZXQ7CisgICAgaW50IGVuZE9mZnNldDsKKworICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkU291cmNlQ29kZSYgc291cmNlQ29kZSkK
KyAgICB7CisgICAgICAgIHByb3ZpZGVyLmVuY29kZShlbmNvZGVyLCBzb3VyY2VDb2RlLm1fcHJv
dmlkZXIuZ2V0KCkpOworICAgICAgICBzdGFydE9mZnNldCA9IHNvdXJjZUNvZGUuc3RhcnRPZmZz
ZXQoKTsKKyAgICAgICAgZW5kT2Zmc2V0ID0gc291cmNlQ29kZS5lbmRPZmZzZXQoKTsKKyAgICB9
CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUpIGNvbnN0CisgICAgeworICAgICAgICBzb3VyY2VDb2RlLm1fcHJvdmlkZXIg
PSBwcm92aWRlci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIHNvdXJjZUNvZGUubV9zdGFydE9m
ZnNldCA9IHN0YXJ0T2Zmc2V0OworICAgICAgICBzb3VyY2VDb2RlLm1fZW5kT2Zmc2V0ID0gZW5k
T2Zmc2V0OworICAgIH0KK307CisKKworc3RydWN0IENhY2hlZFVubGlua2VkU291cmNlQ29kZSA6
IHB1YmxpYyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxVbmxpbmtlZFNvdXJjZUNvZGUs
IENhY2hlZFVubGlua2VkU291cmNlQ29kZT4geyB9OworCitzdHJ1Y3QgQ2FjaGVkU291cmNlQ29k
ZSA6IHB1YmxpYyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxTb3VyY2VDb2RlLCBDYWNo
ZWRTb3VyY2VDb2RlPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZFVubGlua2VkU291cmNlQ29k
ZVNoYXBlPFNvdXJjZUNvZGUsIENhY2hlZFNvdXJjZUNvZGU+OworCisgICAgaW50IGZpcnN0TGlu
ZTsKKyAgICBpbnQgc3RhcnRDb2x1bW47CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAgQmFzZTo6
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZUNvZGUpOworICAgICAgICBmaXJzdExpbmUgPSBzb3VyY2VD
b2RlLmZpcnN0TGluZSgpLnplcm9CYXNlZEludCgpOworICAgICAgICBzdGFydENvbHVtbiA9IHNv
dXJjZUNvZGUuc3RhcnRDb2x1bW4oKS56ZXJvQmFzZWRJbnQoKTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZUNvZGUpOworICAgICAg
ICBzb3VyY2VDb2RlLm1fZmlyc3RMaW5lID0gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZElu
dChmaXJzdExpbmUpOworICAgICAgICBzb3VyY2VDb2RlLm1fc3RhcnRDb2x1bW4gPSBPcmRpbmFs
TnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KHN0YXJ0Q29sdW1uKTsKKyAgICB9Cit9OworCitzdHJ1
Y3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSwgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPiB7CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsK
KyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZGVjb2RlKERlY29kZXImKSBjb25zdDsK
KworICAgIHVuc2lnbmVkIGZpcnN0TGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBsaW5lQ291bnQ7
CisgICAgdW5zaWduZWQgdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKKyAgICB1bnNpZ25lZCB1
bmxpbmtlZEJvZHlTdGFydENvbHVtbjsKKyAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1
bW47CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3Ro
OworICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCB0eXBl
UHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgdHlwZVByb2ZpbGluZ0VuZE9mZnNl
dDsKKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudDsKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXM7CisgICAgU291cmNlUGFyc2VNb2RlIHNvdXJjZVBhcnNlTW9kZTsKKyAgICB1bnNpZ25lZCBp
c0luU3RyaWN0Q29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgaGFzQ2FwdHVyZWRWYXJpYWJsZXMg
OiAxOworICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICB1bnNpZ25lZCBp
c0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQgY29uc3Ry
dWN0QWJpbGl0eTogMTsKKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQgOiAyOworICAgIHVu
c2lnbmVkIGZ1bmN0aW9uTW9kZSA6IDI7IC8vIEZ1bmN0aW9uTW9kZQorICAgIHVuc2lnbmVkIHNj
cmlwdE1vZGU6IDE7IC8vIEpTUGFyc2VyU2NyaXB0TW9kZQorICAgIHVuc2lnbmVkIHN1cGVyQmlu
ZGluZyA6IDE7CisgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlOiAyOworCisgICAgQ2Fj
aGVkU291cmNlQ29kZSBjbGFzc1NvdXJjZTsKKworICAgIENhY2hlZElkZW50aWZpZXIgbmFtZTsK
KyAgICBDYWNoZWRJZGVudGlmaWVyIGVjbWFOYW1lOworICAgIENhY2hlZElkZW50aWZpZXIgaW5m
ZXJyZWROYW1lOworCisgICAgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudCBwYXJlbnRTY29wZVRE
WlZhcmlhYmxlczsKKworICAgIENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkNvZGVC
bG9jaywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxs
OworICAgIENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkNvZGVCbG9jaywgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jaz4gdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxv
Y2tUeXBlPgorc3RydWN0IENhY2hlZENvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8Q29k
ZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT4geworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayYpOworICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
LCBVbmxpbmtlZENvZGVCbG9jayYpIGNvbnN0OworCisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNS
ZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcjsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisKKyAgICB1bnNpZ25lZCB1c2VzRXZhbCA6
IDE7CisgICAgdW5zaWduZWQgaXNTdHJpY3RNb2RlIDogMTsKKyAgICB1bnNpZ25lZCBpc0NvbnN0
cnVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBoYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CisgICAg
dW5zaWduZWQgaXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAgIHVuc2lnbmVkIHN1cGVyQmluZGlu
ZyA6IDE7CisgICAgdW5zaWduZWQgc2NyaXB0TW9kZTogMTsKKyAgICB1bnNpZ25lZCBpc0Fycm93
RnVuY3Rpb25Db250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCBpc0NsYXNzQ29udGV4dCA6IDE7Cisg
ICAgdW5zaWduZWQgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyA6IDE7CisgICAgdW5z
aWduZWQgY29uc3RydWN0b3JLaW5kIDogMjsKKyAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5
cGUgOiAyOworICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlwZSA6IDI7CisgICAgdW5zaWduZWQg
aGFzVGFpbENhbGxzIDogMTsKKworICAgIHVuc2lnbmVkIGxpbmVDb3VudDsKKyAgICB1bnNpZ25l
ZCBlbmRDb2x1bW47CisKKyAgICBpbnQgbnVtVmFyczsKKyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxz
OworICAgIGludCBudW1QYXJhbWV0ZXJzOworCisgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzOwor
ICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGU7CisgICAgQ29kZVR5cGUgY29kZVR5cGU7CisK
KyAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBMaW5rVGltZUNvbnN0YW50Q291bnQ+IGxpbmtUaW1l
Q29uc3RhbnRzOworICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbWV0YWRhdGE7CisKKyAgICBDYWNo
ZWRPcHRpb25hbDxDYWNoZWRSYXJlRGF0YT4gcmFyZURhdGE7CisKKyAgICBDYWNoZWRTdHJpbmcg
c291cmNlVVJMRGlyZWN0aXZlOworICAgIENhY2hlZFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlOworCisgICAgQ2FjaGVkUHRyPENhY2hlZEluc3RydWN0aW9uU3RyZWFtPiBpbnN0cnVj
dGlvbnM7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IGp1bXBU
YXJnZXRzOworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSlNWYWx1ZT4g
Y29uc3RhbnRSZWdpc3RlcnM7CisgICAgQ2FjaGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbj4gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOworICAgIENhY2hlZFZlY3Rv
cjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBleHByZXNzaW9uSW5mbzsKKyAgICBDYWNoZWRIYXNoTWFw
PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD4gb3V0T2ZMaW5lSnVtcFRhcmdldHM7CisK
KyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IGNvbnN0
YW50SWRlbnRpZmllclNldHM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXI+IGlk
ZW50aWZpZXJzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRCaXRWZWN0b3I+IGJpdFZlY3RvcnM7
CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkV4ZWN1
dGFibGU+PiBmdW5jdGlvbkRlY2xzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJp
ZXI8Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4gZnVuY3Rpb25FeHByczsKK307CisKK3N0cnVj
dCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2ssIENhY2hlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyBC
YXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaywgQ2FjaGVkUHJv
Z3JhbUNvZGVCbG9jaz47CisgICAgdXNpbmcgQmFzZTo6ZW5jb2RlOworCisgICAgQ2FjaGVkVmFy
aWFibGVFbnZpcm9ubWVudCB2YXJEZWNsYXJhdGlvbnM7CisgICAgQ2FjaGVkVmFyaWFibGVFbnZp
cm9ubWVudCBsZXhpY2FsRGVjbGFyYXRpb25zOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAg
eworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKKyAgICAgICAgdmFy
RGVjbGFyYXRpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV92YXJEZWNsYXJhdGlvbnMp
OworICAgICAgICBsZXhpY2FsRGVjbGFyYXRpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9sZXhpY2FsRGVjbGFyYXRpb25zKTsKKyAgICB9CisKKyAgICBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5m
aW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rl
ciwgKmNvZGVCbG9jayk7CisgICAgICAgIHZhckRlY2xhcmF0aW9ucy5kZWNvZGUoZGVjb2Rlciwg
Y29kZUJsb2NrLT5tX3ZhckRlY2xhcmF0aW9ucyk7CisgICAgICAgIGxleGljYWxEZWNsYXJhdGlv
bnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV9sZXhpY2FsRGVjbGFyYXRpb25zKTsKKyAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkTW9kdWxl
Q29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2ssIENhY2hlZE1vZHVsZUNvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBDYWNo
ZWRDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLCBDYWNoZWRNb2R1bGVD
b2RlQmxvY2s+OworICAgIHVzaW5nIEJhc2U6OmVuY29kZTsKKworICAgIGludCBtb2R1bGVFbnZp
cm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVC
bG9jayk7CisgICAgICAgIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lz
dGVyT2Zmc2V0ID0gY29kZUJsb2NrLm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0
YW50UmVnaXN0ZXJPZmZzZXQ7CisgICAgfQorCisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCku
aGVhcCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7Cisg
ICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAg
QmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICBjb2RlQmxvY2stPm1f
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBtb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKyAgICAgICAg
cmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkRXZhbENvZGVCbG9j
ayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrLCBDYWNoZWRF
dmFsQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtl
ZEV2YWxDb2RlQmxvY2ssIENhY2hlZEV2YWxDb2RlQmxvY2s+OworICAgIHVzaW5nIEJhc2U6OmVu
Y29kZTsKKworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4gdmFyaWFibGVzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVy
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXM7CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBj
b2RlQmxvY2spOworICAgICAgICB2YXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X3ZhcmlhYmxlcyk7CisgICAgICAgIGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzLmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7CisgICAgfQor
CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPihkZWNvZGVyLnZt
KCkuaGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAg
IGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6
ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICB2YXJpYWJsZXMuZGVjb2RlKGRl
Y29kZXIsIGNvZGVCbG9jay0+bV92YXJpYWJsZXMpOworICAgICAgICBmdW5jdGlvbkhvaXN0aW5n
Q2FuZGlkYXRlcy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2Z1bmN0aW9uSG9pc3RpbmdD
YW5kaWRhdGVzKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9OworCitzdHJ1
Y3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2ssIENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrPiB7CisgICAgdXNp
bmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLCBDYWNo
ZWRGdW5jdGlvbkNvZGVCbG9jaz47CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAg
ICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KGRlY29kZXIu
dm0oKS5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7Cisg
ICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAg
QmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICByZXR1cm4gY29kZUJs
b2NrOworICAgIH0KK307CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
azo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNo
ZWRGdW5jdGlvbkNvZGVCbG9jayYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVy
LCBkZWNvZGVyLnZtKCkudW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
Y2FjaGVkQ29kZUJsb2NrKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IENh
Y2hlZENvZGVCbG9ja1R5cGVJbXBsOworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJs
b2NrVHlwZUltcGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgdHlwZSA9
IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVk
Q29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAg
dXNpbmcgdHlwZSA9IENhY2hlZE1vZHVsZUNvZGVCbG9jazsKK307CisKK3RlbXBsYXRlPD4KK3N0
cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IHsKKyAg
ICB1c2luZyB0eXBlID0gQ2FjaGVkRXZhbENvZGVCbG9jazsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit1c2luZyBDYWNoZWRDb2RlQmxvY2tUeXBlID0gdHlwZW5hbWUgQ2FjaGVkQ29kZUJs
b2NrVHlwZUltcGw8VD46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUs
IHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29k
ZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVC
bG9ja1R5cGU+JiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIudm0oKSwgc3Ry
dWN0dXJlKQorICAgICwgbV9pbnN0cnVjdGlvbnMoY2FjaGVkQ29kZUJsb2NrLmluc3RydWN0aW9u
cy5kZWNvZGUoZGVjb2RlcikpCisgICAgLCBtX2xpdmVuZXNzKG51bGxwdHIpCisgICAgLCBtX3Ro
aXNSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2sudGhpc1JlZ2lzdGVyKQorICAgICwgbV9zY29wZVJl
Z2lzdGVyKGNhY2hlZENvZGVCbG9jay5zY29wZVJlZ2lzdGVyKQorICAgICwgbV9nbG9iYWxPYmpl
Y3RSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2suZ2xvYmFsT2JqZWN0UmVnaXN0ZXIpCisKKyAgICAs
IG1fc291cmNlVVJMRGlyZWN0aXZlKGNhY2hlZENvZGVCbG9jay5zb3VyY2VVUkxEaXJlY3RpdmUu
ZGVjb2RlKGRlY29kZXIpKQorICAgICwgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGNhY2hl
ZENvZGVCbG9jay5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKSkKKwor
ICAgICwgbV91c2VzRXZhbChjYWNoZWRDb2RlQmxvY2sudXNlc0V2YWwpCisgICAgLCBtX2lzU3Ry
aWN0TW9kZShjYWNoZWRDb2RlQmxvY2suaXNTdHJpY3RNb2RlKQorICAgICwgbV9pc0NvbnN0cnVj
dG9yKGNhY2hlZENvZGVCbG9jay5pc0NvbnN0cnVjdG9yKQorICAgICwgbV9oYXNDYXB0dXJlZFZh
cmlhYmxlcyhjYWNoZWRDb2RlQmxvY2suaGFzQ2FwdHVyZWRWYXJpYWJsZXMpCisgICAgLCBtX2lz
QnVpbHRpbkZ1bmN0aW9uKGNhY2hlZENvZGVCbG9jay5pc0J1aWx0aW5GdW5jdGlvbikKKyAgICAs
IG1fc3VwZXJCaW5kaW5nKGNhY2hlZENvZGVCbG9jay5zdXBlckJpbmRpbmcpCisgICAgLCBtX3Nj
cmlwdE1vZGUoY2FjaGVkQ29kZUJsb2NrLnNjcmlwdE1vZGUpCisgICAgLCBtX2lzQXJyb3dGdW5j
dGlvbkNvbnRleHQoY2FjaGVkQ29kZUJsb2NrLmlzQXJyb3dGdW5jdGlvbkNvbnRleHQpCisgICAg
LCBtX2lzQ2xhc3NDb250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0NsYXNzQ29udGV4dCkKKyAgICAs
IG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyhjYWNoZWRDb2RlQmxvY2sud2FzQ29t
cGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcykKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kKGNhY2hl
ZENvZGVCbG9jay5jb25zdHJ1Y3RvcktpbmQpCisgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShj
YWNoZWRDb2RlQmxvY2suZGVyaXZlZENvbnRleHRUeXBlKQorICAgICwgbV9ldmFsQ29udGV4dFR5
cGUoY2FjaGVkQ29kZUJsb2NrLmV2YWxDb250ZXh0VHlwZSkKKyAgICAsIG1faGFzVGFpbENhbGxz
KGNhY2hlZENvZGVCbG9jay5oYXNUYWlsQ2FsbHMpCisgICAgLCBtX2xpbmVDb3VudChjYWNoZWRD
b2RlQmxvY2subGluZUNvdW50KQorICAgICwgbV9lbmRDb2x1bW4oY2FjaGVkQ29kZUJsb2NrLmVu
ZENvbHVtbikKKyAgICAsIG1fbnVtVmFycyhjYWNoZWRDb2RlQmxvY2subnVtVmFycykKKyAgICAs
IG1fbnVtQ2FsbGVlTG9jYWxzKGNhY2hlZENvZGVCbG9jay5udW1DYWxsZWVMb2NhbHMpCisgICAg
LCBtX251bVBhcmFtZXRlcnMoY2FjaGVkQ29kZUJsb2NrLm51bVBhcmFtZXRlcnMpCisgICAgLCBt
X2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0dXJlcykKKyAgICAsIG1fcGFyc2VNb2RlKGNh
Y2hlZENvZGVCbG9jay5wYXJzZU1vZGUpCisgICAgLCBtX2NvZGVUeXBlKGNhY2hlZENvZGVCbG9j
ay5jb2RlVHlwZSkKKyAgICAsIG1fcmFyZURhdGEoY2FjaGVkQ29kZUJsb2NrLnJhcmVEYXRhLmRl
Y29kZUFzUHRyKGRlY29kZXIpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIENh
Y2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tUeXBlPjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFVubGlua2VkQ29kZUJsb2NrJiBjb2RlQmxvY2spIGNvbnN0Cit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVDb25zdGFudENvdW50OyBpLS07KQorICAg
ICAgICBjb2RlQmxvY2subV9saW5rVGltZUNvbnN0YW50c1tpXSA9IGxpbmtUaW1lQ29uc3RhbnRz
W2ldOworCisgICAgbWV0YWRhdGEuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRh
KTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJs
b2NrLm1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMpOworICAgIGNvbnN0YW50UmVnaXN0ZXJz
LmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudFJlZ2lzdGVycywgJmNvZGVCbG9j
ayk7CisgICAgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmRlY29kZShkZWNvZGVy
LCBjb2RlQmxvY2subV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgIGV4
cHJlc3Npb25JbmZvLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9leHByZXNzaW9uSW5mbyk7
CisgICAgb3V0T2ZMaW5lSnVtcFRhcmdldHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX291
dE9mTGluZUp1bXBUYXJnZXRzKTsKKyAgICBqdW1wVGFyZ2V0cy5kZWNvZGUoZGVjb2RlciwgY29k
ZUJsb2NrLm1fanVtcFRhcmdldHMpOworICAgIGNvbnN0YW50SWRlbnRpZmllclNldHMuZGVjb2Rl
KGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50SWRlbnRpZmllclNldHMpOworICAgIGlkZW50
aWZpZXJzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9pZGVudGlmaWVycyk7CisgICAgYml0
VmVjdG9ycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fYml0VmVjdG9ycyk7CisgICAgZnVu
Y3Rpb25EZWNscy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25EZWNscywgJmNv
ZGVCbG9jayk7CisgICAgZnVuY3Rpb25FeHBycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1f
ZnVuY3Rpb25FeHBycywgJmNvZGVCbG9jayk7Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYgZGVjb2Rl
ciwgY29uc3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jayYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDog
QmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2so
RGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrJiBjYWNoZWRDb2Rl
QmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKwor
QUxXQVlTX0lOTElORSBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9j
ayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJiBjYWNoZWRDb2Rl
QmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZEV2YWxDb2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKworLy8vLy8vLy8v
Ly8KKworQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlJiBleGVj
dXRhYmxlKQoreworICAgIGZpcnN0TGluZU9mZnNldCA9IGV4ZWN1dGFibGUubV9maXJzdExpbmVP
ZmZzZXQ7CisgICAgbGluZUNvdW50ID0gZXhlY3V0YWJsZS5tX2xpbmVDb3VudDsKKyAgICB1bmxp
bmtlZEZ1bmN0aW9uTmFtZVN0YXJ0ID0gZXhlY3V0YWJsZS5tX3VubGlua2VkRnVuY3Rpb25OYW1l
U3RhcnQ7CisgICAgdW5saW5rZWRCb2R5U3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLm1fdW5saW5r
ZWRCb2R5U3RhcnRDb2x1bW47CisgICAgdW5saW5rZWRCb2R5RW5kQ29sdW1uID0gZXhlY3V0YWJs
ZS5tX3VubGlua2VkQm9keUVuZENvbHVtbjsKKyAgICBzdGFydE9mZnNldCA9IGV4ZWN1dGFibGUu
bV9zdGFydE9mZnNldDsKKyAgICBzb3VyY2VMZW5ndGggPSBleGVjdXRhYmxlLm1fc291cmNlTGVu
Z3RoOworICAgIHBhcmFtZXRlcnNTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUubV9wYXJhbWV0ZXJz
U3RhcnRPZmZzZXQ7CisgICAgdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5t
X3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0g
ZXhlY3V0YWJsZS5tX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAgcGFyYW1ldGVyQ291bnQg
PSBleGVjdXRhYmxlLm1fcGFyYW1ldGVyQ291bnQ7CisKKyAgICBmZWF0dXJlcyA9IGV4ZWN1dGFi
bGUubV9mZWF0dXJlczsKKyAgICBzb3VyY2VQYXJzZU1vZGUgPSBleGVjdXRhYmxlLm1fc291cmNl
UGFyc2VNb2RlOworCisgICAgaXNJblN0cmljdENvbnRleHQgPSBleGVjdXRhYmxlLm1faXNJblN0
cmljdENvbnRleHQ7CisgICAgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBleGVjdXRhYmxlLm1faGFz
Q2FwdHVyZWRWYXJpYWJsZXM7CisgICAgaXNCdWlsdGluRnVuY3Rpb24gPSBleGVjdXRhYmxlLm1f
aXNCdWlsdGluRnVuY3Rpb247CisgICAgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3Ig
PSBleGVjdXRhYmxlLm1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3I7CisgICAgY29u
c3RydWN0QWJpbGl0eSA9IGV4ZWN1dGFibGUubV9jb25zdHJ1Y3RBYmlsaXR5OworICAgIGNvbnN0
cnVjdG9yS2luZCA9IGV4ZWN1dGFibGUubV9jb25zdHJ1Y3RvcktpbmQ7CisgICAgZnVuY3Rpb25N
b2RlID0gZXhlY3V0YWJsZS5tX2Z1bmN0aW9uTW9kZTsKKyAgICBzY3JpcHRNb2RlID0gZXhlY3V0
YWJsZS5tX3NjcmlwdE1vZGU7CisgICAgc3VwZXJCaW5kaW5nID0gZXhlY3V0YWJsZS5tX3N1cGVy
QmluZGluZzsKKyAgICBkZXJpdmVkQ29udGV4dFR5cGUgPSBleGVjdXRhYmxlLm1fZGVyaXZlZENv
bnRleHRUeXBlOworCisgICAgY2xhc3NTb3VyY2UuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUu
bV9jbGFzc1NvdXJjZSk7CisKKyAgICBuYW1lLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm5h
bWUoKSk7CisgICAgZWNtYU5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUuZWNtYU5hbWUo
KSk7CisgICAgaW5mZXJyZWROYW1lLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmluZmVycmVk
TmFtZSgpKTsKKworICAgIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLmVuY29kZShlbmNvZGVyLCBl
eGVjdXRhYmxlLnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkpOworCisgICAgdW5saW5rZWRDb2Rl
QmxvY2tGb3JDYWxsLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1fdW5saW5rZWRDb2RlQmxv
Y2tGb3JDYWxsKTsKKyAgICB1bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5lbmNvZGUoZW5j
b2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KTsKK30KKwor
QUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ2FjaGVkRnVuY3Rpb25F
eGVjdXRhYmxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKK3sKKyAgICBWYXJpYWJs
ZUVudmlyb25tZW50IGVudjsKKyAgICBwYXJlbnRTY29wZVREWlZhcmlhYmxlcy5kZWNvZGUoZGVj
b2RlciwgZW52KTsKKworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoZGVjb2Rlciwg
ZW52LCAqdGhpcyk7CisgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgp
KTsKKworICAgIGNsYXNzU291cmNlLmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX2NsYXNz
U291cmNlKTsKKyAgICB1bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZGVjb2RlKGRlY29kZXIsIGV4
ZWN1dGFibGUtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLCBleGVjdXRhYmxlKTsKKyAgICB1
bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+
bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCwgZXhlY3V0YWJsZSk7CisKKyAgICByZXR1
cm4gZXhlY3V0YWJsZTsKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYgZGVjb2RlciwgVmFyaWFi
bGVFbnZpcm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IENhY2hlZEZ1bmN0
aW9uRXhlY3V0YWJsZSYgY2FjaGVkRXhlY3V0YWJsZSkKKyAgICA6IEJhc2UoZGVjb2Rlci52bSgp
LCBkZWNvZGVyLnZtKCkudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCkp
CisgICAgLCBtX2ZpcnN0TGluZU9mZnNldChjYWNoZWRFeGVjdXRhYmxlLmZpcnN0TGluZU9mZnNl
dCkKKyAgICAsIG1fbGluZUNvdW50KGNhY2hlZEV4ZWN1dGFibGUubGluZUNvdW50KQorICAgICwg
bV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KGNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRGdW5j
dGlvbk5hbWVTdGFydCkKKyAgICAsIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW4oY2FjaGVkRXhl
Y3V0YWJsZS51bmxpbmtlZEJvZHlTdGFydENvbHVtbikKKyAgICAsIG1fdW5saW5rZWRCb2R5RW5k
Q29sdW1uKGNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRCb2R5RW5kQ29sdW1uKQorICAgICwgbV9z
dGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnN0YXJ0T2Zmc2V0KQorICAgICwgbV9zb3VyY2VM
ZW5ndGgoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VMZW5ndGgpCisgICAgLCBtX3BhcmFtZXRlcnNT
dGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnBhcmFtZXRlcnNTdGFydE9mZnNldCkKKyAgICAs
IG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUudHlwZVByb2ZpbGlu
Z1N0YXJ0T2Zmc2V0KQorICAgICwgbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KGNhY2hlZEV4ZWN1
dGFibGUudHlwZVByb2ZpbGluZ0VuZE9mZnNldCkKKyAgICAsIG1fcGFyYW1ldGVyQ291bnQoY2Fj
aGVkRXhlY3V0YWJsZS5wYXJhbWV0ZXJDb3VudCkKKyAgICAsIG1fZmVhdHVyZXMoY2FjaGVkRXhl
Y3V0YWJsZS5mZWF0dXJlcykKKyAgICAsIG1fc291cmNlUGFyc2VNb2RlKGNhY2hlZEV4ZWN1dGFi
bGUuc291cmNlUGFyc2VNb2RlKQorICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChjYWNoZWRFeGVj
dXRhYmxlLmlzSW5TdHJpY3RDb250ZXh0KQorICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhj
YWNoZWRFeGVjdXRhYmxlLmhhc0NhcHR1cmVkVmFyaWFibGVzKQorICAgICwgbV9pc0J1aWx0aW5G
dW5jdGlvbihjYWNoZWRFeGVjdXRhYmxlLmlzQnVpbHRpbkZ1bmN0aW9uKQorICAgICwgbV9pc0J1
aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcihjYWNoZWRFeGVjdXRhYmxlLmlzQnVpbHRpbkRl
ZmF1bHRDbGFzc0NvbnN0cnVjdG9yKQorICAgICwgbV9jb25zdHJ1Y3RBYmlsaXR5KGNhY2hlZEV4
ZWN1dGFibGUuY29uc3RydWN0QWJpbGl0eSkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kKGNhY2hl
ZEV4ZWN1dGFibGUuY29uc3RydWN0b3JLaW5kKQorICAgICwgbV9mdW5jdGlvbk1vZGUoY2FjaGVk
RXhlY3V0YWJsZS5mdW5jdGlvbk1vZGUpCisgICAgLCBtX3NjcmlwdE1vZGUoY2FjaGVkRXhlY3V0
YWJsZS5zY3JpcHRNb2RlKQorICAgICwgbV9zdXBlckJpbmRpbmcoY2FjaGVkRXhlY3V0YWJsZS5z
dXBlckJpbmRpbmcpCisgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShjYWNoZWRFeGVjdXRhYmxl
LmRlcml2ZWRDb250ZXh0VHlwZSkKKworICAgICwgbV9uYW1lKGNhY2hlZEV4ZWN1dGFibGUubmFt
ZS5kZWNvZGUoZGVjb2RlcikpCisgICAgLCBtX2VjbWFOYW1lKGNhY2hlZEV4ZWN1dGFibGUuZWNt
YU5hbWUuZGVjb2RlKGRlY29kZXIpKQorICAgICwgbV9pbmZlcnJlZE5hbWUoY2FjaGVkRXhlY3V0
YWJsZS5pbmZlcnJlZE5hbWUuZGVjb2RlKGRlY29kZXIpKQorCisgICAgLCBtX3BhcmVudFNjb3Bl
VERaVmFyaWFibGVzKGRlY29kZXIudm0oKS5tX2NvbXBhY3RWYXJpYWJsZU1hcC0+Z2V0KHBhcmVu
dFNjb3BlVERaVmFyaWFibGVzKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBD
YWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayYgY29kZUJsb2NrKQor
eworICAgIHRoaXNSZWdpc3RlciA9IGNvZGVCbG9jay5tX3RoaXNSZWdpc3RlcjsKKyAgICBzY29w
ZVJlZ2lzdGVyID0gY29kZUJsb2NrLm1fc2NvcGVSZWdpc3RlcjsKKyAgICBnbG9iYWxPYmplY3RS
ZWdpc3RlciA9IGNvZGVCbG9jay5tX2dsb2JhbE9iamVjdFJlZ2lzdGVyOworICAgIHVzZXNFdmFs
ID0gY29kZUJsb2NrLm1fdXNlc0V2YWw7CisgICAgaXNTdHJpY3RNb2RlID0gY29kZUJsb2NrLm1f
aXNTdHJpY3RNb2RlOworICAgIGlzQ29uc3RydWN0b3IgPSBjb2RlQmxvY2subV9pc0NvbnN0cnVj
dG9yOworICAgIGhhc0NhcHR1cmVkVmFyaWFibGVzID0gY29kZUJsb2NrLm1faGFzQ2FwdHVyZWRW
YXJpYWJsZXM7CisgICAgaXNCdWlsdGluRnVuY3Rpb24gPSBjb2RlQmxvY2subV9pc0J1aWx0aW5G
dW5jdGlvbjsKKyAgICBzdXBlckJpbmRpbmcgPSBjb2RlQmxvY2subV9zdXBlckJpbmRpbmc7Cisg
ICAgc2NyaXB0TW9kZSA9IGNvZGVCbG9jay5tX3NjcmlwdE1vZGU7CisgICAgaXNBcnJvd0Z1bmN0
aW9uQ29udGV4dCA9IGNvZGVCbG9jay5tX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQ7CisgICAgaXND
bGFzc0NvbnRleHQgPSBjb2RlQmxvY2subV9pc0NsYXNzQ29udGV4dDsKKyAgICB3YXNDb21waWxl
ZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzID0gY29kZUJsb2NrLm1fd2FzQ29tcGlsZWRXaXRoRGVidWdn
aW5nT3Bjb2RlczsKKyAgICBjb25zdHJ1Y3RvcktpbmQgPSBjb2RlQmxvY2subV9jb25zdHJ1Y3Rv
cktpbmQ7CisgICAgZGVyaXZlZENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZGVyaXZlZENvbnRl
eHRUeXBlOworICAgIGV2YWxDb250ZXh0VHlwZSA9IGNvZGVCbG9jay5tX2V2YWxDb250ZXh0VHlw
ZTsKKyAgICBoYXNUYWlsQ2FsbHMgPSBjb2RlQmxvY2subV9oYXNUYWlsQ2FsbHM7CisgICAgbGlu
ZUNvdW50ID0gY29kZUJsb2NrLm1fbGluZUNvdW50OworICAgIGVuZENvbHVtbiA9IGNvZGVCbG9j
ay5tX2VuZENvbHVtbjsKKyAgICBudW1WYXJzID0gY29kZUJsb2NrLm1fbnVtVmFyczsKKyAgICBu
dW1DYWxsZWVMb2NhbHMgPSBjb2RlQmxvY2subV9udW1DYWxsZWVMb2NhbHM7CisgICAgbnVtUGFy
YW1ldGVycyA9IGNvZGVCbG9jay5tX251bVBhcmFtZXRlcnM7CisgICAgZmVhdHVyZXMgPSBjb2Rl
QmxvY2subV9mZWF0dXJlczsKKyAgICBwYXJzZU1vZGUgPSBjb2RlQmxvY2subV9wYXJzZU1vZGU7
CisgICAgY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaS0tOykKKyAgICAgICAgbGlua1RpbWVDb25z
dGFudHNbaV0gPSBjb2RlQmxvY2subV9saW5rVGltZUNvbnN0YW50c1tpXTsKKworICAgIG1ldGFk
YXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YSk7CisgICAgcmFyZURhdGEu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhKTsKKworICAgIHNvdXJjZVVSTERp
cmVjdGl2ZS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fc291cmNlVVJMRGlyZWN0aXZlLmlt
cGwoKSk7CisgICAgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2RlciwgY29k
ZUJsb2NrLm1fc291cmNlVVJMRGlyZWN0aXZlLmltcGwoKSk7CisKKyAgICBpbnN0cnVjdGlvbnMu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2luc3RydWN0aW9ucy5nZXQoKSk7CisgICAgcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTsKKyAgICBjb25zdGFudFJlZ2lzdGVycy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRSZWdpc3RlcnMpOworICAgIGNvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbi5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKyAgICBleHByZXNzaW9uSW5mby5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lvbkluZm8pOworICAgIGp1bXBUYXJnZXRzLmVuY29k
ZShlbmNvZGVyLCBjb2RlQmxvY2subV9qdW1wVGFyZ2V0cyk7CisgICAgb3V0T2ZMaW5lSnVtcFRh
cmdldHMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX291dE9mTGluZUp1bXBUYXJnZXRzKTsK
KworICAgIGNvbnN0YW50SWRlbnRpZmllclNldHMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X2NvbnN0YW50SWRlbnRpZmllclNldHMpOworICAgIGlkZW50aWZpZXJzLmVuY29kZShlbmNvZGVy
LCBjb2RlQmxvY2subV9pZGVudGlmaWVycyk7CisgICAgYml0VmVjdG9ycy5lbmNvZGUoZW5jb2Rl
ciwgY29kZUJsb2NrLm1fYml0VmVjdG9ycyk7CisgICAgZnVuY3Rpb25EZWNscy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25EZWNscyk7CisgICAgZnVuY3Rpb25FeHBycy5lbmNv
ZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25FeHBycyk7Cit9CisKK3N0cnVjdCBDYWNo
ZWRTb3VyY2VDb2RlS2V5IDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2VDb2RlS2V5LCBDYWNo
ZWRTb3VyY2VDb2RlS2V5PiB7CisgICAgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlIHNvdXJjZUNv
ZGU7CisgICAgQ2FjaGVkU3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgZmxhZ3M7CisgICAgdW5z
aWduZWQgaGFzaDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNv
dXJjZUNvZGVLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHNvdXJjZUNvZGUuZW5jb2RlKGVuY29k
ZXIsIGtleS5tX3NvdXJjZUNvZGUpOworICAgICAgICBuYW1lLmVuY29kZShlbmNvZGVyLCBrZXku
bV9uYW1lKTsKKyAgICAgICAgZmxhZ3MgPSBrZXkubV9mbGFncy5tX2ZsYWdzOworICAgICAgICBo
YXNoID0ga2V5Lmhhc2goKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBTb3VyY2VDb2RlS2V5JiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBzb3VyY2VDb2Rl
LmRlY29kZShkZWNvZGVyLCBrZXkubV9zb3VyY2VDb2RlKTsKKyAgICAgICAgbmFtZS5kZWNvZGUo
ZGVjb2Rlciwga2V5Lm1fbmFtZSk7CisgICAgICAgIGtleS5tX2ZsYWdzLm1fZmxhZ3MgPSBmbGFn
czsKKyAgICAgICAga2V5Lm1faGFzaCA9IGhhc2g7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorc3RydWN0IENhY2hlRW50cnkgeworICAgIENh
Y2hlZFNvdXJjZUNvZGVLZXkga2V5OworICAgIENhY2hlZFB0cjxDYWNoZWRDb2RlQmxvY2tUeXBl
PFVubGlua2VkQ29kZUJsb2NrVHlwZT4+IGNvZGVCbG9jazsKKworICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBjb25zdCBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqPiBwYWlyKQorICAgIHsKKyAgICAgICAga2V5LmVuY29kZShlbmNvZGVyLCBw
YWlyLmZpcnN0KTsKKyAgICAgICAgY29kZUJsb2NrLmVuY29kZShlbmNvZGVyLCBwYWlyLnNlY29u
ZCk7CisgICAgfQorCisgICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJs
b2NrVHlwZSo+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
U291cmNlQ29kZUtleSBkZWNvZGVkS2V5OworICAgICAgICBrZXkuZGVjb2RlKGRlY29kZXIsIGRl
Y29kZWRLZXkpOworICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGRlY29kZWRLZXkpLCBjb2RlQmxv
Y2suZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIGVuY29kZUNvZGVCbG9jayhF
bmNvZGVyJiBlbmNvZGVyLCBTb3VyY2VDb2RlS2V5IGtleSwgY29uc3QgVW5saW5rZWRDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICBhdXRvKiBlbnRyeSA9IGVuY29kZXIudGVtcGxhdGUgbWFs
bG9jPENhY2hlRW50cnk8VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4oKTsKKyAgICBlbnRyeS0+ZW5j
b2RlKGVuY29kZXIsICB7IGtleSwganNDYXN0PGNvbnN0IFVubGlua2VkQ29kZUJsb2NrVHlwZSo+
KGNvZGVCbG9jaykgfSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBlbmNvZGVDb2RlQmxvY2so
RW5jb2RlciYgZW5jb2RlciwgU291cmNlQ29kZUtleSBrZXksIGNvbnN0IFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBjb2Rl
QmxvY2stPmNsYXNzSW5mbyhlbmNvZGVyLnZtKCkpOworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkgeworICAgICAgICBlbmNvZGVDb2RlQmxv
Y2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBrZXksIGNvZGVCbG9jayk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY2xhc3NJbmZvID09IFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKSB7CisgICAgICAgIGVuY29kZUNvZGVCbG9jazxV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KGVuY29kZXIsIGtleSwgY29kZUJsb2NrKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChjbGFzc0luZm8gPT0gVW5saW5r
ZWRFdmFsQ29kZUJsb2NrOjppbmZvKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCmluZGV4IDAwYTgyN2E5ODZh
Y2Q5OTM1NmZmYWQxZWMxMTM2ZDgxNmQxMGFhMmMuLjM3ODY1NmE0NTlkOTcyOTg2ZDJhNDljNjY4
N2E4ZjgzMTE5N2RjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmNwcApAQCAtNTgsOSArNTgsOCBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNo
ZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVAogICAgICAg
ICBkZXJpdmVkQ29udGV4dFR5cGUsIGV2YWxDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCwgZGVidWdnZXJNb2RlLCAKICAgICAgICAgdm0udHlwZVByb2ZpbGVyKCkgPyBUeXBlUHJv
ZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJvZmlsZXJFbmFibGVkOjpObywgCiAgICAgICAgIHZt
LmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpZZXMg
OiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8pOwotICAgIFNvdXJjZUNvZGVWYWx1ZSog
Y2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBkYXRlQWdlKGtleSk7Ci0gICAgaWYg
KGNhY2hlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7Ci0gICAgICAgIFVubGlua2VkQ29k
ZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tU
eXBlKj4oY2FjaGUtPmNlbGwuZ2V0KCkpOworICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5s
aW5rZWRDb2RlQmxvY2sgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBkYXRlQWdlPFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7CisgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrICYm
IE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9
IHVubGlua2VkQ29kZUJsb2NrLT5saW5lQ291bnQoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRD
b2x1bW4gPSB1bmxpbmtlZENvZGVCbG9jay0+c3RhcnRDb2x1bW4oKSArIHNvdXJjZS5zdGFydENv
bHVtbigpLm9uZUJhc2VkSW50KCk7CiAgICAgICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGlu
ZSA9ICFsaW5lQ291bnQ7CkBAIC03Miw3ICs3MSw3IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
Q29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVU
CiAgICAgfQogICAgIAogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7
Ci0gICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVyYXRl
VW5saW5rZWRDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBFeGVjdXRhYmxlVHlwZT4o
dm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJN
b2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIHVu
bGlua2VkQ29kZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVC
bG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RN
b2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2
YXJpYWJsZXNVbmRlclREWik7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0aW9u
czo6dXNlQ29kZUNhY2hlKCkpCiAgICAgICAgIG1fc291cmNlQ29kZS5hZGRDYWNoZShrZXksIFNv
dXJjZUNvZGVWYWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fc291cmNlQ29kZS5hZ2UoKSkp
OwpAQCAtMTA4LDkgKzEwNyw4IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2Fj
aGU6OmdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2CiAgICAgICAgIGRl
YnVnZ2VyTW9kZSwgCiAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8gVHlwZVByb2ZpbGVyRW5h
YmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAgICAgICB2bS5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDogQ29udHJv
bEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vKTsKLSAgICBTb3VyY2VDb2RlVmFsdWUqIGNhY2hlID0g
bV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkpOwotICAgIGlmIChjYWNoZSAm
JiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVBZ2U8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+KHZtLCBrZXkpOworICAgIGlmIChleGVjdXRhYmxlICYmIE9wdGlvbnM6
OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3VyY2VV
UkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291cmNlVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICBz
b3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShleGVjdXRhYmxl
LT5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICByZXR1cm4gZXhlY3V0YWJs
ZTsKQEAgLTE2NCw0ICsxNjIsMjMgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVD
YWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHYKICAgICByZXR1
cm4gZnVuY3Rpb25FeGVjdXRhYmxlOwogfQogCit2b2lkIENvZGVDYWNoZTo6d3JpdGUoVk0mIHZt
KQoreworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX3NvdXJjZUNvZGUpIHsKKyAgICAgICAg
dW5zaWduZWQgaGFzaCA9IGl0LmtleS5oYXNoKCk7CisgICAgICAgIGNoYXIgZmlsZW5hbWVbMjU2
XTsKKyAgICAgICAgc25wcmludGYoZmlsZW5hbWUsIDI1NiwgIi90bXAvJXUuY2FjaGUiLCBoYXNo
KTsKKworICAgICAgICBFbmNvZGVyIGVuY29kZXIodm0pOworICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogY29kZUJsb2NrID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oaXQudmFsdWUuY2Vs
bC5nZXQoKSk7CisgICAgICAgIGVuY29kZUNvZGVCbG9jayhlbmNvZGVyLCBpdC5rZXksIGNvZGVC
bG9jayk7CisKKyAgICAgICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fV1JP
TkxZLCAwNjY2KTsKKyAgICAgICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05C
KTsKKyAgICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgIDo6d3JpdGUoZmQsIGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuc2l6ZSgpKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgIH0KK30KKwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRleCBhYjcwYjY1
Mzk3ZmIzMzVkMmExMjNiMmE2YjNhZTNhZTYzYzgxZDlhLi4xYWUwMTQ2NDY2Mzk0ZDcyZTNlM2Ix
ZWNkYWQ5ZmQ1NzhmZjkwOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2Rl
Q2FjaGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZUluZm8uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
LmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBA
IC04OSwxMyArOTEsNjAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VDb2Rl
VmFsdWUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisg
ICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFVubGlua2VkQ29kZUJsb2NrVHlwZT4KKyAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFz
ZV9vZjxVbmxpbmtlZENvZGVCbG9jaywgVW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6dmFsdWUgJiYg
IXN0ZDo6aXNfc2FtZTxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIFVubGlua2VkRXZhbENvZGVCbG9j
az46OnZhbHVlLCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPgorICAgIGZldGNoRnJvbURpc2soVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisgICAgeworICAgICAgICB1bnNpZ25lZCBo
YXNoID0ga2V5Lmhhc2goKTsKKyAgICAgICAgY2hhciBmaWxlbmFtZVsyNTZdOworICAgICAgICBz
bnByaW50ZihmaWxlbmFtZSwgMjU2LCAiL3RtcC8ldS5jYWNoZSIsIGhhc2gpOworICAgICAgICBp
bnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisKKyAgICAgICAgaWYgKGZkID09IC0x
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaW50IHJjID0gZmxvY2so
ZmQsIExPQ0tfU0ggfCBMT0NLX05CKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBj
bG9zZShmZCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0cnVjdCBzdGF0IHNiOworICAgICAgICBpbnQgcmVzID0gZnN0YXQoZmQsICZzYik7Cisg
ICAgICAgIGlmIChyZXMgfHwgIXNiLnN0X3NpemUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxwdHIsIHNiLnN0X3Np
emUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAgICAgY29uc3QgYXV0byog
Y2FjaGVkQ29kZUJsb2NrID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDYWNoZUVudHJ5PFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4qPihidWZmZXIpOworICAgICAgICBEZWNvZGVyIGRlY29kZXIodm0s
IGNhY2hlZENvZGVCbG9jaywgc2Iuc3Rfc2l6ZSk7CisgICAgICAgIHN0ZDo6cGFpcjxTb3VyY2VD
b2RlS2V5LCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBlbnRyeTsKKyAgICAgICAgeworICAgICAg
ICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICAgICAgZW50cnkgPSBjYWNo
ZWRDb2RlQmxvY2stPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChl
bnRyeS5maXJzdCAhPSBrZXkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBhZGRDYWNoZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2bSwgZW50cnkuc2Vjb25kLCBtX2FnZSkp
OworICAgICAgICByZXR1cm4gZW50cnkuc2Vjb25kOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19iYXNlX29mPFVubGlua2Vk
Q29kZUJsb2NrLCBUPjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIFVubGlua2VkRXZhbENvZGVC
bG9jaz46OnZhbHVlLCBUKj4KKyAgICBmZXRjaEZyb21EaXNrKFZNJiwgY29uc3QgU291cmNlQ29k
ZUtleSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZpbmRDYWNoZUFu
ZFVwZGF0ZUFnZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKICAgICB7CiAgICAg
ICAgIHBydW5lKCk7CiAKICAgICAgICAgaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQo
a2V5KTsKICAgICAgICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBmZXRjaEZyb21EaXNrPFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7CiAKICAgICAgICAgaW50NjRfdCBhZ2UgPSBtX2Fn
ZSAtIGZpbmRSZXN1bHQtPnZhbHVlLmFnZTsKICAgICAgICAgaWYgKGFnZSA+IG1fY2FwYWNpdHkp
IHsKQEAgLTExNSw3ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZpbmRSZXN1bHQtPnZhbHVl
LmFnZSA9IG1fYWdlOwogICAgICAgICBtX2FnZSArPSBrZXkubGVuZ3RoKCk7CiAKLSAgICAgICAg
cmV0dXJuICZmaW5kUmVzdWx0LT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqPihmaW5kUmVzdWx0LT52YWx1ZS5jZWxsLmdldCgpKTsKICAgICB9CiAK
ICAgICBBZGRSZXN1bHQgYWRkQ2FjaGUoY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBT
b3VyY2VDb2RlVmFsdWUmIHZhbHVlKQpAQCAtMTk3LDYgKzI0Niw3IEBAIHB1YmxpYzoKICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1
dGFibGUoVk0mLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIERlYnVnZ2Vy
TW9kZSwgUGFyc2VyRXJyb3ImKTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fc291cmNlQ29kZS5j
bGVhcigpOyB9CisgICAgdm9pZCB3cml0ZShWTSYpOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRl
IDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBlPiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAppbmRleCA0YWI1YTUyMzUz
ZmQxYWU5MjBkMTFiYjM0YmMwNmViNTRmZjg4ZWU3Li5hZDRiOWIzYWVkNjMxMWZiZmE1YjkzOTBm
NDAwYmFhOGYyZWFiZWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuY3BwCkBAIC0xNDcyLDExICsxNDcyLDYgQEAgYm9vbCBKU0JpZ0ludDo6Z2V0UHJpbWl0aXZl
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmIHJlc3UKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHNpemVfdCBKU0JpZ0ludDo6b2Zmc2V0T2ZEYXRh
KCkKLXsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+
KHNpemVvZihKU0JpZ0ludCkpOwotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBK
U0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgQ2hhclR5cGUqICBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgsIEVycm9yUGFyc2VNb2RlIGVycm9yUGFyc2VNb2RlKQogewpA
QCAtMTU3OSwxMSArMTU3NCw2IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6cGFyc2VJbnQoRXhlY1N0
YXRlKiBleGVjLCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLCB1bnNpZ25lZCBsCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLWlubGluZSBKU0JpZ0ludDo6RGlnaXQqIEpTQmlnSW50OjpkYXRhU3Rv
cmFnZSgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RGlnaXQqPihyZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mRGF0YSgpKTsKLX0KLQogaW5saW5lIEpTQmln
SW50OjpEaWdpdCBKU0JpZ0ludDo6ZGlnaXQodW5zaWduZWQgbikKIHsKICAgICBBU1NFUlQobiA8
IGxlbmd0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCmluZGV4
IGE2MmUxMzhhZDY2NTUzYzkzOTU4NmJlNjk1YTFkZTE1YWUzOGU0NTAuLjI1NGY1NjI2MWUwODFl
Y2UxNGFlNjc3NGE3ZTE3NzRiMjllN2RjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCaWdJbnQuaApAQCAtMzksNiArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpT
QmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBPdmVycmlkZXNUb1RoaXM7CisgICAgZnJp
ZW5kIHN0cnVjdCBDYWNoZWRCaWdJbnQ7CiAKIHB1YmxpYzoKIApAQCAtMjA3LDggKzIwOCwxNSBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVTdWIoVk0mLCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbik7CiAgICAgCiAgICAgc3RhdGljIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBzaXplX3Qg
b2Zmc2V0T2ZEYXRhKCk7Ci0gICAgRGlnaXQqIGRhdGFTdG9yYWdlKCk7CisgICAgaW5saW5lIHN0
YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpTQmlnSW50KSk7CisgICAg
fQorCisgICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgb2Zmc2V0T2ZEYXRhKCkpOworICAgIH0KIAogICAgIERpZ2l0IGRpZ2l0KHVuc2lnbmVkKTsK
ICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cC5oCmluZGV4IGRlMjU2ZTFmMjVkN2RlZDYyM2NhN2QwYWZlZDJiY2UwNGI1
ZGI4ODMuLjRlNGM1ZTJhZDM5ZjhmZTdiMTNjZGZlNDgwOTE4MDE5Y2E4NDk0NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCkBAIC00MSw2ICs0MSw4IEBAIGNsYXNzIFZN
OwogSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwRmxhZ3MgcmVnRXhwRmxhZ3MoY29uc3QgU3RyaW5n
Jik7CiAKIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworICAgIGZyaWVuZCBz
dHJ1Y3QgQ2FjaGVkUmVnRXhwOworCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAppbmRleCA0MGU3YzdlYzJmZDYw
YjU4NDJhNTcyODVhYzk3YjBmNmE5NTkzOTVkLi41ZjUwMzQ0YTMwNWNkOGYwNzcwMTMwNzRmZGUw
ZmRkMmVjMzNhZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHNUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKQEAgLTM5LDYgKzM5LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAvLyBtYWtlcyBzZW5zZSBiZWNhdXNlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcmUgc28gdW5jb21t
b24uIFlvdSdkIGhhdmUgdG8gZG8gc29tZXRoaW5nIGNyYXp5IGxpa2UKIC8vICJkZWxldGUgYXJn
dW1lbnRzW2ldIiBvciBzb21lIHZhcmlhbnQgb2YgZGVmaW5lT3duUHJvcGVydHkuCiBjbGFzcyBT
Y29wZWRBcmd1bWVudHNUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworICAgIGZyaWVuZCBz
dHJ1Y3QgQ2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU7CisKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCmluZGV4IDkxNTdkNWI4MjkyMDBmYjZh
OTY1ZWEzYmM3ODY5NmU1MzJhOTJiOTUuLjIyMGYwMzdiYjFlMDFhODA5YTFkN2FlYjE5OTIwZWY3
YWIzNWMyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
aApAQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJv
bE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50PgogLy8gY29weTogICAg
IFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFi
bGVFbnRyeSB7CisgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OworCiBw
cml2YXRlOgogICAgIHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zmc2V0RnJvbUJpdHMoaW50cHRyX3Qg
Yml0cykKICAgICB7CkBAIC00MzYsNiArNDM4LDggQEAgc3RydWN0IFN5bWJvbFRhYmxlSW5kZXhI
YXNoVHJhaXRzIDogSGFzaFRyYWl0czxTeW1ib2xUYWJsZUVudHJ5PiB7CiB9OwogCiBjbGFzcyBT
eW1ib2xUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworICAgIGZyaWVuZCBzdHJ1Y3QgQ2Fj
aGVkU3ltYm9sVGFibGU7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKaW5kZXggNzU1Y2Q3YTlhYTU3
NmM2ZjdhNGRiMTRjMGQ5ZTMwMmM3OGRiNTE3OC4uNDFkOTcyMmU1ZjM3NDA0OWMyNDhjNWNlYmI4
MjY3OGEwNTM0Y2E1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKKysr
IGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCitu
YW1lc3BhY2UgSlNDIHsKK3N0cnVjdCBDYWNoZWRCaXRWZWN0b3I7Cit9CisKIG5hbWVzcGFjZSBX
VEYgewogCiAvLyBUaGlzIGlzIGEgc3BhY2UtZWZmaWNpZW50LCByZXNpemVhYmxlIGJpdHZlY3Rv
ciBjbGFzcy4gSW4gdGhlIGNvbW1vbiBjYXNlIGl0CkBAIC0zMzgsNiArMzQyLDggQEAgcHVibGlj
OgogICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXpl
KCkpOyB9CiAgICAgICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IEpTQzo6Q2FjaGVk
Qml0VmVjdG9yOworCiAgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358112</attachid>
            <date>2018-12-27 06:50:17 -0800</date>
            <delta_ts>2019-01-03 13:40:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20181227154856.patch</filename>
            <type>text/plain</type>
            <size>116858</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZTQ5YjM2OWQwMWU0ZjQyMjA5MTAzNjZhYjUyNGVmOWRjZWUyZTI4Li5mNjhhMDZiNjFhZDQ5MTEy
OTQzNmIwZmZmZTc1OGMzNmY3YzA2YzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTEgQEAKKzIwMTgtMTItMjcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLiBBbHNvLCBkdXJpbmcgZGVjb2RpbmcsIHRoZSBjYWNoZWQgb2JqZWN0cworICAg
ICAgICBhcmUgbW1hcCdkIGZyb20gZGlzaywgYnV0IG9ubHkgdXNlZCBmb3IgY3JlYXRpbmcgaW5z
dGFuY2VzIG9mIHRoZSByZXNwZWN0aXZlCisgICAgICAgIGluLW1lbW9yeSB2ZXJzaW9uIG9mIGVh
Y2ggb2JqZWN0LiBJZGVhbGx5LCB0aGUgbW1hcCdkIG9iamVjdHMgc2hvdWxkIGJlIHVzZWQKKyAg
ICAgICAgYXQgcnVudGltZSBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyk6Cisg
ICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZp
ZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkSGFuZGxl
ckluZm86OlVubGlua2VkSGFuZGxlckluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0
aW9uU3RyZWFtLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFNldENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50SWRlbnRpZmllclNldHMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkR2xvYmFs
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxp
bmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0
YVRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGpzYy5jcHA6
CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBw
YXJzZXIvU291cmNlQ29kZS5oOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VDb2RlS2V5Lmg6Cisg
ICAgICAgIChKU0M6OlNvdXJjZUNvZGVLZXk6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAq
IHBhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvVmFyaWFibGVF
bnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkVuY29kZXI6OkVuY29kZXIpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjp+
RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnZtKToKKyAgICAgICAgKEpTQzo6RW5j
b2Rlcjo6YnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6c2l6ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkVuY29kZXI6Om1hbGxvY09mZnNldCk6CisgICAgICAgIChKU0M6OkVu
Y29kZXI6Om1hbGxvYyk6CisgICAgICAgIChKU0M6OkVuY29kZXI6Om9mZnNldE9mKToKKyAgICAg
ICAgKEpTQzo6RW5jb2Rlcjo6Y2FjaGVQdHIpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZz
ZXRGb3JQdHIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKEpT
Qzo6RGVjb2Rlcjo6fkRlY29kZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjp2bSk6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6Om9mZnNldE9mKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6Y2Fj
aGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjphZGRGaW5hbGl6ZXIpOgorICAgICAg
ICAoSlNDOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpD
YWNoZWRPYmplY3Q6OnNpemVPZik6CisgICAgICAgIChKU0M6OkNhY2hlZE9iamVjdDo6Y2FzdCk6
CisgICAgICAgIChKU0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6
VmFyaWFibGVMZW5ndGhPYmplY3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRy
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFB0cjo6b3BlcmF0b3ItPik6CisgICAgICAgIChKU0M6OkNhY2hlZFB0
cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFdy
aXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFBhaXI6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZElk
ZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2lt
cGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFi
bGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSYXJlRGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJp
dFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQml0VmVjdG9yOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRD
b25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRBcnJheTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3ltYm9s
VGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEltbXV0YWJsZUJ1dHRl
cmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5Ojpk
ZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdFeHA6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQmlnSW50OjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW5zdHJ1
Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE1ldGFkYXRh
VGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9yaWdpbjo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFRl
eHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJv
dmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlkZXJT
aGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nU291cmNlUHJv
dmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVy
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRl
cjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlkZXI6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlOjplbmNv
ZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZW5jb2RlKToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHJv
Z3JhbUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkTW9kdWxl
Q29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRNb2R1bGVDb2RlQmxvY2s6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6OmVuY29k
ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9ja1R5cGU+OjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFsQ29k
ZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNv
ZGVLZXk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlRW50cnk6OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVCbG9jayk6
CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQ2Fj
aGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldFVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRVbmxpbmtl
ZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6d3Jp
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmVuZCk6CisgICAg
ICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGVNYXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAgIChKU0M6Ondy
aXRlQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoKKyAgICAgICAg
KiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGlt
ZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorCiAyMDE4LTEyLTI1ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnku
Y29tPgogCiAgICAgICAgIFtKU0NdW1dpbl1bQ2xhbmddIHdhcm5pbmc6IGltcGxpY2l0IGNvbnZl
cnNpb24gZnJvbSAnc2l6ZV90JyAoYWthICd1bnNpZ25lZCBsb25nIGxvbmcnKSB0byAnaW50MzJf
dCcgKGFrYSAnaW50JykgY2hhbmdlcyB2YWx1ZSBmcm9tIDE4NDQ2NzQ0MDczNzA5NTUxNTUyIHRv
IC02NCBbLVdjb25zdGFudC1jb252ZXJzaW9uXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAxODFlNmIyZjlmNTdhZDRlYWFiNWI1
ZjAzNmYzNDRiY2VkMTgxNmExLi4xYmU3ZWRiMjg5MTI0YWZhOGYxOTc5ZTU4YzkxMTc1NmY5MDUw
ZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE4LTEyLTI3ICBUYWRldSBaYWdhbGxvICA8dHph
Z2FsbG9AYXBwbGUuY29tPgorCisgICAgICAgIENhY2hlIGJ5dGVjb2RlIHRvIGRpc2sKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjc4MgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNDYwODQ5MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQml0VmVjdG9ycyBoYXZlIHRvIGJlIGZyaWVuZHMgd2l0aCBK
U0M6OkNhY2hlQml0VmVjdG9yIHRvIGFsbG93CisgICAgICAgIHNlcmlhbGl6aW5nIGl0cyBidWZm
ZXIgYXMgcGFydCBvZiB0aGUgYnl0ZWNvZGUgY2FjaGUgZW5jb2RpbmcuCisKKyAgICAgICAgKiB3
dGYvQml0VmVjdG9yLmg6CisKIDIwMTgtMTItMjEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXhlZCBidWlsZGluZyBmb3IgbWFjT1MgMTAuMTMgdXNpbmcgdGhl
IG1hY09TIDEwLjE0IFNESy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjNlZjFj
NDIzODBiM2NlZjJmMDBmYWM2NThlOTJlOWQ2ZTc5OWYwMy4uYzllZWNkMmViNGQ1NzNhYmQxODdj
NDNlNzNkYTZkZTE1OWI4MWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMx
MzksNiArMzEzOSw3IEBACiAJCTE0Mzg2QTczMURENjk4OTUwMDg2NTJDNCAvKiBEaXJlY3RFdmFs
RXhlY3V0YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RFdmFs
RXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NjFERDY5
ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzODZBNzcxREQ2OTg5QzAwODY1MkM0IC8qIEluZGly
ZWN0RXZhbEV4ZWN1dGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5k
aXJlY3RFdmFsRXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDNC
RTI2NTIxQzg1Nzc3MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ2FjaGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQ0MDA1MUYwQTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gTm9kZS5oOyBwYXRoID0gdGVzdHMvTm9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDQwMDUyMDBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5jICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBOb2RlLmM7IHBhdGggPSB0ZXN0cy9Ob2RlLmM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNzQ4MEE1MzZDQzIwMDA1RjA2MSAv
KiBOb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlTGlzdC5o
OyBwYXRoID0gdGVzdHMvTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTY1ODEsNiArNjU4Miw3IEBACiAJCQkJOUU3Mjk0MDkxOTBGMDMwNjAwMUE5MUI1IC8qIEJ1bmRs
ZVBhdGgubW0gKi8sCiAJCQkJMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5o
ICovLAogCQkJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmgg
Ki8sCisJCQkJMTQzQkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8qIENhY2hlZFR5cGVzLmggKi8sCiAJ
CQkJMEZFQzNDNUYxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oICovLAogCQkJ
CUJDQTYyREZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUw
N0YwRDlERjYzQjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDQ1ZGU4MmU3Y2I1OGEyODNi
MjBmY2FlNTk4MmJiYjVjMDRkYTkxNzUuLmEwZjg1M2E2ZTA1ZGM0NjE4ZmYwNGRlNTkwMTliMWVh
MTNkNmIzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwCkBAIC02Myw2ICs2Myw3IEBAIEJ1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZN
KiB2bSwgQ29tbW9uSWRlbnRpZmllcnMqIGNvbW1vbklkZW50aWZpZXJzKQogICAgIEpTQ19DT01N
T05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QUklW
QVRFX1RPX1BVQkxJQ19FTlRSWSkKICAgICBKU0NfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX05B
TUUoSU5JVElBTElaRV9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKICAgICBKU0NfQ09NTU9OX1BS
SVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFVCTElDX1RP
X1BSSVZBVEVfRU5UUlkpCisgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hf
V0VMTF9LTk9XTl9TWU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFJJVkFURV9UT19QVUJMSUNfRU5U
UlkpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9T
WU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgbV9w
cml2YXRlVG9QdWJsaWNNYXAuYWRkKG1fZG9sbGFyVk1Qcml2YXRlTmFtZS5pbXBsKCksICZtX2Rv
bGxhclZNTmFtZSk7CiAgICAgbV9wdWJsaWNUb1ByaXZhdGVNYXAuYWRkKG1fZG9sbGFyVk1OYW1l
LmltcGwoKSwgJm1fZG9sbGFyVk1Qcml2YXRlTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggZjY2YjhjYjUxZWI0MDJkODczNmZkN2Rk
MGQyZDBlN2EyOTJmNDUxMi4uODUzMWRiMjYwYmQwNzAxYjM3MTkwMWI2NzRiZmY1ZGYwYmZiZDg3
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaApA
QCAtMjEzLDYgKzIxMyw3IEBAIGV4dGVybiBTeW1ib2xJbXBsOjpTdGF0aWNTeW1ib2xJbXBsIHBv
bHlQcm90b1ByaXZhdGVOYW1lOwogLy8gV2UgY29tbWFuZGVlciB0aGUgcHVibGljVG9Qcml2YXRl
TWFwIHRvIGFsbG93IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1ib2wgbmFtZXMgaW50byB0aGUg
YXBwcm9wcmlhdGUgc3ltYm9sLgogLy8gZS5nLiBAaXRlcmF0b3JTeW1ib2wgcG9pbnRzIHRvIFN5
bWJvbC5pdGVyYXRvciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0byBhIGFuIGFjdHVhbCBwcml2
YXRlIG5hbWUuCiAvLyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhhY2sgYW5kIHdlIHNob3VsZG4n
dCBuZWVkIHRvIGRvIHRoaXMuCisjZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9f
UFVCTElDX0VOVFJZKG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjU3lt
Ym9sLmltcGwoKSwgJm1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllcik7CiAjZGVmaW5l
IElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKG5hbWUpIG1fcHVibGlj
VG9Qcml2YXRlTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIuaW1wbCgp
LCAmbV8jI25hbWUjI1N5bWJvbCk7CiAKIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDdhZmRhMzYzMTcyYWFi
ODZmMzljYWZhMzgzYWQ4N2U2Njc1YzYyNzIuLmEyZDMyNjJkMTVmYzdkMDRkOTgwM2UwM2UwOWNj
Zjg3ZWM5N2E1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCkBAIC04NjQsNyArODY0LDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJT
ZXRFbnRyeT4mIGNvbnN0YW50cykKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZp
ZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0
RW50cnk+JiBjb25zdGFudHMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVj
dC5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRl
eCA4ZDIzYmJjZGVlZDA1ODFmNTNiNmM2OTg2MjUxZWVlNjNkN2U2Yjg4Li40NjM3ZTNjNGZmNzVi
OGIwZTk4MjdhMGM2OWExNDVjZGE2MzE4NDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCkBAIC04OTIsNyArODkyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJP
ZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzKTsKIAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJz
KFZNJiwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50
cyk7CisgICAgdm9pZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25z
dCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwogCiAgICAg
dm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYg
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAppbmRleCA2NmMzYjc2ODc3NTYyMDc3NmQyNjNm
ZjA5OGRlNmY0NmI2NmU3NzgzLi43ZjQ2NWQyYWU5Mzc5OWI5MWRmNzg3MTQxOTRmY2EzNGJkMmEx
YTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlcklu
Zm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaApA
QCAtODksNiArODksMTAgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiB9OwogCiBzdHJ1Y3Qg
VW5saW5rZWRIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIFVubGlu
a2VkSGFuZGxlckluZm8oKQorICAgIHsKKyAgICB9CisKICAgICBVbmxpbmtlZEhhbmRsZXJJbmZv
KHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQsIHVpbnQzMl90IHRhcmdldCwgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGUpCiAgICAgewogICAgICAgICB0aGlzLT5zdGFydCA9IHN0YXJ0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFt
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaApp
bmRleCA3MGVkZTNlNDFjNWQ1YzQ4OWQ3OTZmY2ZjMGMxY2NkOTk4ZDI5ZWQ1Li5kOTMxNTRiYzZi
NWMzNmQ0YTg0OTcxMjUyZDA2MzJlNDQwZDRhZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaApAQCAtMzksNiArMzksNyBAQCBj
bGFzcyBJbnN0cnVjdGlvblN0cmVhbSB7CiAgICAgdXNpbmcgSW5zdHJ1Y3Rpb25CdWZmZXIgPSBW
ZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+OwogCiAgICAgZnJpZW5kIGNs
YXNzIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkSW5z
dHJ1Y3Rpb25TdHJlYW07CiBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKaW5kZXggZjBlOWQ2NGM4NTRhM2Y1MzY3NTJkNDg3NDY5MmQyNzg3N2Q2NzA0OS4uMGIy
MzZhMDJkNTlkYzI1OGU5MDg5MGM5MjVhM2M4OGIwNWM1MDdmYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTY1LDEyICs2
NSwxNSBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitzdHJ1
Y3QgQ2FjaGVkQ29kZUJsb2NrOworCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9m
aWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5z
aWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBV
bmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtl
ZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcgQ29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5ID0g
c3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50SWRlbnRp
ZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKIAogc3Ry
dWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24g
ewpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMu
YXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3Ro
ZXIpOwotICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SW5k
ZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50SWRlbnRp
ZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7
CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpPdGhlcikKQEAgLTIwMiw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XTsKICAgICB9CiAgICAgY29uc3QgVmVjdG9y
PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVy
U2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElk
ZW50aWZpZXJTZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlm
aWVyU2V0czsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdp
c3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+
PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KQEAgLTM2Nyw2
ICszNzAsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2so
Vk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dl
ck1vZGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUg
Q2FjaGVkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3Ry
dWN0dXJlKiwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVC
bG9ja1R5cGU+Jik7CisKICAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtMzc4LDYgKzM4NSw5IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2Vu
ZXJhdG9yOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUg
Q2FjaGVkQ29kZUJsb2NrVHlwZT4KKyAgICBmcmllbmQgc3RydWN0IENhY2hlZENvZGVCbG9jazsK
KwogICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYsIEluc3RydWN0
aW9uU3RyZWFtV3JpdGVyJik7CiAKICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KQpAQCAtNDQ0LDcgKzQ1NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPElkZW50aWZpZXI+IG1f
aWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7Ci0gICAgVmVj
dG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
OworICAgIFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50
aWZpZXJTZXRzOwogICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFy
cmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rv
cjsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9j
ay5oCmluZGV4IDk5ODdiNDMxMzM0M2I2Y2I3NTJhNDIwYjM1OGQ5YTM2MDMxNzJmMjYuLjJhYzc0
YWU5OGI1MGNmMjI2MTdiYzk0Mjk0NWUwMjM4NGQxMmNmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKQEAgLTI5
LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBDYWNoZWRFdmFsQ29kZUJs
b2NrOworCiBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxD
b2RlQmxvY2sgQmFzZTsKQEAgLTU5LDExICs2MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZnVu
Y3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRh
dGVzKTsKICAgICB9CiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRFdmFsQ29kZUJsb2NrOwor
CiAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQog
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9k
ZSkKICAgICB7CiAgICAgfQogCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImLCBj
b25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJik7CisKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxJZGVudGlmaWVy
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggYjU0ODJiNjVjOGI4ZWZiM2FhMzA2YTQxM2JkNTQ2
MDM0OTFhOTAxMy4uNmEzMGFhM2QxZTUyZWU5Njk2Y2U3OTYzMjVjNTA1OWJmYmY5MjJjZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewogcHVibGljOgog
ICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKQEAgLTQ0LDEwICs0NiwxNCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAg
ICBmcmllbmQgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBl
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkK
ICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1v
ZGUpCiAgICAgewogICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2Rl
ciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrJik7CiAgICAgCiBwdWJsaWM6CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXgg
NTI2ODk4Yzk1MWQ4MjE3NTk3OTg4MTEwMmY5ZGM3ZDYxNWIwMTUyMi4uMzc1ZjQ3ODk3ZGNkNWIw
Njk1NzYyNTVlYzNjN2FlMWM3Y2Q0NTdkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTM5
LDExICszOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKIGNsYXNz
IEZ1bmN0aW9uTWV0YWRhdGFOb2RlOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3Mg
UGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s7CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiBlbnVtIFVu
bGlua2VkRnVuY3Rpb25LaW5kIHsKICAgICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLApAQCAtNTQs
NiArNTYsNyBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CiAgICAgZnJp
ZW5kIGNsYXNzIFZNOworICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAKICAg
ICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKQEAg
LTE0Nyw2ICsxNTAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25N
ZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQ
YXJzZXJTY3JpcHRNb2RlLCBWYXJpYWJsZUVudmlyb25tZW50JiwgIEpTQzo6RGVyaXZlZENvbnRl
eHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIGNv
bnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAgdW5zaWduZWQgbV9maXJzdExp
bmVPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCmluZGV4
IDM0Mzg2MmU2NDcwZmUxYjFhNDI0ODVkODc2OWUyNzdkNzJjMTUwOGUuLjg2OTk2MTU4N2NkZDUx
NzE3ZmY2M2MxNjdkYmYyNDliZDYwZTM4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCkBAIC0zOCw2ICsz
OCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlw
ZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorICAgIFVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2Nr
VHlwZT4mIGNhY2hlZENvZGVCbG9jaykKKyAgICAgICAgOiBCYXNlKGRlY29kZXIsIHN0cnVjdHVy
ZSwgY2FjaGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKaW5k
ZXggM2UzZThkZmI0ZDViYmM0NjRmNWU2YTIzNDRjYWFjYTk5NDk0OWVmMS4uZDk5MGNkNzhjM2Vk
MWE2MzlmNjQxMDQ2OGRmYTNhZWJiMDY2ZDY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaApAQCAtMzUsNiArMzUs
NyBAQCBjbGFzcyBNZXRhZGF0YVRhYmxlOwogY2xhc3MgVW5saW5rZWRNZXRhZGF0YVRhYmxlIHsK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFz
cyBNZXRhZGF0YVRhYmxlOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkTWV0YWRhdGFUYWJsZTsK
IAogcHVibGljOgogICAgIHN0cnVjdCBMaW5raW5nRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLmgKaW5kZXggMGU5YzVmNWJkZGU2Yzc1NjJiNjZhMDNiYzBhOThjODdhZGJkOTMwMi4u
ZTY0ZGNlNjEyNTQ3N2RkNWM1NDEyY2VkOTJiZTI1NjA0YjVmMzg0NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suaApAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y2xhc3MgRGVjb2RlcjsKK3N0cnVjdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKIGNsYXNzIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayBCYXNlOwpAQCAtNzQsMTEgKzc3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Cisg
ICAgZnJpZW5kIENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUsIE1vZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAg
ICAgfQogCisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25z
dCBDYWNoZWRNb2R1bGVDb2RlQmxvY2smKTsKKwogICAgIGludCBtX21vZHVsZUVudmlyb25tZW50
U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwogCiBwdWJsaWM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrLmgKaW5kZXggYWZlMjZhZWQxYTUwM2FiMjNmZDhmNDQ3ZjlkZWMyZGMwNmNhNTgy
Ni4uOWQ3ZTQzNWFmZDhjYTVmYjBhNzRlOTU1ZDM2MjU5MTFhNjI4YWExNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IENh
Y2hlZFByb2dyYW1Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayBm
aW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAtNTAsMTEgKzUyLDE1IEBAIHB1
YmxpYzoKICAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVjbGFyYXRpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6Cisg
ICAgZnJpZW5kIENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0K
IAorICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkUHJv
Z3JhbUNvZGVCbG9jayYpOworCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0
aW9uczsKICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
aW5kZXggYWQ2NTM2MThiNDI4ZmNhMDZiZTA0ZGRiNjZjMGYzZDMxZDJiMjY0Yy4uOGU4MjU2MDI4
YjEwMzdkYjJiMzA3YWNkMTdkMDViN2YzNThmNDdkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYWRkNWE0ZTJhYjUxYmNjYmE0Yzc0OTUyYTRhZDY5
NjZmNGMzZWFhMS4uMjhmZDkzOWM2OTRhNjEwZTY0NjMwNGNkNGRjZjA4OTM5N2Q0MjNhMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNs
dWRlICJDb25maWdGaWxlLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCkBAIC0xOTgxLDgg
KzE5ODIsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0
TmV3Q29kZUJsb2NrKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUXVpdChFeGVjU3RhdGUqKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blF1aXQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
dm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNTKTsK
IAogI2lmIENPTVBJTEVSKE1TVkMpCkBAIC0yODQzLDYgKzI4NDcsOCBAQCBpbnQgcnVuSlNDKGNv
bnN0IENvbW1hbmRMaW5lJiBvcHRpb25zLCBib29sIGlzV29ya2VyLCBjb25zdCBGdW5jJiBmdW5j
KQogI2VuZGlmCiAgICAgfQogCisgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAg
IGlmIChpc1dvcmtlcikgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAg
ICAgLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSB3b3JrZXIncyBt
YWluCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCmluZGV4IDc4MDdj
ZTQ5Y2UwNTY1Njg2MjIzYzQ0ZjJkYWMxYjA5YWU5NzM0YTUuLmU4NjRiOGM1NWUwODEzZmY1ZDk4
ZTVlOGI2OTU5MWI3ZmJmMjkyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU291cmNlQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZS5oCkBAIC0zMyw2ICszMyw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IFNvdXJjZUNvZGUgOiBwdWJsaWMgVW5saW5rZWRTb3VyY2VDb2RlIHsKKyAgICAgICAgZnJpZW5k
IHN0cnVjdCBDYWNoZWRTb3VyY2VDb2RlOworCiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VD
b2RlKCkKICAgICAgICAgICAgIDogVW5saW5rZWRTb3VyY2VDb2RlKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKaW5kZXggYThlNjAzYzI2YTBiNjAzNjJh
MDJkZWFjMDUxNjE2OWQ1NzU1ODAyMS4uMzg0ODEyMTdiYWYzOTM1ZDUwMWFjMjUxNTU5YjBkNDI2
OGI0ZGI4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VD
b2RlS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5
LmgKQEAgLTM3LDYgKzM3LDggQEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJFbmFibGVkIHsgTm8s
IFllcyB9OwogZW51bSBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMg
fTsKIAogY2xhc3MgU291cmNlQ29kZUZsYWdzIHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFNv
dXJjZUNvZGVLZXk7CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2RlRmxhZ3MoKSA9IGRlZmF1bHQ7
CiAKQEAgLTcwLDYgKzcyLDggQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVLZXkg
eworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkU291cmNlQ29kZUtleTsKKwogcHVibGljOgogICAg
IFNvdXJjZUNvZGVLZXkoKQogICAgIHsKQEAgLTExNCw2ICsxMTgsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgJiYgc3RyaW5nKCkgPT0gb3RoZXIuc3RyaW5nKCk7CiAgICAgfQogCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUNvZGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKwogICAgIHN0cnVjdCBIYXNo
IHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU291cmNlQ29kZUtleSYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFNvdXJjZUNvZGVLZXkmIGEsIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNv
dXJjZUNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VD
b2RlLmgKaW5kZXggNmVjNTkwYjUzZTZjOWMzMjdlNDI0NGQwYjExOWIzNmQwOTZmYzgxZS4uNDkw
YTg4YWE4MzFkMWNiN2FmNWZmMWE2YTcxY2UwY2E5MjY3YWYxYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCkBAIC0zNSw2ICszNSw5
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFVubGlua2VkU291cmNlQ29kZSB7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIENhY2hlVHlwZT4K
KyAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTsKKwog
ICAgIHB1YmxpYzoKICAgICAgICAgVW5saW5rZWRTb3VyY2VDb2RlKCkKICAgICAgICAgICAgIDog
bV9wcm92aWRlcigwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9W
YXJpYWJsZUVudmlyb25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Zhcmlh
YmxlRW52aXJvbm1lbnQuaAppbmRleCAxMjliNWVhNmJkOWI3MjZhMWQ5YTQwMTFlZjk2OTBmOGNj
NmIwZGQzLi4zNmY5ZGRmODE3NzZjY2IwYTc2ZmVlMDhhMGE1OGMzODA3YTkzNWM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaApA
QCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsgfQogCiBwcml2YXRlOgor
ICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudDsKKwogICAgIE1hcCBt
X21hcDsKICAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgeyBmYWxzZSB9OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIy
ZmZhN2ViOThlYjQ5MjQ0ZGZlZWIzNTIwZTZmYzQwNjY5NWQ5ZjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCkBAIC0wLDAgKzEs
MTc4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5j
bHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKKyNpbmNs
dWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgorI2luY2x1ZGUgIlNvdXJjZUNvZGVLZXkuaCIK
KyNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5l
cy5oIgorI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPgorc3RydWN0IFNvdXJj
ZVR5cGVJbXBsIHsKKyAgICB1c2luZyB0eXBlID0gVDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgU291cmNlVHlwZUltcGw8VCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19m
dW5kYW1lbnRhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjpTb3VyY2VU
eXBlLCB2b2lkPjo6dmFsdWU+PiB7CisgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFQ6OlNvdXJj
ZVR5cGU7CisKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1c2luZyBTb3VyY2VUeXBlID0g
dHlwZW5hbWUgU291cmNlVHlwZUltcGw8VD46OnR5cGU7CisKK2NsYXNzIEVuY29kZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEVuY29kZXIpOworCitwdWJsaWM6CisgICAgRW5jb2RlcihW
TSYgdm0pCisgICAgICAgIDogbV92bSh2bSkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsK
KyAgICAgICAgbV9idWZmZXIgPSAodWludDhfdCopZmFzdFplcm9lZE1hbGxvYyhzX21heFNpemUp
OworICAgIH0KKworICAgIH5FbmNvZGVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlcikK
KyAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICB9CisKKyAgICBWTSYgdm0oKSB7
IHJldHVybiBtX3ZtOyB9CisgICAgY29uc3QgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0
OyB9CisKKyAgICBwdHJkaWZmX3QgbWFsbG9jT2Zmc2V0KHVuc2lnbmVkIHNpemUpCisgICAgewor
ICAgICAgICBtX29mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzaXplb2Yodm9pZCop
LCBtX29mZnNldCk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fb2Zmc2V0
ICsgc2l6ZSkgPCBzX21heFNpemUpOworICAgICAgICBwdHJkaWZmX3QgcmVzdWx0ID0gbV9vZmZz
ZXQ7CisgICAgICAgIG1fb2Zmc2V0ICs9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdWludDhfdCogbWFsbG9jKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAg
ICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbWFsbG9jT2Zmc2V0KHNpemUpOworICAgICAgICByZXR1cm4g
bV9idWZmZXIgKyBvZmZzZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBUKiBtYWxsb2MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+
KG1hbGxvYyhzaXplb2YoVCkpKTsKKyAgICB9CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29u
c3Qgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYWRkcmVzcyk7CisgICAgICAgIEFTU0VSVChhZGRy
ID49IG1fYnVmZmVyICYmIGFkZHIgPCBtX2J1ZmZlciArIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIGFkZHIgLSBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2b2lkIGNhY2hlUHRyKGNvbnN0IHZv
aWQqIHB0ciwgcHRyZGlmZl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIG1fcHRyVG9PZmZzZXRN
YXAuYWRkKHB0ciwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPHB0cmRpZmZf
dD4gb2Zmc2V0Rm9yUHRyKGNvbnN0IHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIGF1dG8gaXQg
PSBtX3B0clRvT2Zmc2V0TWFwLmZpbmQocHRyKTsKKyAgICAgICAgaWYgKGl0ID09IG1fcHRyVG9P
ZmZzZXRNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICByZXR1cm4geyBpdC0+dmFsdWUgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQg
c19tYXhTaXplID0gMTAgKiBNQjsKKworICAgIFZNJiBtX3ZtOworICAgIHVpbnQ4X3QqIG1fYnVm
ZmVyOworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBw
dHJkaWZmX3Q+IG1fcHRyVG9PZmZzZXRNYXA7Cit9OworCitjbGFzcyBEZWNvZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEZWNvZGVyKTsKKworcHVibGljOgorICAgIERlY29kZXIoVk0m
IHZtLCBjb25zdCB2b2lkKiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUpCisgICAgICAgIDogbV92
bSh2bSkKKyAgICAgICAgLCBtX2Jhc2VBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGJhc2VBZGRyZXNzKSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV9zaXplKHNp
emUpCisjZW5kaWYKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICB9CisK
KyAgICB+RGVjb2RlcigpCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2ZpbmFs
aXplcnMpCisgICAgICAgICAgICBwYWlyLnZhbHVlKCk7CisgICAgfQorCisgICAgVk0mIHZtKCkg
eyByZXR1cm4gbV92bTsgfQorCisgICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZvaWQqIHB0
cikKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4ocHRyKTsKKyAgICAgICAgQVNTRVJUKGFkZHIgPj0gbV9iYXNlQWRkcmVzcyAm
JiBhZGRyIDwgbV9iYXNlQWRkcmVzcyArIG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBhZGRyIC0g
bV9iYXNlQWRkcmVzczsKKyAgICB9CisKKyAgICB2b2lkIGNhY2hlT2Zmc2V0KHB0cmRpZmZfdCBv
ZmZzZXQsIHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0VG9QdHJNYXAuYWRkKG9m
ZnNldCwgcHRyKTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPHZvaWQqPiBwdHJGb3JPZmZz
ZXQocHRyZGlmZl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtX29mZnNldFRv
UHRyTWFwLmZpbmQob2Zmc2V0KTsKKyAgICAgICAgaWYgKGl0ID09IG1fb2Zmc2V0VG9QdHJNYXAu
ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4g
eyBpdC0+dmFsdWUgfTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgYWRkRmluYWxpemVyKHB0cmRpZmZfdCBvZmZzZXQsIGNvbnN0IEZ1bmN0b3ImIGZu
KQorICAgIHsKKyAgICAgICAgbV9maW5hbGl6ZXJzLmFkZChvZmZzZXQsIGZuKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgVk0mIG1fdm07CisgICAgY29uc3QgdWludDhfdCogbV9iYXNlQWRkcmVz
czsKKyNpZm5kZWYgTkRFQlVHCisgICAgc2l6ZV90IG1fc2l6ZTsKKyNlbmRpZgorICAgIEhhc2hN
YXA8cHRyZGlmZl90LCB2b2lkKj4gbV9vZmZzZXRUb1B0ck1hcDsKKyAgICBIYXNoTWFwPHB0cmRp
ZmZfdCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX2ZpbmFsaXplcnM7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNv
dXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZW5jb2RlKEVuY29kZXImLCBUJiBkc3QsIGNvbnN0IFNvdXJj
ZVR5cGU8VD4mIHNyYykKK3sKKyAgICBkc3QgPSBzcmM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8
VD4+Ojp2YWx1ZT4gZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFQmIGRzdCwgY29uc3QgU291cmNl
VHlwZTxUPiYgc3JjKQoreworICAgIGRzdC5lbmNvZGUoZW5jb2Rlciwgc3JjKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGRlY29kZShEZWNvZGVy
JiwgY29uc3QgVCYgc3JjLCBTb3VyY2VUeXBlPFQ+JiBkc3QsIEFyZ3MuLi4pCit7CisgICAgZHN0
ID0gc3JjOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorc3Rh
dGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFs
dWU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBUJiBzcmMsIFNvdXJjZVR5cGU8VD4m
IGRzdCwgQXJncy4uLiBhcmdzKQoreworICAgIHNyYy5kZWNvZGUoZGVjb2RlciwgZHN0LCBhcmdz
Li4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWUsIFQ+IGRlY29kZShEZWNvZGVy
JiwgVCBzcmMpCit7CisgICAgcmV0dXJuIHNyYzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46
OnZhbHVlLCBTb3VyY2VUeXBlPFQ+PiYmIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBU
JiBzcmMpCit7CisgICAgcmV0dXJuIHNyYy5kZWNvZGUoZGVjb2Rlcik7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgRHN0Pgorc3RydWN0IENhY2hlZE9iamVjdCB7Cisg
ICAgdXNpbmcgU291cmNlVHlwZSA9IFNvdXJjZTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBzaXpl
T2YoY29uc3QgU291cmNlJiBzb3VyY2UpCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0g
MDsKKyAgICAgICAgY29tcHV0ZU91dE9mTGluZVNpemUoc2l6ZSwgc291cmNlKTsKKyAgICAgICAg
cmV0dXJuIHNpemU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0
aWMgVCYgY2FzdChUKiBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gKnNvdXJjZTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+PgorICAgIHN0YXRpYyBUJiBjYXN0KFQmIHNv
dXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgY29uc3QgVCYgY2FzdChjb25zdCBUKiBjb25zdCBz
b3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gKnNvdXJjZTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfcG9p
bnRlcjxUPjo6dmFsdWU+PgorICAgIHN0YXRpYyBjb25zdCBUJiBjYXN0KGNvbnN0IFQmIHNvdXJj
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBEc3Q+CitzdHJ1Y3QgVmFyaWFibGVMZW5ndGhPYmpl
Y3QgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZSwgRHN0PiB7Citwcml2YXRlOgorICAgIGNv
bnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9IFBUUkRJRkZfTUFYOwor
cHVibGljOgorICAgIHB0cmRpZmZfdCBvZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKKworICAg
IGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQob2Zm
c2V0ICE9IHNfaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPih0aGlzKSArIG9mZnNldDsKKyAgICB9CisKKyAgICB1aW50OF90KiBi
dWZmZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCAhPSBzX2ludmFsaWRPZmZzZXQp
OworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGhpcykgKyBvZmZz
ZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBidWZm
ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VCo+KGJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQq
IGJ1ZmZlcigpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oYnVm
ZmVyKCkpOworICAgIH0KKworICAgIHVpbnQ4X3QqIGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIs
IHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldE9mZnNldCA9IGVu
Y29kZXIub2Zmc2V0T2YoJm9mZnNldCk7CisgICAgICAgIHB0cmRpZmZfdCBhbGxvY2F0aW9uT2Zm
c2V0ID0gZW5jb2Rlci5tYWxsb2NPZmZzZXQoc2l6ZSk7CisgICAgICAgIG9mZnNldCA9IGFsbG9j
YXRpb25PZmZzZXQgLSBvZmZzZXRPZmZzZXQ7CisgICAgICAgIHJldHVybiBidWZmZXIoKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFsbG9jYXRlKEVuY29kZXIm
IGVuY29kZXIsIHVuc2lnbmVkIHNpemUgPSAxKQorICAgIHsKKyAgICAgICAgYWxsb2NhdGUoZW5j
b2Rlciwgc2l6ZW9mKFRbc2l6ZV0pKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjxUPigpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJjZVR5cGUgPSBTb3Vy
Y2VUeXBlPFQ+Pgorc3RydWN0IENhY2hlZFB0ciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVj
dDxTb3VyY2VUeXBlKiwgQ2FjaGVkUHRyPFQ+PiB7CisgICAgYm9vbCBpc0VtcHR5OworCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlVHlwZSogc3JjKQorICAg
IHsKKyAgICAgICAgaXNFbXB0eSA9ICFzcmM7CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChXVEY6Ok9wdGlvbmFsPHB0cmRpZmZfdD4gb2Zm
c2V0ID0gZW5jb2Rlci5vZmZzZXRGb3JQdHIoc3JjKSkgeworICAgICAgICAgICAgdGhpcy0+b2Zm
c2V0ID0gKm9mZnNldCAtIGVuY29kZXIub2Zmc2V0T2YoJnRoaXMtPm9mZnNldCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBUKiBjYWNoZWRPYmplY3QgPSB0aGlz
LT50ZW1wbGF0ZSBhbGxvY2F0ZTxUPihlbmNvZGVyKTsKKyAgICAgICAgY2FjaGVkT2JqZWN0LT5l
bmNvZGUoZW5jb2RlciwgKnNyYyk7CisgICAgICAgIGVuY29kZXIuY2FjaGVQdHIoc3JjLCBlbmNv
ZGVyLm9mZnNldE9mKGNhY2hlZE9iamVjdCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgU291cmNlVHlwZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEFy
Z3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcHRyZGlmZl90IGJ1ZmZlck9mZnNldCA9IGRl
Y29kZXIub2Zmc2V0T2YodGhpcy0+YnVmZmVyKCkpOworICAgICAgICBpZiAoV1RGOjpPcHRpb25h
bDx2b2lkKj4gcHRyID0gZGVjb2Rlci5wdHJGb3JPZmZzZXQoYnVmZmVyT2Zmc2V0KSkKKyAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNvdXJjZVR5cGUqPigqcHRyKTsKKworICAg
ICAgICBTb3VyY2VUeXBlKiBwdHIgPSBvcGVyYXRvci0+KCktPmRlY29kZShkZWNvZGVyLCBhcmdz
Li4uKTsKKyAgICAgICAgZGVjb2Rlci5jYWNoZU9mZnNldChidWZmZXJPZmZzZXQsIHB0cik7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgVCogb3BlcmF0b3ItPigpCisgICAgewor
ICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgfQorCisgICAgY29uc3Qg
VCogb3BlcmF0b3ItPigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVm
ZmVyPFQ+KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291
cmNlVHlwZSA9IFNvdXJjZVR5cGU8VD4+CitzdHJ1Y3QgQ2FjaGVkUmVmUHRyIDogcHVibGljIENh
Y2hlZE9iamVjdDxSZWZQdHI8U291cmNlVHlwZT4sIENhY2hlZFJlZlB0cjxUPj4geworICAgIENh
Y2hlZFB0cjxULCBTb3VyY2VUeXBlPiBwdHI7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTb3VyY2VUeXBlKiBzcmMpCisgICAgeworICAgICAgICBwdHIuZW5jb2Rl
KGVuY29kZXIsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgUmVmUHRyPFNvdXJjZVR5cGU+IHNyYykKKyAgICB7CisgICAgICAgIGVuY29kZShl
bmNvZGVyLCBzcmMuZ2V0KCkpOworICAgIH0KKworICAgIFJlZlB0cjxTb3VyY2VUeXBlPiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGUqIGRl
Y29kZWRQdHIgPSBwdHIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBkZWNvZGVyLmFkZEZpbmFs
aXplcihkZWNvZGVyLm9mZnNldE9mKHB0ci5idWZmZXIoKSksIFs9XSB7IGRlcmVmSWZOb3ROdWxs
KGRlY29kZWRQdHIpOyB9KTsKKyAgICAgICAgcmVmSWZOb3ROdWxsKGRlY29kZWRQdHIpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoZGVjb2RlZFB0cik7CisgICAgfQorCisgICAgdm9pZCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgUmVmUHRyPFNvdXJjZVR5cGU+JiBzcmMpIGNvbnN0CisgICAg
eworICAgICAgICBzcmMgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNlVHlwZSA9IFNvdXJjZVR5cGU8VD4+CitzdHJ1Y3Qg
Q2FjaGVkV3JpdGVCYXJyaWVyIDogcHVibGljIENhY2hlZE9iamVjdDxXcml0ZUJhcnJpZXI8U291
cmNlVHlwZT4sIENhY2hlZFdyaXRlQmFycmllcjxUPj4geworICAgIENhY2hlZFB0cjxULCBTb3Vy
Y2VUeXBlPiBwdHI7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBX
cml0ZUJhcnJpZXI8U291cmNlVHlwZT4gc3JjKQorICAgIHsKKyAgICAgICAgcHRyLmVuY29kZShl
bmNvZGVyLCBzcmMuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFdyaXRlQmFycmllcjxTb3VyY2VUeXBlPiYgc3JjLCBjb25zdCBKU0NlbGwqIG93bmVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlVHlwZSogZGVjb2RlZFB0ciA9IHB0ci5kZWNv
ZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChkZWNvZGVkUHRyKQorICAgICAgICAgICAgc3JjLnNl
dChkZWNvZGVyLnZtKCksIG93bmVyLCBkZWNvZGVkUHRyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgSUMgPSAwLCB0eXBlbmFtZSBPSCA9IENyYXNoT25PdmVyZmxv
dz4KK3N0cnVjdCBDYWNoZWRWZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VmVj
dG9yPFNvdXJjZVR5cGU8VD4sIElDLCBPSD4sIENhY2hlZFZlY3RvcjxULCBJQywgT0g+PiB7Cisg
ICAgdW5zaWduZWQgc2l6ZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJQywgT0g+JiB2ZWN0b3IpCisgICAgeworICAgICAg
ICBzaXplID0gdmVjdG9yLnNpemUoKTsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxh
dGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGJ1
ZmZlcltpXSwgdmVjdG9yW2ldKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmdzPgorICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxTb3VyY2VUeXBl
PFQ+LCBJQywgT0g+JiB2ZWN0b3IsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAg
IHZlY3Rvci5yZXNpemVUb0ZpdChzaXplKTsKKyAgICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhp
cy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltp
XSwgdmVjdG9yW2ldLCBhcmdzLi4uKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
c3QsIHR5cGVuYW1lIFNuZD4KK3N0cnVjdCBDYWNoZWRQYWlyIDogcHVibGljIENhY2hlZE9iamVj
dDxzdGQ6OnBhaXI8U291cmNlVHlwZTxGc3Q+LCBTb3VyY2VUeXBlPFNuZD4+LCBDYWNoZWRQYWly
PEZzdCwgU25kPj4geworICAgIEZzdCBmc3Q7CisgICAgU25kIHNuZDsKKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZzdD4sIFNv
dXJjZVR5cGU8U25kPj4mIHBhaXIpCisgICAgeworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29k
ZXIsIGZzdCwgc3RkOjpnZXQ8MD4ocGFpcikpOworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29k
ZXIsIHNuZCwgc3RkOjpnZXQ8MT4ocGFpcikpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZzdD4sIFNvdXJjZVR5cGU8U25k
Pj4mIHBhaXIpIGNvbnN0CisgICAgeworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGZz
dCwgc3RkOjpnZXQ8MD4ocGFpcikpOworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIHNu
ZCwgc3RkOjpnZXQ8MT4ocGFpcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFz
aDxTb3VyY2VUeXBlPEtleT4+OjpIYXNoLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJh
aXRzPFNvdXJjZVR5cGU8S2V5Pj4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFp
dHM8U291cmNlVHlwZTxWYWx1ZT4+Pgorc3RydWN0IENhY2hlZEhhc2hNYXAgOiBwdWJsaWMgVmFy
aWFibGVMZW5ndGhPYmplY3Q8SGFzaE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFs
dWU+LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4sIENhY2hlZEhhc2hN
YXA8S2V5LCBWYWx1ZSwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7
CisKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkUGFpcjxLZXksIFZhbHVlPj4gZW50cmllczsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+CisgICAgdXNpbmcgTWFwID0gSGFz
aE1hcDxLLCBWLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz47CisKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBNYXA8U291cmNlVHlwZTxLZXk+
LCBTb3VyY2VUeXBlPFZhbHVlPj4mIG1hcCkKKyAgICB7CisgICAgICAgIGVudHJpZXMuc2l6ZSA9
IG1hcC5zaXplKCk7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50cmllcyk+IGVudHJp
ZXNWZWN0b3IobWFwLnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0IDogbWFwKQorICAgICAgICAgICAgZW50cmllc1ZlY3RvcltpKytd
ID0geyBpdC5rZXksIGl0LnZhbHVlIH07CisgICAgICAgIGVudHJpZXMuZW5jb2RlKGVuY29kZXIs
IGVudHJpZXNWZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKSBjb25zdAor
ICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShlbnRyaWVzKT4gZGVjb2RlZEVudHJp
ZXM7CisgICAgICAgIGVudHJpZXMuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRFbnRyaWVzKTsKKyAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogZGVjb2RlZEVudHJpZXMpCisgICAgICAgICAg
ICBtYXAuc2V0KHN0ZDo6Z2V0PDA+KHBhaXIpLCBzdGQ6OmdldDwxPihwYWlyKSk7CisgICAgfQor
fTsKKworc3RydWN0IENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsIDogcHVibGljIFZhcmlhYmxlTGVu
Z3RoT2JqZWN0PFVuaXF1ZWRTdHJpbmdJbXBsLCBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4gewor
ICAgIGJvb2wgaXM4Qml0IDogMTsKKyAgICBib29sIGlzU3ltYm9sIDogMTsKKyAgICBib29sIGlz
QXRvbWljIDogMTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisKKyAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCisgICAgeworICAgICAgICBp
c0F0b21pYyA9IHN0cmluZy5pc0F0b21pYygpOworICAgICAgICBpc1N5bWJvbCA9IHN0cmluZy5p
c1N5bWJvbCgpOworICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29uc3RfY2FzdDxTdHJpbmdJ
bXBsKj4oJnN0cmluZyk7CisgICAgICAgIGlmIChpc1N5bWJvbCkgeworICAgICAgICAgICAgU3lt
Ym9sSW1wbCogc3ltYm9sID0gc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCo+KGltcGwpOworICAgICAg
ICAgICAgaWYgKCFzeW1ib2wtPmlzTnVsbFN5bWJvbCgpKSB7CisgICAgICAgICAgICAgICAgSWRl
bnRpZmllciB1aWQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZlbmNvZGVyLnZtKCksIHN5bWJvbCk7
CisgICAgICAgICAgICAgICAgaW1wbCA9IGVuY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29r
VXBQdWJsaWNOYW1lKHVpZCkuc3RyaW5nKCkuaW1wbCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaXM4Qml0ID0gaW1wbC0+aXM4Qml0KCk7CisgICAgICAgIGxlbmd0aCA9
IGltcGwtPmxlbmd0aCgpOworCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBsZW5ndGg7CisgICAgICAgIGNvbnN0IHZv
aWQqIHBheWxvYWQ7CisgICAgICAgIGlmIChpczhCaXQpCisgICAgICAgICAgICBwYXlsb2FkID0g
aW1wbC0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXlsb2Fk
ID0gaW1wbC0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBzaXplICo9IDI7CisgICAgICAg
IH0KKworICAgICAgICB1aW50OF90KiBidWZmZXIgPSB0aGlzLT5hbGxvY2F0ZShlbmNvZGVyLCBz
aXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgcGF5bG9hZCwgc2l6ZSk7CisgICAgfQorCisg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgYXV0byBjcmVhdGUgPSBbJl0oY29uc3QgYXV0byogYnVmZmVyKSAtPiBVbmlx
dWVkU3RyaW5nSW1wbCogeworICAgICAgICAgICAgaWYgKCFpc1N5bWJvbCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQXRvbWljU3RyaW5nSW1wbDo6YWRkKGJ1ZmZlciwgbGVuZ3RoKS5sZWFrUmVm
KCk7CisKKyAgICAgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiAm
U3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5bWJvbCgpLmxlYWtSZWYoKTsKKworICAgICAgICAgICAg
SWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmRlY29kZXIudm0oKSwg
YnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgU3RyaW5nIHN0ciA9IGRlY29kZXIudm0oKS5w
cm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShpZGVudCktPnN0cmluZygpOworICAgICAg
ICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0ci5yZWxlYXNlSW1wbCgpLmdldCgpOworICAgICAg
ICAgICAgQVNTRVJUKGltcGwtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oaW1wbCk7CisgICAgICAgIH07CisKKyAgICAgICAg
aWYgKGlzOEJpdCkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVmZmVyPExDaGFy
PigpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh0aGlzLT5idWZmZXI8VUNoYXI+KCkpOworICAg
IH0KK307CisKK3N0cnVjdCBDYWNoZWRTdHJpbmdJbXBsIDogcHVibGljIFZhcmlhYmxlTGVuZ3Ro
T2JqZWN0PFN0cmluZ0ltcGwsIENhY2hlZFN0cmluZ0ltcGw+IHsKKyAgICBDYWNoZWRVbmlxdWVk
U3RyaW5nSW1wbCB1bmlxdWVkU3RyaW5nSW1wbDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFN0cmluZ0ltcGwmIGltcGwpCisgICAgeworICAgICAgICB1bmlxdWVk
U3RyaW5nSW1wbC5lbmNvZGUoZW5jb2RlciwgaW1wbCk7CisgICAgfQorCisgICAgU3RyaW5nSW1w
bCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dW5pcXVlZFN0cmluZ0ltcGwuZGVjb2RlKGRlY29kZXIpOworICAgIH0KK307CisKK3N0cnVjdCBD
YWNoZWRTdHJpbmcgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U3RyaW5nLCBDYWNoZWRT
dHJpbmc+IHsKKyAgICBDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+IGltcGw7
CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKKyAgICB7CisgICAgICAgIGltcGwuZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4oc3RyaW5nLmltcGwoKSkpOworICAgIH0KKworICAgIFN0cmluZyBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmco
KFJlZlB0cjxTdHJpbmdJbXBsPilpbXBsLmRlY29kZShkZWNvZGVyKSk7CisgICAgfQorCisgICAg
dm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiBkc3QpIGNvbnN0CisgICAgewor
ICAgICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKworc3RydWN0IENhY2hl
ZElkZW50aWZpZXIgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmllciwgQ2Fj
aGVkSWRlbnRpZmllcj4geworICAgIENhY2hlZFN0cmluZyBzdHJpbmc7CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAg
IHsKKyAgICAgICAgc3RyaW5nLmVuY29kZShlbmNvZGVyLCBpZGVudGlmaWVyLnN0cmluZygpKTsK
KyAgICB9CisKKyAgICBJZGVudGlmaWVyIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IHN0cmluZy5kZWNvZGUoZGVjb2Rlcik7CisgICAg
ICAgIGlmIChzdHIuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcigpOwor
CisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVyLnZtKCksIChVbmlx
dWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CisgICAgeworICAgICAgICBp
ZGVudCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IENhY2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdU
Rjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4sIENhY2hlZE9wdGlvbmFsPFQ+PiB7CisgICAgYm9v
bCBpc0VtcHR5OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RG
OjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiYgc291cmNlKQorICAgIHsKKyAgICAgICAgaXNFbXB0
eSA9ICFzb3VyY2U7CisKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2RlciktPmVuY29kZShl
bmNvZGVyLCAqc291cmNlKTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8
VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlz
RW1wdHkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVy
biB7IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpLT5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9
CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXVEY6Ok9wdGlvbmFsPFNvdXJj
ZVR5cGU8VD4+JiBkc3QpIGNvbnN0CisgICAgeworICAgICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rl
cik7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3Rk
Ojp1bmlxdWVfcHRyPFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCisgICAgeworICAgICAgICBpZiAo
IXNvdXJjZSkKKyAgICAgICAgICAgIGVuY29kZShlbmNvZGVyLCBXVEY6Om51bGxvcHQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbmNvZGUoZW5jb2RlciwgeyAqc291cmNlIH0pOworICAg
IH0KKworICAgIFNvdXJjZVR5cGU8VD4qIGRlY29kZUFzUHRyKERlY29kZXImIGRlY29kZXIpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIHJldHVybiB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKS0+ZGVjb2Rl
KGRlY29kZXIpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTaW1wbGVKdW1wVGFibGUgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU2ltcGxlSnVtcFRhYmxlLCBDYWNoZWRTaW1wbGVK
dW1wVGFibGU+IHsKKyAgICBpbnQzMl90IG1pbjsKKyAgICBDYWNoZWRWZWN0b3I8aW50MzJfdD4g
YnJhbmNoT2Zmc2V0czsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUpCisgICAgeworICAgICAgICBtaW4g
PSBqdW1wVGFibGUubWluOworICAgICAgICBicmFuY2hPZmZzZXRzLmVuY29kZShlbmNvZGVyLCBq
dW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIGp1bXBUYWJsZS5taW4gPSBtaW47CisgICAgICAgIGJyYW5jaE9mZnNldHMu
ZGVjb2RlKGRlY29kZXIsIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzKTsKKyAgICB9Cit9OworCitz
dHJ1Y3QgQ2FjaGVkU3RyaW5nSnVtcFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSwgQ2FjaGVkU3RyaW5nSnVtcFRhYmxlPiB7CisgICAgQ2FjaGVkSGFz
aE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkU3RyaW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlOjogT2Zmc2V0TG9jYXRpb24+IG9mZnNldFRhYmxlOworCisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSkK
KyAgICB7CisgICAgICAgIG9mZnNldFRhYmxlLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUub2Zm
c2V0VGFibGUpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBv
ZmZzZXRUYWJsZS5kZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKKyAgICB9
Cit9OworCitzdHJ1Y3QgQ2FjaGVkUmFyZURhdGEgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlu
a2VkQ29kZUJsb2NrOjpSYXJlRGF0YSwgQ2FjaGVkUmFyZURhdGE+IHsKKyAgICBDYWNoZWRWZWN0
b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAgICAvLyBKdW1w
IFRhYmxlcworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRTaW1wbGVKdW1wVGFibGU+IHN3aXRjaEp1
bXBUYWJsZXM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKKworICAgIENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZv
OjpGYXRQb3NpdGlvbj4gZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisKKyAgICBDYWNoZWRI
YXNoTWFwPHVuc2lnbmVkLCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxl
ckV4cHJlc3Npb25SYW5nZT4gdHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICBDYWNoZWRWZWN0b3I8
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9m
ZnNldHM7CisKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlu
a2VkQ29kZUJsb2NrOjpSYXJlRGF0YSYgcmFyZURhdGEpCisgICAgeworICAgICAgICBleGNlcHRp
b25IYW5kbGVycy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leGNlcHRpb25IYW5kbGVycyk7
CisgICAgICAgIHN3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3dp
dGNoSnVtcFRhYmxlcyk7CisgICAgICAgIHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVu
Y29kZXIsIHJhcmVEYXRhLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIGV4cHJl
c3Npb25JbmZvRmF0UG9zaXRpb25zLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX2V4cHJlc3Np
b25JbmZvRmF0UG9zaXRpb25zKTsKKyAgICAgICAgdHlwZVByb2ZpbGVySW5mb01hcC5lbmNvZGUo
ZW5jb2RlciwgcmFyZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICAgICAgb3BQcm9m
aWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1f
b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOworICAgIH0KKworICAgIFVubGlu
a2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEqIHJhcmVEYXRhID0gbmV3
IFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSB7IH07CisgICAgICAgIGV4Y2VwdGlvbkhhbmRs
ZXJzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycyk7CisgICAg
ICAgIHN3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMpOworICAgICAgICBzdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNvZGVy
LCByYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgZXhwcmVzc2lv
bkluZm9GYXRQb3NpdGlvbnMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX2V4cHJlc3Npb25J
bmZvRmF0UG9zaXRpb25zKTsKKyAgICAgICAgdHlwZVByb2ZpbGVySW5mb01hcC5kZWNvZGUoZGVj
b2RlciwgcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAgIG9wUHJvZmls
ZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9v
cFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7CisgICAgICAgIHJldHVybiByYXJl
RGF0YTsKKyAgICB9CisKK307CisKK3N0cnVjdCBDYWNoZWRCaXRWZWN0b3IgOiBwdWJsaWMgVmFy
aWFibGVMZW5ndGhPYmplY3Q8Qml0VmVjdG9yLCBDYWNoZWRCaXRWZWN0b3I+IHsKKyAgICB1bnNp
Z25lZCBzaXplOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQml0
VmVjdG9yJiBiaXRWZWN0b3IpCisgICAgeworICAgICAgICBzaXplID0gYml0VmVjdG9yLnNpemUo
KTsKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6
ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGJpdFZlY3Rvci5iaXRzKCksIHNpemUpOworICAg
IH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBCaXRWZWN0b3ImIGJpdFZlY3RvcikgY29u
c3QKKyAgICB7CisgICAgICAgIGJpdFZlY3Rvci5lbnN1cmVTaXplKHNpemUpOworICAgICAgICBt
ZW1jcHkoYml0VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVmZmVyKCksIHNpemUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZh
dWx0SGFzaDxUPjo6SGFzaD4KK3N0cnVjdCBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9i
amVjdDxIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+LCBDYWNoZWRIYXNoU2V0PFQsIEhh
c2hBcmc+PiB7CisgICAgQ2FjaGVkVmVjdG9yPFQ+IGVudHJpZXM7CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+
JiBzZXQpCisgICAgeworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKGVudHJpZXMpPiBlbnRy
aWVzVmVjdG9yKHNldC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBpdGVtIDogc2V0KQorICAgICAgICAgICAgZW50cmllc1ZlY3Rvcltp
KytdID0gaXRlbTsKKyAgICAgICAgZW50cmllcy5lbmNvZGUoZW5jb2RlciwgZW50cmllc1ZlY3Rv
cik7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldDxT
b3VyY2VUeXBlPFQ+LCBIYXNoQXJnPiYgc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNl
VHlwZTxkZWNsdHlwZShlbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKKyAgICAgICAgZW50cmllcy5k
ZWNvZGUoZGVjb2RlciwgZW50cmllc1ZlY3Rvcik7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYg
aXRlbSA6IGVudHJpZXNWZWN0b3IpCisgICAgICAgICAgICBzZXQuYWRkKGl0ZW0pOworICAgIH0K
K307CisKK3N0cnVjdCBDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1YmxpYyBW
YXJpYWJsZUxlbmd0aE9iamVjdDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSwgQ2FjaGVkQ29u
c3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IHsKKyAgICB1bnNpZ25lZCBjb25zdGFudDsKKyAgICBD
YWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50
aWZpZXJSZXBIYXNoPiBzZXQ7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpCisgICAgeworICAgICAgICBj
b25zdGFudCA9IHN0ZDo6Z2V0PDE+KGVudHJ5KTsKKyAgICAgICAgc2V0LmVuY29kZShlbmNvZGVy
LCBzdGQ6OmdldDwwPihlbnRyeSkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBlbnRyeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHN0ZDo6Z2V0PDE+KGVudHJ5KSA9IGNvbnN0YW50OworICAgICAgICBzZXQuZGVj
b2RlKGRlY29kZXIsIHN0ZDo6Z2V0PDA+KGVudHJ5KSk7CisgICAgfQorfTsKKworc3RydWN0IENh
Y2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFZhcmlhYmxlRW52
aXJvbm1lbnQsIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ+IHsKKworICAgIGJvb2wgaXNFdmVy
eXRoaW5nQ2FwdHVyZWQ7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5p
cXVlZFN0cmluZ0ltcGw+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnksIElkZW50aWZpZXJSZXBI
YXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+LCBWYXJpYWJsZUVudmly
b25tZW50RW50cnlIYXNoVHJhaXRzPiBtYXA7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCisgICAgeworICAgICAgICBp
c0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkOworICAgICAg
ICBtYXAuZW5jb2RlKGVuY29kZXIsIGVudi5tX21hcCk7CisgICAgfQorCisgICAgdm9pZCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52KSBjb25zdAorICAg
IHsKKyAgICAgICAgZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgPSBpc0V2ZXJ5dGhpbmdDYXB0
dXJlZDsKKyAgICAgICAgbWFwLmRlY29kZShkZWNvZGVyLCBlbnYubV9tYXApOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJjZVR5cGUgPSBTb3VyY2VUeXBl
PFQ+Pgorc3RydWN0IENhY2hlZEFycmF5IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNv
dXJjZVR5cGUqLCBDYWNoZWRBcnJheTxULCBTb3VyY2VUeXBlPj4geworICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVR5cGUqIGFycmF5LCB1bnNpZ25lZCBzaXpl
KQorICAgIHsKKyAgICAgICAgVCogZHN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5j
b2Rlciwgc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
CisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGRzdFtpXSwgYXJyYXlbaV0pOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgU291cmNlVHlwZSogYXJyYXksIHVuc2lnbmVkIHNpemUsIEFyZ3Mu
Li4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRl
bXBsYXRlIGJ1ZmZlcjxUPigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBidWZmZXJbaV0sIGFy
cmF5W2ldLCBhcmdzLi4uKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU2NvcGVkQXJndW1l
bnRzVGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBDYWNo
ZWRTY29wZWRBcmd1bWVudHNUYWJsZT4geworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBDYWNo
ZWRBcnJheTxTY29wZU9mZnNldD4gYXJndW1lbnRzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgU2NvcGVkQXJndW1lbnRzVGFibGUmIHNjb3BlZEFyZ3VtZW50c1Rh
YmxlKQorICAgIHsKKyAgICAgICAgbGVuZ3RoID0gc2NvcGVkQXJndW1lbnRzVGFibGUubV9sZW5n
dGg7CisgICAgICAgIGFyZ3VtZW50cy5lbmNvZGUoZW5jb2Rlciwgc2NvcGVkQXJndW1lbnRzVGFi
bGUubV9hcmd1bWVudHMuZ2V0KCksIGxlbmd0aCk7CisgICAgfQorCisgICAgU2NvcGVkQXJndW1l
bnRzVGFibGUqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
U2NvcGVkQXJndW1lbnRzVGFibGUqIHNjb3BlZEFyZ3VtZW50c1RhYmxlID0gU2NvcGVkQXJndW1l
bnRzVGFibGU6OmNyZWF0ZShkZWNvZGVyLnZtKCksIGxlbmd0aCk7CisgICAgICAgIGFyZ3VtZW50
cy5kZWNvZGUoZGVjb2Rlciwgc2NvcGVkQXJndW1lbnRzVGFibGUtPm1fYXJndW1lbnRzLmdldCgp
LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gc2NvcGVkQXJndW1lbnRzVGFibGU7CisgICAgfQor
fTsKKworc3RydWN0IENhY2hlZFN5bWJvbFRhYmxlRW50cnkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0
PFN5bWJvbFRhYmxlRW50cnksIENhY2hlZFN5bWJvbFRhYmxlRW50cnk+IHsKKyAgICBpbnRwdHJf
dCBiaXRzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN5bWJvbFRhYmxlRW50
cnkmIHN5bWJvbFRhYmxlRW50cnkpCisgICAgeworICAgICAgICBiaXRzID0gc3ltYm9sVGFibGVF
bnRyeS5tX2JpdHMgfCBTeW1ib2xUYWJsZUVudHJ5OjpTbGltRmxhZzsKKyAgICB9CisKKyAgICB2
b2lkIGRlY29kZShEZWNvZGVyJiwgU3ltYm9sVGFibGVFbnRyeSYgc3ltYm9sVGFibGVFbnRyeSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlRW50cnkubV9iaXRzID0gYml0czsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3ltYm9sVGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0
PFN5bWJvbFRhYmxlLCBDYWNoZWRTeW1ib2xUYWJsZT4geworICAgIENhY2hlZEhhc2hNYXA8Q2Fj
aGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgQ2FjaGVkU3ltYm9sVGFibGVFbnRy
eSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBs
Pj4sIFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzPiBtYXA7CisgICAgU2NvcGVPZmZzZXQgbWF4
U2NvcGVPZmZzZXQ7CisgICAgdW5zaWduZWQgdXNlc05vblN0cmljdEV2YWwgOiAxOworICAgIHVu
c2lnbmVkIG5lc3RlZExleGljYWxTY29wZSA6IDE7CisgICAgdW5zaWduZWQgc2NvcGVUeXBlIDog
MzsKKyAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBjYWNoZWQgdGhpcyBldmVudHVhbGx5Pwor
ICAgIC8vIENhY2hlZFB0cjxTeW1ib2xUYWJsZVJhcmVEYXRhPiByYXJlRGF0YTsKKyAgICBDYWNo
ZWRQdHI8Q2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU+IGFyZ3VtZW50czsKKworICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVCghc3ltYm9sVGFibGUubV9yYXJlRGF0YSk7CisgICAgICAg
IG1hcC5lbmNvZGUoZW5jb2Rlciwgc3ltYm9sVGFibGUubV9tYXApOworICAgICAgICBtYXhTY29w
ZU9mZnNldCA9IHN5bWJvbFRhYmxlLm1fbWF4U2NvcGVPZmZzZXQ7CisgICAgICAgIHVzZXNOb25T
dHJpY3RFdmFsID0gc3ltYm9sVGFibGUubV91c2VzTm9uU3RyaWN0RXZhbDsKKyAgICAgICAgbmVz
dGVkTGV4aWNhbFNjb3BlID0gc3ltYm9sVGFibGUubV9uZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAg
ICAgIHNjb3BlVHlwZSA9IHN5bWJvbFRhYmxlLm1fc2NvcGVUeXBlOworICAgICAgICBhcmd1bWVu
dHMuZW5jb2RlKGVuY29kZXIsIHN5bWJvbFRhYmxlLm1fYXJndW1lbnRzLmdldCgpKTsKKyAgICB9
CisKKyAgICBTeW1ib2xUYWJsZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRl
KGRlY29kZXIudm0oKSk7CisgICAgICAgIG1hcC5kZWNvZGUoZGVjb2Rlciwgc3ltYm9sVGFibGUt
Pm1fbWFwKTsKKyAgICAgICAgc3ltYm9sVGFibGUtPm1fbWF4U2NvcGVPZmZzZXQgPSBtYXhTY29w
ZU9mZnNldDsKKyAgICAgICAgc3ltYm9sVGFibGUtPm1fdXNlc05vblN0cmljdEV2YWwgPSB1c2Vz
Tm9uU3RyaWN0RXZhbDsKKyAgICAgICAgc3ltYm9sVGFibGUtPm1fbmVzdGVkTGV4aWNhbFNjb3Bl
ID0gbmVzdGVkTGV4aWNhbFNjb3BlOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9zY29wZVR5cGUg
PSBzY29wZVR5cGU7CisgICAgICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29wZWRBcmd1bWVu
dHNUYWJsZSA9IGFyZ3VtZW50cy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzY29wZWRB
cmd1bWVudHNUYWJsZSkKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cy5zZXQo
ZGVjb2Rlci52bSgpLCBzeW1ib2xUYWJsZSwgc2NvcGVkQXJndW1lbnRzVGFibGUpOworICAgICAg
ICByZXR1cm4gc3ltYm9sVGFibGU7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEpTVmFsdWU7
CitzdHJ1Y3QgQ2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5IDogcHVibGljIENhY2hlZE9iamVjdDxK
U0ltbXV0YWJsZUJ1dHRlcmZseSwgQ2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PiB7CisgICAgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgdW5pb24g
eworICAgICAgICBDYWNoZWRBcnJheTxkb3VibGU+IGNhY2hlZERvdWJsZXM7CisgICAgICAgIENh
Y2hlZEFycmF5PENhY2hlZEpTVmFsdWUsIFdyaXRlQmFycmllcjxVbmtub3duPj4gY2FjaGVkVmFs
dWVzOworICAgIH07CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0ltbXV0
YWJsZUJ1dHRlcmZseSYgaW1tdXRhYmxlQnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgbGVuZ3Ro
ID0gaW1tdXRhYmxlQnV0dGVyZmx5Lmxlbmd0aCgpOworICAgICAgICBpbmRleGluZ1R5cGUgPSBp
bW11dGFibGVCdXR0ZXJmbHkuaW5kZXhpbmdNb2RlKCk7IC8vIHRoaXMgaXMgY29uZnVzaW5nLCBu
b3Qgc3VyZSB3aHkgd2UgaGF2ZSB0byB1c2UgaW5kZXhpbmdNb2RlIHZzIGluZGV4aW5nVHlwZQor
ICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBjYWNoZWRE
b3VibGVzLmVuY29kZShlbmNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+
Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY2FjaGVkVmFsdWVzLmVuY29kZShlbmNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHkudG9C
dXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEoKSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBK
U0ltbXV0YWJsZUJ1dHRlcmZseSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJ
bW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0ZShkZWNvZGVyLnZtKCksIGluZGV4aW5nVHlwZSwgbGVu
Z3RoKTsKKyAgICAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAg
Y2FjaGVkRG91Ymxlcy5kZWNvZGUoZGVjb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LT50b0J1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBsZW5ndGgsIGltbXV0YWJsZUJ1dHRl
cmZseSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhY2hlZFZhbHVlcy5kZWNvZGUoZGVj
b2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0
YSgpLCBsZW5ndGgsIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgIHJldHVybiBpbW11dGFi
bGVCdXR0ZXJmbHk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFJlZ0V4cCA6IHB1YmxpYyBD
YWNoZWRPYmplY3Q8UmVnRXhwLCBDYWNoZWRSZWdFeHA+IHsKKyAgICBDYWNoZWRTdHJpbmcgcGF0
dGVyblN0cmluZzsKKyAgICBSZWdFeHBGbGFncyBmbGFnczsKKworICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFJlZ0V4cCYgcmVnRXhwKQorICAgIHsKKyAgICAgICAgcGF0
dGVyblN0cmluZy5lbmNvZGUoZW5jb2RlciwgcmVnRXhwLm1fcGF0dGVyblN0cmluZyk7CisgICAg
ICAgIGZsYWdzID0gcmVnRXhwLm1fZmxhZ3M7CisgICAgfQorCisgICAgUmVnRXhwKiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuIHsg
cGF0dGVyblN0cmluZy5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICAgICAgcmV0dXJuIFJlZ0V4cDo6
Y3JlYXRlKGRlY29kZXIudm0oKSwgcGF0dGVybiwgZmxhZ3MpOworICAgIH0KK307CisKK3N0cnVj
dCBDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFRl
bXBsYXRlT2JqZWN0RGVzY3JpcHRvciwgQ2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPiB7
CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZywgND4gcmF3U3RyaW5nczsKKyAgICBDYWNo
ZWRWZWN0b3I8Q2FjaGVkT3B0aW9uYWw8Q2FjaGVkU3RyaW5nPiwgND4gY29va2VkU3RyaW5nczsK
KworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvciYgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yKQorICAgIHsKKyAgICAgICAgcmF3
U3RyaW5ncy5lbmNvZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLnJhd1N0cmlu
Z3MoKSk7CisgICAgICAgIGNvb2tlZFN0cmluZ3MuZW5jb2RlKGVuY29kZXIsIHRlbXBsYXRlT2Jq
ZWN0RGVzY3JpcHRvci5jb29rZWRTdHJpbmdzKCkpOworICAgIH0KKworICAgIFJlZjxUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpTdHJpbmdWZWN0b3IgZGVjb2RlZFJh
d1N0cmluZ3M7CisgICAgICAgIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6T3B0aW9uYWxTdHJp
bmdWZWN0b3IgZGVjb2RlZENvb2tlZFN0cmluZ3M7CisgICAgICAgIHJhd1N0cmluZ3MuZGVjb2Rl
KGRlY29kZXIsIGRlY29kZWRSYXdTdHJpbmdzKTsKKyAgICAgICAgY29va2VkU3RyaW5ncy5kZWNv
ZGUoZGVjb2RlciwgZGVjb2RlZENvb2tlZFN0cmluZ3MpOworICAgICAgICByZXR1cm4gVGVtcGxh
dGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkUmF3U3RyaW5ncyksIFdU
Rk1vdmUoZGVjb2RlZENvb2tlZFN0cmluZ3MpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVk
QmlnSW50IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEpTQmlnSW50LCBDYWNoZWRCaWdJ
bnQ+IHsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgYm9vbCBzaWduOworCisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgSlNCaWdJbnQmIGJpZ0ludCkKKyAgICB7CisgICAgICAg
IGxlbmd0aCA9IGJpZ0ludC5sZW5ndGgoKTsKKyAgICAgICAgc2lnbiA9IGJpZ0ludC5zaWduKCk7
CisKKyAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSA9IHNpemVvZihKU0JpZ0ludDo6RGlnaXRbbGVuZ3RoXSk7CisgICAgICAg
IHRoaXMtPmFsbG9jYXRlKGVuY29kZXIsIHNpemUpOworICAgICAgICBtZW1jcHkodGhpcy0+YnVm
ZmVyKCksIGJpZ0ludC5kYXRhU3RvcmFnZSgpLCBzaXplKTsKKyAgICB9CisKKyAgICBKU0JpZ0lu
dCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU0JpZ0lu
dCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoZGVjb2Rlci52
bSgpLCBsZW5ndGgpOworICAgICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7CisgICAgICAgIG1l
bWNweShiaWdJbnQtPmRhdGFTdG9yYWdlKCksIHRoaXMtPmJ1ZmZlcigpLCBzaXplb2YoSlNCaWdJ
bnQ6OkRpZ2l0W2xlbmd0aF0pKTsKKyAgICAgICAgcmV0dXJuIGJpZ0ludDsKKyAgICB9Cit9Owor
CitzdHJ1Y3QgQ2FjaGVkSlNWYWx1ZSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxXcml0
ZUJhcnJpZXI8VW5rbm93bj4sIENhY2hlZEpTVmFsdWU+IHsKKyAgICBlbnVtIGNsYXNzIEVuY29k
ZWRUeXBlIDogdWludDhfdCB7CisgICAgICAgIEpTVmFsdWUsCisgICAgICAgIFN5bWJvbFRhYmxl
LAorICAgICAgICBTdHJpbmcsCisgICAgICAgIEltbXV0YWJsZUJ1dHRlcmZseSwKKyAgICAgICAg
UmVnRXhwLAorICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IsCisgICAgICAgIEJpZ0lu
dCwKKyAgICB9OworCisgICAgRW5jb2RlZFR5cGUgdHlwZTsKKworICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEpTVmFsdWUgdiA9IHZhbHVlLmdldCgpOworCisgICAgICAgIGlmICghdi5pc0Nl
bGwoKSB8fCB2LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpK
U1ZhbHVlOworICAgICAgICAgICAgKnRoaXMtPmFsbG9jYXRlPEVuY29kZWRKU1ZhbHVlPihlbmNv
ZGVyKSA9IEpTVmFsdWU6OmVuY29kZSh2KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHYuYXNDZWxsKCk7CisgICAgICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvID0gY2VsbC0+Y2xhc3NJbmZvKGVuY29kZXIudm0oKSk7CisKKyAg
ICAgICAgaWYgKGNsYXNzSW5mbyA9PSBTeW1ib2xUYWJsZTo6aW5mbygpKSB7CisgICAgICAgICAg
ICB0eXBlID0gRW5jb2RlZFR5cGU6OlN5bWJvbFRhYmxlOworICAgICAgICAgICAgdGhpcy0+YWxs
b2NhdGU8Q2FjaGVkU3ltYm9sVGFibGU+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmpzQ2Fz
dDxTeW1ib2xUYWJsZSo+KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gSlNTdHJpbmc6OmluZm8oKSkgeworICAgICAgICAg
ICAgdHlwZSA9IEVuY29kZWRUeXBlOjpTdHJpbmc7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiBp
bXBsID0gYXNTdHJpbmcoY2VsbCktPnRyeUdldFZhbHVlKCkuaW1wbCgpOworICAgICAgICAgICAg
QVNTRVJUKCFpbXBsIHx8ICFpbXBsLT5pc1N5bWJvbCgpKTsKKyAgICAgICAgICAgIHRoaXMtPmFs
bG9jYXRlPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIs
ICppbXBsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChj
bGFzc0luZm8gPT0gSlNJbW11dGFibGVCdXR0ZXJmbHk6OmluZm8oKSkgeworICAgICAgICAgICAg
dHlwZSA9IEVuY29kZWRUeXBlOjpJbW11dGFibGVCdXR0ZXJmbHk7CisgICAgICAgICAgICB0aGlz
LT5hbGxvY2F0ZTxDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHk+KGVuY29kZXIpLT5lbmNvZGUoZW5j
b2RlciwgKmpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gUmVnRXhwOjpp
bmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6UmVnRXhwOworICAgICAg
ICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkUmVnRXhwPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29k
ZXIsICpqc0Nhc3Q8UmVnRXhwKj4oY2VsbCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
cjo6aW5mbygpKSB7CisgICAgICAgICAgICB0eXBlID0gRW5jb2RlZFR5cGU6OlRlbXBsYXRlT2Jq
ZWN0RGVzY3JpcHRvcjsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFRlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvcj4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCBqc0Nhc3Q8SlNUZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3IqPihjZWxsKS0+ZGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gSlNCaWdJbnQ6
OmluZm8oKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpCaWdJbnQ7CisgICAg
ICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRCaWdJbnQ+KGVuY29kZXIpLT5lbmNvZGUoZW5j
b2RlciwgKmpzQ2FzdDxKU0JpZ0ludCo+KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZSwgY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKKyAgICB7CisgICAgICAgIEpTVmFs
dWUgdjsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6
OkpTVmFsdWU6CisgICAgICAgICAgICB2ID0gSlNWYWx1ZTo6ZGVjb2RlKCp0aGlzLT5idWZmZXI8
RW5jb2RlZEpTVmFsdWU+KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5j
b2RlZFR5cGU6OlN5bWJvbFRhYmxlOgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNo
ZWRTeW1ib2xUYWJsZT4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN0cmluZzogeworICAgICAgICAgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIGltcGwgPSB0aGlzLT5idWZmZXI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+KCkt
PmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIHYgPSBKU1N0cmluZzo6Y3JlYXRlKGRlY29k
ZXIudm0oKSwgYWRvcHRSZWYoKmltcGwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseToKKyAgICAgICAg
ICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PigpLT5kZWNvZGUo
ZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6
UmVnRXhwOgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRSZWdFeHA+KCktPmRl
Y29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRU
eXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6CisgICAgICAgICAgICB2ID0gSlNUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShkZWNvZGVyLnZtKCksIHRoaXMtPmJ1ZmZlcjxDYWNo
ZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KCktPmRlY29kZShkZWNvZGVyKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6QmlnSW50OgorICAgICAgICAg
ICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRCaWdJbnQ+KCktPmRlY29kZShkZWNvZGVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZS5zZXQoZGVjb2Rl
ci52bSgpLCBvd25lciwgdik7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEluc3RydWN0aW9u
U3RyZWFtIDogcHVibGljIENhY2hlZE9iamVjdDxJbnN0cnVjdGlvblN0cmVhbSwgQ2FjaGVkSW5z
dHJ1Y3Rpb25TdHJlYW0+IHsKKyAgICBDYWNoZWRWZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IGluc3RydWN0aW9uczsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBzdHJlYW0pCisgICAgeworICAgICAgICBp
bnN0cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIHN0cmVhbS5tX2luc3RydWN0aW9ucyk7CisgICAg
fQorCisgICAgSW5zdHJ1Y3Rpb25TdHJlYW0qIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBpbnN0cnVjdGlvbnNWZWN0b3I7CisgICAgICAgIGluc3RydWN0aW9ucy5kZWNvZGUoZGVjb2Rl
ciwgaW5zdHJ1Y3Rpb25zVmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJbnN0cnVjdGlvblN0
cmVhbShXVEZNb3ZlKGluc3RydWN0aW9uc1ZlY3RvcikpOworICAgIH0KK307CisKK3N0cnVjdCBD
YWNoZWRNZXRhZGF0YVRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZE1ldGFkYXRh
VGFibGUsIENhY2hlZE1ldGFkYXRhVGFibGU+IHsKKyAgICBib29sIGhhc01ldGFkYXRhOworICAg
IHN0ZDo6YXJyYXk8dW5zaWduZWQsIFVubGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJs
ZUVudHJpZXM+IG1ldGFkYXRhOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVu
bGlua2VkTWV0YWRhdGFUYWJsZSYgbWV0YWRhdGFUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtZXRhZGF0YVRhYmxlLm1faXNGaW5hbGl6ZWQpOworICAgICAgICBoYXNNZXRhZGF0YSA9IG1l
dGFkYXRhVGFibGUubV9oYXNNZXRhZGF0YTsKKyAgICAgICAgaWYgKCFoYXNNZXRhZGF0YSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRh
ZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllczsgaS0tOykKKyAgICAgICAgICAgIG1ldGFk
YXRhW2ldID0gbWV0YWRhdGFUYWJsZS5idWZmZXIoKVtpXTsKKyAgICB9CisKKyAgICB2b2lkIGRl
Y29kZShEZWNvZGVyJiwgVW5saW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YVRhYmxlKSBjb25z
dAorICAgIHsKKyAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2lzRmluYWxpemVkID0gdHJ1ZTsKKyAg
ICAgICAgbWV0YWRhdGFUYWJsZS5tX2lzTGlua2VkID0gZmFsc2U7CisgICAgICAgIG1ldGFkYXRh
VGFibGUubV9oYXNNZXRhZGF0YSA9IGhhc01ldGFkYXRhOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBVbmxpbmtlZE1ldGFkYXRhVGFibGU6OnNfb2Zmc2V0VGFibGVFbnRyaWVzOyBpLS07KQor
ICAgICAgICAgICAgbWV0YWRhdGFUYWJsZS5idWZmZXIoKVtpXSA9IG1ldGFkYXRhW2ldOworICAg
IH0KK307CisKK3N0cnVjdCBDYWNoZWRTb3VyY2VPcmlnaW4gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0
PFNvdXJjZU9yaWdpbiwgQ2FjaGVkU291cmNlT3JpZ2luPiB7CisgICAgQ2FjaGVkU3RyaW5nIHN0
cmluZzsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZU9y
aWdpbiYgc291cmNlT3JpZ2luKQorICAgIHsKKyAgICAgICAgc3RyaW5nLmVuY29kZShlbmNvZGVy
LCBzb3VyY2VPcmlnaW4uc3RyaW5nKCkpOworICAgIH0KKworICAgIFNvdXJjZU9yaWdpbiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTb3VyY2VP
cmlnaW4geyBzdHJpbmcuZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQorfTsKKworc3RydWN0IENh
Y2hlZFRleHRQb3NpdGlvbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VGV4dFBvc2l0aW9uLCBDYWNo
ZWRUZXh0UG9zaXRpb24+IHsKKyAgICBpbnQgbGluZTsKKyAgICBpbnQgY29sdW1uOworCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYsIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24pCisgICAgewor
ICAgICAgICBsaW5lID0gdGV4dFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKKyAgICAg
ICAgY29sdW1uID0gdGV4dFBvc2l0aW9uLm1fY29sdW1uLnplcm9CYXNlZEludCgpOworICAgIH0K
KworICAgIFRleHRQb3NpdGlvbiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gVGV4dFBvc2l0aW9uIHsgT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChs
aW5lKSwgT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb2x1bW4pIH07CisgICAgfQor
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIENhY2hlZFR5cGU+
CitzdHJ1Y3QgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8
U291cmNlVHlwZSwgQ2FjaGVkVHlwZT4geworICAgIGJvb2wgdmFsaWRhdGVkIDogMTsKKyAgICBD
YWNoZWRTb3VyY2VPcmlnaW4gc291cmNlT3JpZ2luOworICAgIENhY2hlZFN0cmluZyB1cmw7Cisg
ICAgQ2FjaGVkU3RyaW5nIHNvdXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRTdHJpbmcgc291
cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRUZXh0UG9zaXRpb24gc3RhcnRQb3Np
dGlvbjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVBy
b3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIHZhbGlkYXRlZCA9IHNvdXJj
ZVByb3ZpZGVyLmlzVmFsaWQoKTsKKyAgICAgICAgc291cmNlT3JpZ2luLmVuY29kZShlbmNvZGVy
LCBzb3VyY2VQcm92aWRlci5zb3VyY2VPcmlnaW4oKSk7CisgICAgICAgIHVybC5lbmNvZGUoZW5j
b2Rlciwgc291cmNlUHJvdmlkZXIudXJsKCkpOworICAgICAgICBzb3VyY2VVUkxEaXJlY3RpdmUu
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZVVSTCgpKTsKKyAgICAgICAgc291
cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291
cmNlTWFwcGluZ1VSTCgpKTsKKyAgICAgICAgc3RhcnRQb3NpdGlvbi5lbmNvZGUoZW5jb2Rlciwg
c291cmNlUHJvdmlkZXIuc3RhcnRQb3NpdGlvbigpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAodmFsaWRhdGVkKQorICAgICAgICAgICAgc291cmNlUHJvdmlk
ZXIuc2V0VmFsaWQoKTsKKyAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNlVVJMRGlyZWN0
aXZlKHNvdXJjZVVSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOworICAgICAgICBzb3VyY2VQ
cm92aWRlci5zZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKHNvdXJjZU1hcHBpbmdVUkxEaXJl
Y3RpdmUuZGVjb2RlKGRlY29kZXIpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5n
U291cmNlUHJvdmlkZXIgOiBwdWJsaWMgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdT
b3VyY2VQcm92aWRlciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBC
YXNlID0gQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRlciwgQ2Fj
aGVkU3RyaW5nU291cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZTsKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ1NvdXJjZVByb3Zp
ZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVy
LCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIHNvdXJjZS5lbmNvZGUoZW5jb2Rlciwgc291cmNl
UHJvdmlkZXIuc291cmNlKCkudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgU3RyaW5nU291cmNl
UHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlclNvdXJjZVR5
cGUgc291cmNlVHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBkZWNvZGVkU291cmNl
ID0gc291cmNlLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRT
b3VyY2VPcmlnaW4gPSBzb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOworICAgICAgICBTdHJp
bmcgZGVjb2RlZFVSTCA9IHVybC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFRleHRQb3NpdGlv
biBkZWNvZGVkU3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24uZGVjb2RlKGRlY29kZXIpOwor
CisgICAgICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJp
bmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmln
aW4sIGRlY29kZWRVUkwsIGRlY29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsKKyAgICAg
ICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuICZzb3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CisgICAgfQorfTsKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKK3N0cnVjdCBDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDog
cHVibGljIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRl
ciwgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4geworICAgIHVzaW5nIEJhc2UgPSBD
YWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENhY2hl
ZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJBc3Nl
bWJseVNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6
OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIGRhdGEuZW5jb2RlKGVu
Y29kZXIsIHNvdXJjZVByb3ZpZGVyLmRhdGEoKSk7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlT
b3VyY2VQcm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBWZWN0b3I8dWludDhfdD4gZGVjb2RlZERhdGE7CisgICAgICAgIFNvdXJjZU9yaWdpbiBk
ZWNvZGVkU291cmNlT3JpZ2luID0gc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKKyAgICAg
ICAgU3RyaW5nIGRlY29kZWRVUkwgPSB1cmwuZGVjb2RlKGRlY29kZXIpOworCisgICAgICAgIGRh
dGEuZGVjb2RlKGRlY29kZXIsIGRlY29kZWREYXRhKTsKKworICAgICAgICBSZWY8V2ViQXNzZW1i
bHlTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBXZWJBc3NlbWJseVNvdXJjZVByb3Zp
ZGVyOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkRGF0YSksIGRlY29kZWRTb3VyY2VPcmlnaW4sIGRl
Y29kZWRVUkwpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlUHJvdmlkZXIu
Z2V0KCkpOworCisgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIubGVha1JlZigpOworICAg
IH0KK307CisjZW5kaWYKKworc3RydWN0IENhY2hlZFNvdXJjZVByb3ZpZGVyIDogcHVibGljIFZh
cmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZVByb3ZpZGVyLCBDYWNoZWRTb3VyY2VQcm92aWRlcj4g
eworICAgIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlOworCisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3Zp
ZGVyKQorICAgIHsKKyAgICAgICAgc291cmNlVHlwZSA9IHNvdXJjZVByb3ZpZGVyLnNvdXJjZVR5
cGUoKTsKKyAgICAgICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7CisgICAgICAgIGNhc2UgU291cmNl
UHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVy
U291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkU3Ry
aW5nU291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBTdHJpbmdTb3VyY2VQcm92aWRlciY+KHNvdXJjZVByb3ZpZGVyKSk7CisgICAg
ICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGNhc2UgU291
cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAgICAgIHRoaXMtPmFs
bG9jYXRlPENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUo
ZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVy
Jj4oc291cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgU291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7CisgICAgICAg
IGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNv
dXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgcmV0dXJuIHRoaXMt
PmJ1ZmZlcjxDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2RlKGRlY29kZXIsIHNv
dXJjZVR5cGUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgY2FzZSBTb3VyY2VQ
cm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5OgorICAgICAgICAgICAgcmV0dXJuIHRoaXMt
PmJ1ZmZlcjxDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPigpLT5kZWNvZGUoZGVjb2Rl
cik7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBDYWNoZVR5cGU+CitzdHJ1Y3QgQ2FjaGVkVW5saW5rZWRT
b3VyY2VDb2RlU2hhcGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZVR5cGUsICBDYWNoZVR5
cGU+IHsKKyAgICBDYWNoZWRQdHI8Q2FjaGVkU291cmNlUHJvdmlkZXI+IHByb3ZpZGVyOworICAg
IGludCBzdGFydE9mZnNldDsKKyAgICBpbnQgZW5kT2Zmc2V0OworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQor
ICAgIHsKKyAgICAgICAgcHJvdmlkZXIuZW5jb2RlKGVuY29kZXIsIHNvdXJjZUNvZGUubV9wcm92
aWRlci5nZXQoKSk7CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc291cmNlQ29kZS5zdGFydE9mZnNl
dCgpOworICAgICAgICBlbmRPZmZzZXQgPSBzb3VyY2VDb2RlLmVuZE9mZnNldCgpOworICAgIH0K
KworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU291cmNlQ29kZSYg
c291cmNlQ29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHNvdXJjZUNvZGUubV9wcm92aWRlciA9
IHByb3ZpZGVyLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgc291cmNlQ29kZS5tX3N0YXJ0T2Zm
c2V0ID0gc3RhcnRPZmZzZXQ7CisgICAgICAgIHNvdXJjZUNvZGUubV9lbmRPZmZzZXQgPSBlbmRP
ZmZzZXQ7CisgICAgfQorfTsKKworCitzdHJ1Y3QgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlIDog
cHVibGljIENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFVubGlua2VkU291cmNlQ29kZSwg
Q2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlPiB7IH07CisKK3N0cnVjdCBDYWNoZWRTb3VyY2VDb2Rl
IDogcHVibGljIENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFNvdXJjZUNvZGUsIENhY2hl
ZFNvdXJjZUNvZGU+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2Rl
U2hhcGU8U291cmNlQ29kZSwgQ2FjaGVkU291cmNlQ29kZT47CisKKyAgICBpbnQgZmlyc3RMaW5l
OworICAgIGludCBzdGFydENvbHVtbjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCisgICAgeworICAgICAgICBCYXNlOjpl
bmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZSk7CisgICAgICAgIGZpcnN0TGluZSA9IHNvdXJjZUNv
ZGUuZmlyc3RMaW5lKCkuemVyb0Jhc2VkSW50KCk7CisgICAgICAgIHN0YXJ0Q29sdW1uID0gc291
cmNlQ29kZS5zdGFydENvbHVtbigpLnplcm9CYXNlZEludCgpOworICAgIH0KKworICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIGNvbnN0Cisg
ICAgeworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlQ29kZSk7CisgICAgICAg
IHNvdXJjZUNvZGUubV9maXJzdExpbmUgPSBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50
KGZpcnN0TGluZSk7CisgICAgICAgIHNvdXJjZUNvZGUubV9zdGFydENvbHVtbiA9IE9yZGluYWxO
dW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoc3RhcnRDb2x1bW4pOworICAgIH0KK307CisKK3N0cnVj
dCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+IHsKKworICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwor
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0Owor
CisgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIGxpbmVDb3VudDsK
KyAgICB1bnNpZ25lZCB1bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0OworICAgIHVuc2lnbmVkIHVu
bGlua2VkQm9keVN0YXJ0Q29sdW1uOworICAgIHVuc2lnbmVkIHVubGlua2VkQm9keUVuZENvbHVt
bjsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGg7
CisgICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIHR5cGVQ
cm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0
OworICAgIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50OworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJl
czsKKyAgICBTb3VyY2VQYXJzZU1vZGUgc291cmNlUGFyc2VNb2RlOworICAgIHVuc2lnbmVkIGlz
SW5TdHJpY3RDb250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCBoYXNDYXB0dXJlZFZhcmlhYmxlcyA6
IDE7CisgICAgdW5zaWduZWQgaXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAgIHVuc2lnbmVkIGlz
QnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBjb25zdHJ1
Y3RBYmlsaXR5OiAxOworICAgIHVuc2lnbmVkIGNvbnN0cnVjdG9yS2luZCA6IDI7CisgICAgdW5z
aWduZWQgZnVuY3Rpb25Nb2RlIDogMjsgLy8gRnVuY3Rpb25Nb2RlCisgICAgdW5zaWduZWQgc2Ny
aXB0TW9kZTogMTsgLy8gSlNQYXJzZXJTY3JpcHRNb2RlCisgICAgdW5zaWduZWQgc3VwZXJCaW5k
aW5nIDogMTsKKyAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGU6IDI7CisKKyAgICBDYWNo
ZWRTb3VyY2VDb2RlIGNsYXNzU291cmNlOworCisgICAgQ2FjaGVkSWRlbnRpZmllciBuYW1lOwor
ICAgIENhY2hlZElkZW50aWZpZXIgZWNtYU5hbWU7CisgICAgQ2FjaGVkSWRlbnRpZmllciBpbmZl
cnJlZE5hbWU7CisKKyAgICBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IHBhcmVudFNjb3BlVERa
VmFyaWFibGVzOworCisgICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJs
b2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiB1bmxpbmtlZENvZGVCbG9ja0ZvckNhbGw7
CisgICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrPiB1bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9j
a1R5cGU+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrIDogcHVibGljIENhY2hlZE9iamVjdDxDb2Rl
QmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tUeXBlPiB7CisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJik7CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYs
IFVubGlua2VkQ29kZUJsb2NrJikgY29uc3Q7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Jl
Z2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyOworICAgIFZpcnR1YWxS
ZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcjsKKworICAgIHVuc2lnbmVkIHVzZXNFdmFsIDog
MTsKKyAgICB1bnNpZ25lZCBpc1N0cmljdE1vZGUgOiAxOworICAgIHVuc2lnbmVkIGlzQ29uc3Ry
dWN0b3IgOiAxOworICAgIHVuc2lnbmVkIGhhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1
bnNpZ25lZCBpc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWduZWQgc3VwZXJCaW5kaW5n
IDogMTsKKyAgICB1bnNpZ25lZCBzY3JpcHRNb2RlOiAxOworICAgIHVuc2lnbmVkIGlzQXJyb3dG
dW5jdGlvbkNvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIGlzQ2xhc3NDb250ZXh0IDogMTsKKyAg
ICB1bnNpZ25lZCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzIDogMTsKKyAgICB1bnNp
Z25lZCBjb25zdHJ1Y3RvcktpbmQgOiAyOworICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlw
ZSA6IDI7CisgICAgdW5zaWduZWQgZXZhbENvbnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBo
YXNUYWlsQ2FsbHMgOiAxOworCisgICAgdW5zaWduZWQgbGluZUNvdW50OworICAgIHVuc2lnbmVk
IGVuZENvbHVtbjsKKworICAgIGludCBudW1WYXJzOworICAgIGludCBudW1DYWxsZWVMb2NhbHM7
CisgICAgaW50IG51bVBhcmFtZXRlcnM7CisKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXM7Cisg
ICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZTsKKyAgICBDb2RlVHlwZSBjb2RlVHlwZTsKKwor
ICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExpbmtUaW1lQ29uc3RhbnRDb3VudD4gbGlua1RpbWVD
b25zdGFudHM7CisgICAgQ2FjaGVkTWV0YWRhdGFUYWJsZSBtZXRhZGF0YTsKKworICAgIENhY2hl
ZE9wdGlvbmFsPENhY2hlZFJhcmVEYXRhPiByYXJlRGF0YTsKKworICAgIENhY2hlZFN0cmluZyBz
b3VyY2VVUkxEaXJlY3RpdmU7CisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkxEaXJl
Y3RpdmU7CisKKyAgICBDYWNoZWRQdHI8Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW0+IGluc3RydWN0
aW9uczsKKyAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4ganVtcFRh
cmdldHM7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRKU1ZhbHVlPiBj
b25zdGFudFJlZ2lzdGVyczsKKyAgICBDYWNoZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uPiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CisgICAgQ2FjaGVkVmVjdG9y
PEV4cHJlc3Npb25SYW5nZUluZm8+IGV4cHJlc3Npb25JbmZvOworICAgIENhY2hlZEhhc2hNYXA8
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PiBvdXRPZkxpbmVKdW1wVGFyZ2V0czsKKwor
ICAgIENhY2hlZFZlY3RvcjxDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gY29uc3Rh
bnRJZGVudGlmaWVyU2V0czsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSWRlbnRpZmllcj4gaWRl
bnRpZmllcnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZEJpdFZlY3Rvcj4gYml0VmVjdG9yczsK
KyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4+IGZ1bmN0aW9uRGVjbHM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFdyaXRlQmFycmll
cjxDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBmdW5jdGlvbkV4cHJzOworfTsKKworc3RydWN0
IENhY2hlZFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jaywgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jaz4geworICAgIHVzaW5nIEJh
c2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLCBDYWNoZWRQcm9n
cmFtQ29kZUJsb2NrPjsKKyAgICB1c2luZyBCYXNlOjplbmNvZGU7CisKKyAgICBDYWNoZWRWYXJp
YWJsZUVudmlyb25tZW50IHZhckRlY2xhcmF0aW9uczsKKyAgICBDYWNoZWRWYXJpYWJsZUVudmly
b25tZW50IGxleGljYWxEZWNsYXJhdGlvbnM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7
CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2spOworICAgICAgICB2YXJE
ZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3ZhckRlY2xhcmF0aW9ucyk7
CisgICAgICAgIGxleGljYWxEZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X2xleGljYWxEZWNsYXJhdGlvbnMpOworICAgIH0KKworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZp
bmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVy
LCAqY29kZUJsb2NrKTsKKyAgICAgICAgdmFyRGVjbGFyYXRpb25zLmRlY29kZShkZWNvZGVyLCBj
b2RlQmxvY2stPm1fdmFyRGVjbGFyYXRpb25zKTsKKyAgICAgICAgbGV4aWNhbERlY2xhcmF0aW9u
cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2xleGljYWxEZWNsYXJhdGlvbnMpOworICAg
ICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRNb2R1bGVD
b2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jaywgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hl
ZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2ssIENhY2hlZE1vZHVsZUNv
ZGVCbG9jaz47CisgICAgdXNpbmcgQmFzZTo6ZW5jb2RlOworCisgICAgaW50IG1vZHVsZUVudmly
b25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OworCisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
JiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrKTsKKyAgICAgICAgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0
ZXJPZmZzZXQgPSBjb2RlQmxvY2subV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3Rh
bnRSZWdpc3Rlck9mZnNldDsKKyAgICB9CisKKyAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KGRlY29kZXIudm0oKS5o
ZWFwKSkgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBC
YXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIGNvZGVCbG9jay0+bV9t
b2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IG1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OworICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRFdmFsQ29kZUJsb2Nr
IDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEV2YWxDb2RlQmxvY2ssIENhY2hlZEV2
YWxDb2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2Vk
RXZhbENvZGVCbG9jaywgQ2FjaGVkRXZhbENvZGVCbG9jaz47CisgICAgdXNpbmcgQmFzZTo6ZW5j
b2RlOworCisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiB2YXJpYWJsZXM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBmdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkRXZhbENvZGVC
bG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jayk7CisgICAgICAgIHZhcmlhYmxlcy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1f
dmFyaWFibGVzKTsKKyAgICAgICAgZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMuZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsKKyAgICB9CisK
KyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KGRlY29kZXIudm0o
KS5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAgICAgICAg
Y29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBCYXNlOjpk
ZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIHZhcmlhYmxlcy5kZWNvZGUoZGVj
b2RlciwgY29kZUJsb2NrLT5tX3ZhcmlhYmxlcyk7CisgICAgICAgIGZ1bmN0aW9uSG9pc3RpbmdD
YW5kaWRhdGVzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fZnVuY3Rpb25Ib2lzdGluZ0Nh
bmRpZGF0ZXMpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KK307CisKK3N0cnVj
dCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jaywgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s+IHsKKyAgICB1c2lu
ZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2ssIENhY2hl
ZEZ1bmN0aW9uQ29kZUJsb2NrPjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAg
ICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2spOworICAgIH0KKworICAgIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4oZGVjb2Rlci52
bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBC
YXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBjb2RlQmxv
Y2s7CisgICAgfQorfTsKKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
OjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hl
ZEZ1bmN0aW9uQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIs
IGRlY29kZXIudm0oKS51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBj
YWNoZWRDb2RlQmxvY2spCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ2Fj
aGVkQ29kZUJsb2NrVHlwZUltcGw7CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxv
Y2tUeXBlSW1wbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBlID0g
Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jazsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRD
b2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1
c2luZyB0eXBlID0gQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOworfTsKKwordGVtcGxhdGU8Pgorc3Ry
dWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkRXZhbENvZGVCbG9jaz4geworICAg
IHVzaW5nIHR5cGUgPSBDYWNoZWRFdmFsQ29kZUJsb2NrOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3VzaW5nIENhY2hlZENvZGVCbG9ja1R5cGUgPSB0eXBlbmFtZSBDYWNoZWRDb2RlQmxv
Y2tUeXBlSW1wbDxUPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwg
dHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgVW5saW5rZWRDb2Rl
QmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJs
b2NrVHlwZT4mIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rlci52bSgpLCBzdHJ1
Y3R1cmUpCisgICAgLCBtX2luc3RydWN0aW9ucyhjYWNoZWRDb2RlQmxvY2suaW5zdHJ1Y3Rpb25z
LmRlY29kZShkZWNvZGVyKSkKKyAgICAsIG1fbGl2ZW5lc3MobnVsbHB0cikKKyAgICAsIG1fdGhp
c1JlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay50aGlzUmVnaXN0ZXIpCisgICAgLCBtX3Njb3BlUmVn
aXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnNjb3BlUmVnaXN0ZXIpCisgICAgLCBtX2dsb2JhbE9iamVj
dFJlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay5nbG9iYWxPYmplY3RSZWdpc3RlcikKKworICAgICwg
bV9zb3VyY2VVUkxEaXJlY3RpdmUoY2FjaGVkQ29kZUJsb2NrLnNvdXJjZVVSTERpcmVjdGl2ZS5k
ZWNvZGUoZGVjb2RlcikpCisgICAgLCBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoY2FjaGVk
Q29kZUJsb2NrLnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKQorCisg
ICAgLCBtX3VzZXNFdmFsKGNhY2hlZENvZGVCbG9jay51c2VzRXZhbCkKKyAgICAsIG1faXNTdHJp
Y3RNb2RlKGNhY2hlZENvZGVCbG9jay5pc1N0cmljdE1vZGUpCisgICAgLCBtX2lzQ29uc3RydWN0
b3IoY2FjaGVkQ29kZUJsb2NrLmlzQ29uc3RydWN0b3IpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFy
aWFibGVzKGNhY2hlZENvZGVCbG9jay5oYXNDYXB0dXJlZFZhcmlhYmxlcykKKyAgICAsIG1faXNC
dWlsdGluRnVuY3Rpb24oY2FjaGVkQ29kZUJsb2NrLmlzQnVpbHRpbkZ1bmN0aW9uKQorICAgICwg
bV9zdXBlckJpbmRpbmcoY2FjaGVkQ29kZUJsb2NrLnN1cGVyQmluZGluZykKKyAgICAsIG1fc2Ny
aXB0TW9kZShjYWNoZWRDb2RlQmxvY2suc2NyaXB0TW9kZSkKKyAgICAsIG1faXNBcnJvd0Z1bmN0
aW9uQ29udGV4dChjYWNoZWRDb2RlQmxvY2suaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCkKKyAgICAs
IG1faXNDbGFzc0NvbnRleHQoY2FjaGVkQ29kZUJsb2NrLmlzQ2xhc3NDb250ZXh0KQorICAgICwg
bV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKGNhY2hlZENvZGVCbG9jay53YXNDb21w
aWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVk
Q29kZUJsb2NrLmNvbnN0cnVjdG9yS2luZCkKKyAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNh
Y2hlZENvZGVCbG9jay5kZXJpdmVkQ29udGV4dFR5cGUpCisgICAgLCBtX2V2YWxDb250ZXh0VHlw
ZShjYWNoZWRDb2RlQmxvY2suZXZhbENvbnRleHRUeXBlKQorICAgICwgbV9oYXNUYWlsQ2FsbHMo
Y2FjaGVkQ29kZUJsb2NrLmhhc1RhaWxDYWxscykKKyAgICAsIG1fbGluZUNvdW50KGNhY2hlZENv
ZGVCbG9jay5saW5lQ291bnQpCisgICAgLCBtX2VuZENvbHVtbihjYWNoZWRDb2RlQmxvY2suZW5k
Q29sdW1uKQorICAgICwgbV9udW1WYXJzKGNhY2hlZENvZGVCbG9jay5udW1WYXJzKQorICAgICwg
bV9udW1DYWxsZWVMb2NhbHMoY2FjaGVkQ29kZUJsb2NrLm51bUNhbGxlZUxvY2FscykKKyAgICAs
IG1fbnVtUGFyYW1ldGVycyhjYWNoZWRDb2RlQmxvY2subnVtUGFyYW1ldGVycykKKyAgICAsIG1f
ZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKQorICAgICwgbV9wYXJzZU1vZGUoY2Fj
aGVkQ29kZUJsb2NrLnBhcnNlTW9kZSkKKyAgICAsIG1fY29kZVR5cGUoY2FjaGVkQ29kZUJsb2Nr
LmNvZGVUeXBlKQorICAgICwgbV9yYXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURhdGEuZGVj
b2RlQXNQdHIoZGVjb2RlcikpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgQ2Fj
aGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgVW5saW5rZWRDb2RlQmxvY2smIGNvZGVCbG9jaykgY29uc3QKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGktLTspCisgICAg
ICAgIGNvZGVCbG9jay5tX2xpbmtUaW1lQ29uc3RhbnRzW2ldID0gbGlua1RpbWVDb25zdGFudHNb
aV07CisKKyAgICBtZXRhZGF0YS5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEp
OworICAgIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyLCBjb2RlQmxv
Y2subV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk7CisgICAgY29uc3RhbnRSZWdpc3RlcnMu
ZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50UmVnaXN0ZXJzLCAmY29kZUJsb2Nr
KTsKKyAgICBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uZGVjb2RlKGRlY29kZXIs
IGNvZGVCbG9jay5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgZXhw
cmVzc2lvbkluZm8uZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2V4cHJlc3Npb25JbmZvKTsK
KyAgICBvdXRPZkxpbmVKdW1wVGFyZ2V0cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fb3V0
T2ZMaW5lSnVtcFRhcmdldHMpOworICAgIGp1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBjb2Rl
QmxvY2subV9qdW1wVGFyZ2V0cyk7CisgICAgY29uc3RhbnRJZGVudGlmaWVyU2V0cy5kZWNvZGUo
ZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRJZGVudGlmaWVyU2V0cyk7CisgICAgaWRlbnRp
ZmllcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2lkZW50aWZpZXJzKTsKKyAgICBiaXRW
ZWN0b3JzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0b3JzKTsKKyAgICBmdW5j
dGlvbkRlY2xzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkRlY2xzLCAmY29k
ZUJsb2NrKTsKKyAgICBmdW5jdGlvbkV4cHJzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9m
dW5jdGlvbkV4cHJzLCAmY29kZUJsb2NrKTsKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVy
LCBjb25zdCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBC
YXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhE
ZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2smIGNhY2hlZENvZGVC
bG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitB
TFdBWVNfSU5MSU5FIFVubGlua2VkRXZhbENvZGVCbG9jazo6VW5saW5rZWRFdmFsQ29kZUJsb2Nr
KERlY29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hlZEV2YWxDb2RlQmxvY2smIGNhY2hlZENvZGVC
bG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkRXZhbENvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUmIGV4ZWN1dGFibGUpCit7CisgICAg
Zmlyc3RMaW5lT2Zmc2V0ID0gZXhlY3V0YWJsZS5tX2ZpcnN0TGluZU9mZnNldDsKKyAgICBsaW5l
Q291bnQgPSBleGVjdXRhYmxlLm1fbGluZUNvdW50OworICAgIHVubGlua2VkRnVuY3Rpb25OYW1l
U3RhcnQgPSBleGVjdXRhYmxlLm1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKKyAgICB1bmxp
bmtlZEJvZHlTdGFydENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEJvZHlTdGFydENvbHVt
bjsKKyAgICB1bmxpbmtlZEJvZHlFbmRDb2x1bW4gPSBleGVjdXRhYmxlLm1fdW5saW5rZWRCb2R5
RW5kQ29sdW1uOworICAgIHN0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3N0YXJ0T2Zmc2V0Owor
ICAgIHNvdXJjZUxlbmd0aCA9IGV4ZWN1dGFibGUubV9zb3VyY2VMZW5ndGg7CisgICAgcGFyYW1l
dGVyc1N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAg
ICB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGluZ1N0
YXJ0T2Zmc2V0OworICAgIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlw
ZVByb2ZpbGluZ0VuZE9mZnNldDsKKyAgICBwYXJhbWV0ZXJDb3VudCA9IGV4ZWN1dGFibGUubV9w
YXJhbWV0ZXJDb3VudDsKKworICAgIGZlYXR1cmVzID0gZXhlY3V0YWJsZS5tX2ZlYXR1cmVzOwor
ICAgIHNvdXJjZVBhcnNlTW9kZSA9IGV4ZWN1dGFibGUubV9zb3VyY2VQYXJzZU1vZGU7CisKKyAg
ICBpc0luU3RyaWN0Q29udGV4dCA9IGV4ZWN1dGFibGUubV9pc0luU3RyaWN0Q29udGV4dDsKKyAg
ICBoYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGV4ZWN1dGFibGUubV9oYXNDYXB0dXJlZFZhcmlhYmxl
czsKKyAgICBpc0J1aWx0aW5GdW5jdGlvbiA9IGV4ZWN1dGFibGUubV9pc0J1aWx0aW5GdW5jdGlv
bjsKKyAgICBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGV4ZWN1dGFibGUubV9p
c0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcjsKKyAgICBjb25zdHJ1Y3RBYmlsaXR5ID0g
ZXhlY3V0YWJsZS5tX2NvbnN0cnVjdEFiaWxpdHk7CisgICAgY29uc3RydWN0b3JLaW5kID0gZXhl
Y3V0YWJsZS5tX2NvbnN0cnVjdG9yS2luZDsKKyAgICBmdW5jdGlvbk1vZGUgPSBleGVjdXRhYmxl
Lm1fZnVuY3Rpb25Nb2RlOworICAgIHNjcmlwdE1vZGUgPSBleGVjdXRhYmxlLm1fc2NyaXB0TW9k
ZTsKKyAgICBzdXBlckJpbmRpbmcgPSBleGVjdXRhYmxlLm1fc3VwZXJCaW5kaW5nOworICAgIGRl
cml2ZWRDb250ZXh0VHlwZSA9IGV4ZWN1dGFibGUubV9kZXJpdmVkQ29udGV4dFR5cGU7CisKKyAg
ICBjbGFzc1NvdXJjZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX2NsYXNzU291cmNlKTsK
KworICAgIG5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubmFtZSgpKTsKKyAgICBlY21h
TmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5lY21hTmFtZSgpKTsKKyAgICBpbmZlcnJl
ZE5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUuaW5mZXJyZWROYW1lKCkpOworCisgICAg
cGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUucGFyZW50
U2NvcGVURFpWYXJpYWJsZXMoKSk7CisKKyAgICB1bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZW5j
b2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwpOworICAg
IHVubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxl
Lm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworfQorCitBTFdBWVNfSU5MSU5FIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAoreworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgZW52
OworICAgIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLmRlY29kZShkZWNvZGVyLCBlbnYpOworCisg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgpLmhl
YXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBlbnYsICp0aGlzKTsKKyAg
ICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworCisgICAgY2xhc3NT
b3VyY2UuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fY2xhc3NTb3VyY2UpOworICAgIHVu
bGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV91bmxp
bmtlZENvZGVCbG9ja0ZvckNhbGwsIGV4ZWN1dGFibGUpOworICAgIHVubGlua2VkQ29kZUJsb2Nr
Rm9yQ29uc3RydWN0LmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX3VubGlua2VkQ29kZUJs
b2NrRm9yQ29uc3RydWN0LCBleGVjdXRhYmxlKTsKKworICAgIHJldHVybiBleGVjdXRhYmxlOwor
fQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVudmlyb25tZW50JiBw
YXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJiBj
YWNoZWRFeGVjdXRhYmxlKQorICAgIDogQmFzZShkZWNvZGVyLnZtKCksIGRlY29kZXIudm0oKS51
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fZmlyc3RM
aW5lT2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUuZmlyc3RMaW5lT2Zmc2V0KQorICAgICwgbV9saW5l
Q291bnQoY2FjaGVkRXhlY3V0YWJsZS5saW5lQ291bnQpCisgICAgLCBtX3VubGlua2VkRnVuY3Rp
b25OYW1lU3RhcnQoY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KQor
ICAgICwgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbihjYWNoZWRFeGVjdXRhYmxlLnVubGlua2Vk
Qm9keVN0YXJ0Q29sdW1uKQorICAgICwgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW4oY2FjaGVkRXhl
Y3V0YWJsZS51bmxpbmtlZEJvZHlFbmRDb2x1bW4pCisgICAgLCBtX3N0YXJ0T2Zmc2V0KGNhY2hl
ZEV4ZWN1dGFibGUuc3RhcnRPZmZzZXQpCisgICAgLCBtX3NvdXJjZUxlbmd0aChjYWNoZWRFeGVj
dXRhYmxlLnNvdXJjZUxlbmd0aCkKKyAgICAsIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KGNhY2hl
ZEV4ZWN1dGFibGUucGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KQorICAgICwgbV90eXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQpCisg
ICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmls
aW5nRW5kT2Zmc2V0KQorICAgICwgbV9wYXJhbWV0ZXJDb3VudChjYWNoZWRFeGVjdXRhYmxlLnBh
cmFtZXRlckNvdW50KQorICAgICwgbV9mZWF0dXJlcyhjYWNoZWRFeGVjdXRhYmxlLmZlYXR1cmVz
KQorICAgICwgbV9zb3VyY2VQYXJzZU1vZGUoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VQYXJzZU1v
ZGUpCisgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KGNhY2hlZEV4ZWN1dGFibGUuaXNJblN0cmlj
dENvbnRleHQpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGNhY2hlZEV4ZWN1dGFibGUu
aGFzQ2FwdHVyZWRWYXJpYWJsZXMpCisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hlZEV4
ZWN1dGFibGUuaXNCdWlsdGluRnVuY3Rpb24pCisgICAgLCBtX2lzQnVpbHRpbkRlZmF1bHRDbGFz
c0NvbnN0cnVjdG9yKGNhY2hlZEV4ZWN1dGFibGUuaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3Ry
dWN0b3IpCisgICAgLCBtX2NvbnN0cnVjdEFiaWxpdHkoY2FjaGVkRXhlY3V0YWJsZS5jb25zdHJ1
Y3RBYmlsaXR5KQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVkRXhlY3V0YWJsZS5jb25z
dHJ1Y3RvcktpbmQpCisgICAgLCBtX2Z1bmN0aW9uTW9kZShjYWNoZWRFeGVjdXRhYmxlLmZ1bmN0
aW9uTW9kZSkKKyAgICAsIG1fc2NyaXB0TW9kZShjYWNoZWRFeGVjdXRhYmxlLnNjcmlwdE1vZGUp
CisgICAgLCBtX3N1cGVyQmluZGluZyhjYWNoZWRFeGVjdXRhYmxlLnN1cGVyQmluZGluZykKKyAg
ICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNhY2hlZEV4ZWN1dGFibGUuZGVyaXZlZENvbnRleHRU
eXBlKQorCisgICAgLCBtX25hbWUoY2FjaGVkRXhlY3V0YWJsZS5uYW1lLmRlY29kZShkZWNvZGVy
KSkKKyAgICAsIG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0YWJsZS5lY21hTmFtZS5kZWNvZGUoZGVj
b2RlcikpCisgICAgLCBtX2luZmVycmVkTmFtZShjYWNoZWRFeGVjdXRhYmxlLmluZmVycmVkTmFt
ZS5kZWNvZGUoZGVjb2RlcikpCisKKyAgICAsIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMoZGVj
b2Rlci52bSgpLm1fY29tcGFjdFZhcmlhYmxlTWFwLT5nZXQocGFyZW50U2NvcGVURFpWYXJpYWJs
ZXMpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBD
YWNoZWRDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxD
b2RlQmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJiBjb2RlQmxvY2spCit7CisgICAgdGhpc1JlZ2lz
dGVyID0gY29kZUJsb2NrLm1fdGhpc1JlZ2lzdGVyOworICAgIHNjb3BlUmVnaXN0ZXIgPSBjb2Rl
QmxvY2subV9zY29wZVJlZ2lzdGVyOworICAgIGdsb2JhbE9iamVjdFJlZ2lzdGVyID0gY29kZUJs
b2NrLm1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisgICAgdXNlc0V2YWwgPSBjb2RlQmxvY2subV91
c2VzRXZhbDsKKyAgICBpc1N0cmljdE1vZGUgPSBjb2RlQmxvY2subV9pc1N0cmljdE1vZGU7Cisg
ICAgaXNDb25zdHJ1Y3RvciA9IGNvZGVCbG9jay5tX2lzQ29uc3RydWN0b3I7CisgICAgaGFzQ2Fw
dHVyZWRWYXJpYWJsZXMgPSBjb2RlQmxvY2subV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICBp
c0J1aWx0aW5GdW5jdGlvbiA9IGNvZGVCbG9jay5tX2lzQnVpbHRpbkZ1bmN0aW9uOworICAgIHN1
cGVyQmluZGluZyA9IGNvZGVCbG9jay5tX3N1cGVyQmluZGluZzsKKyAgICBzY3JpcHRNb2RlID0g
Y29kZUJsb2NrLm1fc2NyaXB0TW9kZTsKKyAgICBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID0gY29k
ZUJsb2NrLm1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dDsKKyAgICBpc0NsYXNzQ29udGV4dCA9IGNv
ZGVCbG9jay5tX2lzQ2xhc3NDb250ZXh0OworICAgIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09w
Y29kZXMgPSBjb2RlQmxvY2subV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOworICAg
IGNvbnN0cnVjdG9yS2luZCA9IGNvZGVCbG9jay5tX2NvbnN0cnVjdG9yS2luZDsKKyAgICBkZXJp
dmVkQ29udGV4dFR5cGUgPSBjb2RlQmxvY2subV9kZXJpdmVkQ29udGV4dFR5cGU7CisgICAgZXZh
bENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZXZhbENvbnRleHRUeXBlOworICAgIGhhc1RhaWxD
YWxscyA9IGNvZGVCbG9jay5tX2hhc1RhaWxDYWxsczsKKyAgICBsaW5lQ291bnQgPSBjb2RlQmxv
Y2subV9saW5lQ291bnQ7CisgICAgZW5kQ29sdW1uID0gY29kZUJsb2NrLm1fZW5kQ29sdW1uOwor
ICAgIG51bVZhcnMgPSBjb2RlQmxvY2subV9udW1WYXJzOworICAgIG51bUNhbGxlZUxvY2FscyA9
IGNvZGVCbG9jay5tX251bUNhbGxlZUxvY2FsczsKKyAgICBudW1QYXJhbWV0ZXJzID0gY29kZUJs
b2NrLm1fbnVtUGFyYW1ldGVyczsKKyAgICBmZWF0dXJlcyA9IGNvZGVCbG9jay5tX2ZlYXR1cmVz
OworICAgIHBhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKKyAgICBjb2RlVHlwZSA9
IGNvZGVCbG9jay5tX2NvZGVUeXBlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVD
b25zdGFudENvdW50OyBpLS07KQorICAgICAgICBsaW5rVGltZUNvbnN0YW50c1tpXSA9IGNvZGVC
bG9jay5tX2xpbmtUaW1lQ29uc3RhbnRzW2ldOworCisgICAgbWV0YWRhdGEuZW5jb2RlKGVuY29k
ZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhKTsKKyAgICByYXJlRGF0YS5lbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrLm1fcmFyZURhdGEpOworCisgICAgc291cmNlVVJMRGlyZWN0aXZlLmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2subV9zb3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsKKyAgICBzb3Vy
Y2VNYXBwaW5nVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9zb3VyY2VV
UkxEaXJlY3RpdmUuaW1wbCgpKTsKKworICAgIGluc3RydWN0aW9ucy5lbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrLm1faW5zdHJ1Y3Rpb25zLmdldCgpKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMpOworICAgIGNvbnN0YW50UmVnaXN0ZXJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24pOworICAgIGV4cHJlc3Npb25JbmZvLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9leHByZXNzaW9uSW5mbyk7CisgICAganVtcFRhcmdldHMuZW5jb2RlKGVuY29kZXIsIGNvZGVC
bG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBvdXRPZkxpbmVKdW1wVGFyZ2V0cy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOworCisgICAgY29uc3RhbnRJ
ZGVudGlmaWVyU2V0cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRJZGVudGlm
aWVyU2V0cyk7CisgICAgaWRlbnRpZmllcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2lk
ZW50aWZpZXJzKTsKKyAgICBiaXRWZWN0b3JzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9i
aXRWZWN0b3JzKTsKKyAgICBmdW5jdGlvbkRlY2xzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9mdW5jdGlvbkRlY2xzKTsKKyAgICBmdW5jdGlvbkV4cHJzLmVuY29kZShlbmNvZGVyLCBjb2Rl
QmxvY2subV9mdW5jdGlvbkV4cHJzKTsKK30KKworc3RydWN0IENhY2hlZFNvdXJjZUNvZGVLZXkg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZUNvZGVLZXksIENhY2hlZFNvdXJjZUNvZGVLZXk+
IHsKKyAgICBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGUgc291cmNlQ29kZTsKKyAgICBDYWNoZWRT
dHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBmbGFnczsKKyAgICB1bnNpZ25lZCBoYXNoOworICAg
IGludCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworCisgICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAg
IHsKKyAgICAgICAgc291cmNlQ29kZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fc291cmNlQ29kZSk7
CisgICAgICAgIG5hbWUuZW5jb2RlKGVuY29kZXIsIGtleS5tX25hbWUpOworICAgICAgICBmbGFn
cyA9IGtleS5tX2ZsYWdzLm1fZmxhZ3M7CisgICAgICAgIGhhc2ggPSBrZXkuaGFzaCgpOworICAg
ICAgICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0ga2V5Lm1fZnVu
Y3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlS2V5JiBrZXkpIGNvbnN0CisgICAg
eworICAgICAgICBzb3VyY2VDb2RlLmRlY29kZShkZWNvZGVyLCBrZXkubV9zb3VyY2VDb2RlKTsK
KyAgICAgICAgbmFtZS5kZWNvZGUoZGVjb2Rlciwga2V5Lm1fbmFtZSk7CisgICAgICAgIGtleS5t
X2ZsYWdzLm1fZmxhZ3MgPSBmbGFnczsKKyAgICAgICAga2V5Lm1faGFzaCA9IGhhc2g7CisgICAg
ICAgIGtleS5tX2Z1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBmdW5j
dGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KK3N0cnVjdCBDYWNoZUVudHJ5IHsK
KyAgICBDYWNoZWRTb3VyY2VDb2RlS2V5IGtleTsKKyAgICBDYWNoZWRQdHI8Q2FjaGVkQ29kZUJs
b2NrVHlwZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+PiBjb2RlQmxvY2s7CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgY29uc3QgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKj4gcGFpcikKKyAgICB7CisgICAgICAgIGtleS5lbmNvZGUoZW5j
b2RlciwgcGFpci5maXJzdCk7CisgICAgICAgIGNvZGVCbG9jay5lbmNvZGUoZW5jb2RlciwgcGFp
ci5zZWNvbmQpOworICAgIH0KKworICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIFNvdXJjZUNvZGVLZXkgZGVjb2RlZEtleTsKKyAgICAgICAga2V5LmRlY29kZShkZWNv
ZGVyLCBkZWNvZGVkS2V5KTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShkZWNvZGVkS2V5KSwg
Y29kZUJsb2NrLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBlbmNvZGVDb2Rl
QmxvY2soRW5jb2RlciYgZW5jb2RlciwgU291cmNlQ29kZUtleSBrZXksIGNvbnN0IFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgYXV0byogZW50cnkgPSBlbmNvZGVyLnRlbXBs
YXRlIG1hbGxvYzxDYWNoZUVudHJ5PFVubGlua2VkQ29kZUJsb2NrVHlwZT4+KCk7CisgICAgZW50
cnktPmVuY29kZShlbmNvZGVyLCAgeyBrZXksIGpzQ2FzdDxjb25zdCBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqPihjb2RlQmxvY2spIH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgZW5jb2RlQ29k
ZUJsb2NrKEVuY29kZXImIGVuY29kZXIsIFNvdXJjZUNvZGVLZXkga2V5LCBjb25zdCBVbmxpbmtl
ZENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
ID0gY29kZUJsb2NrLT5jbGFzc0luZm8oZW5jb2Rlci52bSgpKTsKKworICAgIGlmIChjbGFzc0lu
Zm8gPT0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpIHsKKyAgICAgICAgZW5jb2Rl
Q29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZW5jb2Rlciwga2V5LCBjb2RlQmxv
Y2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNsYXNzSW5mbyA9PSBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkgeworICAgICAgICBlbmNvZGVDb2Rl
QmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBrZXksIGNvZGVC
bG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoY2xhc3NJbmZvID09
IFVubGlua2VkRXZhbENvZGVCbG9jazo6aW5mbygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAppbmRleCA0NjAx
NzkyMWE0NmVmYzY0MTcyNWQwYTIzNTI1MjkwMzVhZjVmM2FkLi5jMzJkMjA0YjZjZDg5NjgxODFj
YjBkMWRmMGVhYjgzZWMxMTgxOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5jcHAKQEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5l
U2xvd0Nhc2UoKQogCiAgICAgd2hpbGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgfHwgIWNhblBydW5l
UXVpY2tseSgpKSB7CiAgICAgICAgIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4o
KTsKKworICAgICAgICB3cml0ZUNvZGVCbG9jaygqaXQtPnZhbHVlLmNlbGwtPnZtKCksIGl0LT5r
ZXksIGl0LT52YWx1ZSk7CisKICAgICAgICAgbV9zaXplIC09IGl0LT5rZXkubGVuZ3RoKCk7CiAg
ICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CiAgICAgfQpAQCAtNTksOSArNjIsOCBAQCBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0m
IHZtLCBFeGVjdXRhYmxlVAogICAgICAgICB2bS50eXBlUHJvZmlsZXIoKSA/IFR5cGVQcm9maWxl
ckVuYWJsZWQ6OlllcyA6IFR5cGVQcm9maWxlckVuYWJsZWQ6Ok5vLCAKICAgICAgICAgdm0uY29u
dHJvbEZsb3dQcm9maWxlcigpID8gQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENv
bnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpObywKICAgICAgICAgV1RGOjpudWxsb3B0KTsKLSAg
ICBTb3VyY2VDb2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0
ZUFnZShrZXkpOwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewot
ICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0ganNDYXN0
PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNo
ZUFuZFVwZGF0ZUFnZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkpOworICAgIGlmICh1
bmxpbmtlZENvZGVCbG9jayAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewogICAgICAgICB1
bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bGluZUNvdW50KCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRDb2RlQmxvY2stPnN0YXJ0Q29sdW1u
KCkgKyBzb3VyY2Uuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpOwogICAgICAgICBib29sIGVu
ZENvbHVtbklzT25TdGFydExpbmUgPSAhbGluZUNvdW50OwpAQCAtNzEsOSArNzMsOSBAQCBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2so
Vk0mIHZtLCBFeGVjdXRhYmxlVAogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNl
TWFwcGluZ1VSTERpcmVjdGl2ZSh1bmxpbmtlZENvZGVCbG9jay0+c291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZSgpKTsKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogICAgIH0KLSAg
ICAKKwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7Ci0gICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRD
b2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1
dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJv
ciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIHVubGlua2VkQ29k
ZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUs
IEV4ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3Jp
cHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNV
bmRlclREWik7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0aW9uczo6dXNlQ29k
ZUNhY2hlKCkpCiAgICAgICAgIG1fc291cmNlQ29kZS5hZGRDYWNoZShrZXksIFNvdXJjZUNvZGVW
YWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fc291cmNlQ29kZS5hZ2UoKSkpOwpAQCAtMTEw
LDkgKzExMiw4IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldFVu
bGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2CiAgICAgICAgIHZtLnR5cGVQcm9m
aWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6
Tm8sIAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2Zp
bGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAg
ICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKLSAgICBTb3VyY2VD
b2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkp
OwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewotICAgICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRh
dGVBZ2U8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBrZXkpOworICAgIGlmIChleGVj
dXRhYmxlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAgIHNvdXJjZS5wcm92
aWRlcigpLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291cmNlVVJMRGlyZWN0
aXZlKCkpOwogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZShleGVjdXRhYmxlLT5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKCkpOwogICAgICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKQEAgLTE1NSw0ICsxNTYsMTAgQEAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFi
bGUoVk0mIHYKICAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOwogfQogCit2b2lkIENvZGVD
YWNoZTo6d3JpdGUoVk0mIHZtKQoreworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX3NvdXJj
ZUNvZGUpCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKHZtLCBpdC5rZXksIGl0LnZhbHVlKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRleCA4YTQ0
MTlmOTZjYThmYTRhNjI5YmUwZTlhNzgyN2NiYWY2OGNmZjg2Li5jMDhjZDYwZWYxYzAwY2EyNDU1
YTE4NTJmMzI2OWRmMmE1NjEyYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJC
eXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAjaW5jbHVkZSAi
RXhlY3V0YWJsZUluZm8uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUGFy
c2VyLmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC04OSwxMyArOTEsNzUgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VD
b2RlVmFsdWUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkp
CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZl
dGNoRnJvbURpc2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsK
KyAgICAgICAgY29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgp
OworICAgICAgICBpZiAoIWNhY2hlUGF0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBrZXkuaGFzaCgpOworICAgICAgICBjaGFyIGZpbGVu
YW1lWzUxMl07CisgICAgICAgIGludCBjb3VudCA9IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIsICIl
cy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwg
Y291bnQgPiA1MTIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbnQg
ZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGludCByYyA9IGZsb2NrKGZkLCBM
T0NLX1NIIHwgTE9DS19OQik7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgY2xvc2Uo
ZmQpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBz
dHJ1Y3Qgc3RhdCBzYjsKKyAgICAgICAgaW50IHJlcyA9IGZzdGF0KGZkLCAmc2IpOworICAgICAg
ICBpZiAocmVzIHx8ICFzYi5zdF9zaXplKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgY29uc3Qgdm9pZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzYi5zdF9zaXplLCBQ
Uk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGNhY2hl
ZENvZGVCbG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+Kj4oYnVmZmVyKTsKKyAgICAgICAgRGVjb2RlciBkZWNvZGVyKHZtLCBjYWNo
ZWRDb2RlQmxvY2ssIHNiLnN0X3NpemUpOworICAgICAgICBzdGQ6OnBhaXI8U291cmNlQ29kZUtl
eSwgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4gZW50cnk7CisgICAgICAgIHsKKyAgICAgICAgICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgICAgIGVudHJ5ID0gY2FjaGVkQ29k
ZUJsb2NrLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW50cnku
Zmlyc3QgIT0ga2V5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYWRk
Q2FjaGUoa2V5LCBTb3VyY2VDb2RlVmFsdWUodm0sIGVudHJ5LnNlY29uZCwgbV9hZ2UpKTsKKyAg
ICAgICAgcmV0dXJuIGVudHJ5LnNlY29uZDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CisgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jh
c2Vfb2Y8VW5saW5rZWRDb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnZhbHVlICYm
ICFzdGQ6OmlzX3NhbWU8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2s+Ojp2YWx1ZSwgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4KKyAgICBmZXRjaEZyb21EaXNrKFZN
JiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsKKyAgICAgICAgVW5saW5rZWRD
b2RlQmxvY2tUeXBlKiBjb2RlQmxvY2sgPSBmZXRjaEZyb21EaXNrSW1wbDxVbmxpbmtlZENvZGVC
bG9ja1R5cGU+KHZtLCBrZXkpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VE
aXNrQ2FjaGUoKSkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2spOworICAg
ICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19iYXNlX29mPFVubGlua2VkQ29kZUJsb2Nr
LCBUPjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZh
bHVlLCBUKj4KKyAgICBmZXRjaEZyb21EaXNrKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYpIHsg
cmV0dXJuIG51bGxwdHI7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJs
b2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFn
ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKICAgICB7CiAgICAgICAgIHBydW5l
KCk7CiAKICAgICAgICAgaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoa2V5KTsKICAg
ICAgICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBmZXRjaEZyb21EaXNrPFVubGlua2VkQ29kZUJs
b2NrVHlwZT4odm0sIGtleSk7CiAKICAgICAgICAgaW50NjRfdCBhZ2UgPSBtX2FnZSAtIGZpbmRS
ZXN1bHQtPnZhbHVlLmFnZTsKICAgICAgICAgaWYgKGFnZSA+IG1fY2FwYWNpdHkpIHsKQEAgLTEx
NSw3ICsxNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIGZpbmRSZXN1bHQtPnZhbHVlLmFnZSA9IG1f
YWdlOwogICAgICAgICBtX2FnZSArPSBrZXkubGVuZ3RoKCk7CiAKLSAgICAgICAgcmV0dXJuICZm
aW5kUmVzdWx0LT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9j
a1R5cGUqPihmaW5kUmVzdWx0LT52YWx1ZS5jZWxsLmdldCgpKTsKICAgICB9CiAKICAgICBBZGRS
ZXN1bHQgYWRkQ2FjaGUoY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2Rl
VmFsdWUmIHZhbHVlKQpAQCAtMTk3LDYgKzI2MSw3IEBAIHB1YmxpYzoKICAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogZ2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0m
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIERlYnVnZ2VyTW9kZSwgT3B0
aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBQYXJz
ZXJFcnJvciYpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zb3VyY2VDb2RlLmNsZWFyKCk7IH0K
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlKFZNJik7CiAKIHByaXZhdGU6CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5
cGU+IApAQCAtMjU2LDQgKzMyMSwzMSBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRl
VW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YQogICAgIHJl
dHVybiB1bmxpbmtlZENvZGVCbG9jazsKIH0KIAorQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB3
cml0ZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291
cmNlQ29kZVZhbHVlJiB2YWx1ZSkKK3sKKyAgICBjb25zdCBjaGFyKiBjYWNoZVBhdGggPSBPcHRp
b25zOjpkaXNrQ2FjaGVQYXRoKCk7CisgICAgaWYgKExJS0VMWSghY2FjaGVQYXRoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpzRHluYW1p
Y0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5nZXQoKSk7CisgICAgaWYg
KCFjb2RlQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGhhc2ggPSBrZXku
aGFzaCgpOworICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICBpbnQgY291bnQgPSBzbnByaW50
ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOworICAgIGlm
IChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgIHJldHVybjsKKworICAgIEVuY29k
ZXIgZW5jb2Rlcih2bSk7CisgICAgZW5jb2RlQ29kZUJsb2NrKGVuY29kZXIsIGtleSwgY29kZUJs
b2NrKTsKKworICAgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1dST05MWSwg
MDY2Nik7CisgICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBp
ZiAoIXJjKQorICAgICAgICA6OndyaXRlKGZkLCBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLnNp
emUoKSk7CisgICAgY2xvc2UoZmQpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IGNhNTMxNjM2Yjc4MWU4
NjllYTc4Zjc2ZDI1YjVlNGFlYWQ0MTYxODUuLjJiY2FhOWI2NzYyZDI1MmYwYjMxZWUxYTg5NDlj
ZGQ4Mzc0NjgwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5j
cHAKQEAgLTE2ODgsMTEgKzE2ODgsNiBAQCBib29sIEpTQmlnSW50OjpnZXRQcmltaXRpdmVOdW1i
ZXIoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1pbmxpbmUgc2l6ZV90IEpTQmlnSW50OjpvZmZzZXRPZkRhdGEoKQot
ewotICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6
ZW9mKEpTQmlnSW50KSk7Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEpTQmln
SW50KiBKU0JpZ0ludDo6cGFyc2VJbnQoRXhlY1N0YXRlKiBleGVjLCBDaGFyVHlwZSogIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUpCiB7CkBAIC0x
Nzk1LDExICsxNzkwLDYgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUq
IGV4ZWMsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGwKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotaW5saW5lIEpTQmlnSW50OjpEaWdpdCogSlNCaWdJbnQ6OmRhdGFTdG9yYWdl
KCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOwotfQotCiBpbmxpbmUgSlNCaWdJbnQ6
OkRpZ2l0IEpTQmlnSW50OjpkaWdpdCh1bnNpZ25lZCBuKQogewogICAgIEFTU0VSVChuIDwgbGVu
Z3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5kZXggMmIz
YmY5MzA3ZDhkYmJiMTEwNzUzM2VkODMwMzQ3YmNkZDRhNjEwYi4uZTJhNjU3ODEwNzE3Mjk0YTk0
ZjgxNzg0YTJlNzFjNDhhOGFkNWIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCaWdJbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNCaWdJ
bnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKKyAgICBmcmllbmQg
c3RydWN0IENhY2hlZEJpZ0ludDsKIAogcHVibGljOgogCkBAIC0yMjgsOCArMjI5LDE1IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpTQmlnSW50
KiB4KTsKIAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpOwotICAgIERpZ2l0KiBkYXRhU3Rv
cmFnZSgpOworICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCisgICAgewor
ICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+KHNp
emVvZihKU0JpZ0ludCkpOworICAgIH0KKworICAgIGlubGluZSBEaWdpdCogZGF0YVN0b3JhZ2Uo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RGlnaXQqPihyZWludGVy
cHJldF9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mRGF0YSgpKTsKKyAgICB9CiAKICAgICBE
aWdpdCBkaWdpdCh1bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1bnNpZ25lZCwgRGlnaXQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCA2NmNlYzNh
Zjc5ZjZhODEzZDk4YjMwNjc4ZTdkNGZkZjg2ZWM2MTI2Li45NjJkODdlOTkyNmRhY2UzNzY2ZjU5
NzNkMDk2ZDg4MjI3ZTFkZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcApAQCAtNTE3LDYgKzUxNywxMiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKICNlbmRp
ZgorCisgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKKyAgICAgICAgT3B0aW9uczo6
ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKKworICAgIGlmICghT3B0aW9uczo6ZGlza0NhY2hl
UGF0aCgpKQorICAgICAgICBPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CiB9CiAK
IHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgKaW5kZXggZTY3ZDkzOTNlMGMyNjhmODkxN2M5ODIyOWMxYWYzNDhhZTIxZjM2MS4u
NDhmNmU2MmE3YTAyYjk0MWE5YzMxZTg4MWNhNmNiMWYyOWQyMjRiNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNTA4LDYgKzUwOCw4IEBAIGNvbnN0ZXhwciBi
b29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW5nQXBpID0gZmFsc2U7CiAgICAgdihib29sLCB0
cmFjZUxMSW50RXhlY3V0aW9uLCBmYWxzZSwgQ29uZmlndXJhYmxlLCBudWxscHRyKSBcCiAgICAg
dihib29sLCB0cmFjZUxMSW50U2xvd1BhdGgsIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIHRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24sIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KG9wdGlvblN0cmluZywgZGlza0NhY2hlUGF0aCwgbnVsbHB0ciwg
UmVzdHJpY3RlZCwgIiIpIFwKKyAgICB2KGJvb2wsIGZvcmNlRGlza0NhY2hlLCBmYWxzZSwgUmVz
dHJpY3RlZCwgIiIpIFwKIAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKaW5kZXggODNhYWQzNTYwMzhlYjJlYzc2ZTZiOGJkMzdj
NzQ3NmNlYzkxMzUyZS4uODkzMDQ1NGE0YzIzYmE4OTg2OWVkNDY0Zjc0M2IyOWIzMmU5MDI5YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKQEAgLTQxLDYgKzQxLDggQEAg
Y2xhc3MgVk07CiBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBGbGFncyByZWdFeHBGbGFncyhjb25z
dCBTdHJpbmcmKTsKIAogY2xhc3MgUmVnRXhwIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAg
ZnJpZW5kIHN0cnVjdCBDYWNoZWRSZWdFeHA7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2Vs
bCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCmluZGV4IDQwZTdj
N2VjMmZkNjBiNTg0MmE1NzI4NWFjOTdiMGY2YTk1OTM5NWQuLjVmNTAzNDRhMzA1Y2Q4ZjA3NzAx
MzA3NGZkZTBmZGQyZWMzM2FkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaApAQCAtMzksNiArMzksOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIC8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25zIGFyZSBz
byB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQogLy8gImRl
bGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9wZXJ0eS4K
IGNsYXNzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAg
ZnJpZW5kIHN0cnVjdCBDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZTsKKwogcHVibGljOgogICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKaW5kZXggOTE1N2Q1Yjgy
OTIwMGZiNmE5NjVlYTNiYzc4Njk2ZTUzMmE5MmI5NS4uMjIwZjAzN2JiMWUwMWE4MDlhMWQ3YWVi
MTk5MjBlZjdhYjM1YzI1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oCkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNz
aW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+CiAvLyBj
b3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBT
eW1ib2xUYWJsZUVudHJ5IHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFN5bWJvbFRhYmxlRW50
cnk7CisKIHByaXZhdGU6CiAgICAgc3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhp
bnRwdHJfdCBiaXRzKQogICAgIHsKQEAgLTQzNiw2ICs0MzgsOCBAQCBzdHJ1Y3QgU3ltYm9sVGFi
bGVJbmRleEhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPFN5bWJvbFRhYmxlRW50cnk+IHsKIH07CiAK
IGNsYXNzIFN5bWJvbFRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5kIHN0
cnVjdCBDYWNoZWRTeW1ib2xUYWJsZTsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJh
c2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAppbmRleCA3NTVj
ZDdhOWFhNTc2YzZmN2E0ZGIxNGMwZDllMzAyYzc4ZGI1MTc4Li40MWQ5NzIyZTVmMzc0MDQ5YzI0
OGM1Y2ViYjgyNjc4YTA1MzRjYTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaApAQCAtMzMsNiArMzMsMTAgQEAK
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKK25hbWVzcGFjZSBKU0Mgeworc3RydWN0IENhY2hlZEJpdFZlY3RvcjsKK30KKwogbmFt
ZXNwYWNlIFdURiB7CiAKIC8vIFRoaXMgaXMgYSBzcGFjZS1lZmZpY2llbnQsIHJlc2l6ZWFibGUg
Yml0dmVjdG9yIGNsYXNzLiBJbiB0aGUgY29tbW9uIGNhc2UgaXQKQEAgLTMzOCw2ICszNDIsOCBA
QCBwdWJsaWM6CiAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KICAgICAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgSlND
OjpDYWNoZWRCaXRWZWN0b3I7CisKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigp
CiAgICAgewogICAgICAgICByZXR1cm4gc2l6ZW9mKHZvaWQqKSA8PCAzOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDFjZTY0ZWY1ZmI2NDBlOTRm
NjBmODlkZTg3NWI1NWJmN2YxZWFiZjYuLmU4N2VjOTRiYzYyODM1YTUzNDgzNTA0YTUwYjQxODZj
MTYzNDg0YjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOC0xMi0yNyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxv
QGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBieXRlY29kZSB0byBkaXNrCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3ODIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ2MDg0OTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGhlbHBlciB0byBleGVjdXRlIGJ5dGVjb2RlLWNhY2hl
IHRlc3RzOiBpdCBleGVjdXRlcyBlYWNoIHRlc3QKKyAgICAgICAgdHdpY2UsIHRoZSBmaXJzdCB3
aXRoIEpTQ19kaXNrQ2FjaGVQYXRoIHNldCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICAg
ICAgYW5kIHNlY29uZCB3aXRoIEpTQ19mb3JjZURpc2tDYWNoZT10cnVlIChpbiBhZGRpdGlvbiB0
byB0aGUgY2FjaGUgcGF0aCkKKyAgICAgICAgdG8gZ3VhcmFudGVlIHRoYXQgb25seSB0aGUgZGlz
ayBjYWNoZSBpcyBiZWluZyB1c2VkIGFuZCBubyBuZXcKKyAgICAgICAgVW5saW5rZWRDb2RlQmxv
Y2tzIGFyZSBiZWluZyBjcmVhdGVkLgorCisgICAgICAgICogU2NyaXB0cy9qc2Mtc3RyZXNzLXRl
c3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlcjogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOC0xMi0yNiAgQWRyaWFuIFBlcmV6
IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUb29sc10gUmVtb3Zl
IHJlZmVyZW5jZXMgdG8gQmlzb24gYW5kIEZsZXgKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
anNjLXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIgYi9Ub29s
cy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVs
cGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM4YzkyOTIxZGI4ZDRkZDI1MDI3NDQwYzZjZjRmZDFmOWZhZjdlODgK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJz
L2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyCkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4v
ZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICdydWJ5
Z2VtcycKK3JlcXVpcmUgJ2ZpbGV1dGlscycKK3JlcXVpcmUgJ2pzb24nCityZXF1aXJlICdzaGVs
bHdvcmRzJworcmVxdWlyZSAndG1wZGlyJworCitkZWYgbXlzeXMoKmNtZCkKKyAgICByYWlzZSAi
Q29tbWFuZCAje2NtZC5pbnNwZWN0fSBmYWlsZWQ6ICN7JD8uaW5zcGVjdH0iIHVubGVzcyBzeXN0
ZW0oKmNtZCkKK2VuZAorCitwYXRoVG9WTSA9IEFSR1ZbMF0KK2lucHV0RmlsZSA9IEFSR1ZbMV0K
K2V4dHJhT3B0aW9ucyA9IEFSR1ZbMi4uLTFdCitkaXNrQ2FjaGVQYXRoID0gRGlyLm1rdG1wZGly
IFtpbnB1dEZpbGUsICdieXRlY29kZS1jYWNoZSddCisKK2JlZ2luCisgICAgRU5WWyJKU0NfZGlz
a0NhY2hlUGF0aCJdID0gZGlza0NhY2hlUGF0aAorICAgIG15c3lzKHBhdGhUb1ZNLCBpbnB1dEZp
bGUsICpleHRyYU9wdGlvbnMpCisgICAgRU5WWyJKU0NfZm9yY2VEaXNrQ2FjaGUiXSA9ICJ0cnVl
IgorICAgIG15c3lzKHBhdGhUb1ZNLCBpbnB1dEZpbGUsICpleHRyYU9wdGlvbnMpCitlbnN1cmUK
KyAgICBGaWxlVXRpbHMucm1fcmYoZGlza0NhY2hlUGF0aCkKK2VuZApkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMKaW5kZXggMzVhOWViMWM1NWUxMDJiNTJkZDQ1NTcwMjNkOTJkMTYwM2UwYzVh
MS4uNWRmNTA5YzMyYTUyNTZhYmUzNWI5YjVlOTZjZDA1N2ZjYjMwOGI5MSAxMDA3NTUKLS0tIGEv
VG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02NTUsNiArNjU1LDExIEBAIGRlZiBydW5EZWZhdWx0KCpv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcnVuKCJkZWZhdWx0IiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAorZGVmIHJ1bkJ5dGVj
b2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKKyAgICBvcHRpb25zID0gQkFT
RV9PUFRJT05TICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucyArIEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zCisgICAgYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUt
Y2FjaGUiLCBbInJ1YnkiLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhl
bHBlciIpLnRvX3MsIHBhdGhUb1ZNLnRvX3MsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBz
aWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIpCitlbmQKKwogZGVmIHJ1bkJp
Z0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICAjIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vNDAzMzExMjE+CiAgICAgaWYgJHJlbW90ZSBvciAoJGFyY2hpdGVjdHVy
ZSAhfiAveDg2L2kgYW5kICRob3N0T1MgPT0gImRhcndpbiIpCkBAIC03NTEsNiArNzU2LDcgQEAg
ZGVmIGRlZmF1bHRSdW4KICAgICAgICAgZGVmYXVsdFF1aWNrUnVuCiAgICAgZWxzZQogICAgICAg
ICBydW5EZWZhdWx0CisgICAgICAgIHJ1bkJ5dGVjb2RlQ2FjaGUKICAgICAgICAgaWYgJGppdFRl
c3RzCiAgICAgICAgICAgICBydW5Ob0xMSW50CiAgICAgICAgICAgICBydW5Ob0NKSVRWYWxpZGF0
ZVBoYXNlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358275</attachid>
            <date>2019-01-03 13:40:55 -0800</date>
            <delta_ts>2019-01-04 13:50:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190103224051.patch</filename>
            <type>text/plain</type>
            <size>116800</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NGQ0ZDZmOTU5ZjhhMjc4MWEzZGEyMTc4NjlmYzQ1MWNjNzJiYWEwLi43ZDJkZjE4NjVlMTkzYjRl
OTc3NDUxNDE5OTcyZTE3ODNkNzdkYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTEgQEAKKzIwMTgtMTItMjcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLiBBbHNvLCBkdXJpbmcgZGVjb2RpbmcsIHRoZSBjYWNoZWQgb2JqZWN0cworICAg
ICAgICBhcmUgbW1hcCdkIGZyb20gZGlzaywgYnV0IG9ubHkgdXNlZCBmb3IgY3JlYXRpbmcgaW5z
dGFuY2VzIG9mIHRoZSByZXNwZWN0aXZlCisgICAgICAgIGluLW1lbW9yeSB2ZXJzaW9uIG9mIGVh
Y2ggb2JqZWN0LiBJZGVhbGx5LCB0aGUgbW1hcCdkIG9iamVjdHMgc2hvdWxkIGJlIHVzZWQKKyAg
ICAgICAgYXQgcnVudGltZSBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyk6Cisg
ICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZp
ZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkSGFuZGxl
ckluZm86OlVubGlua2VkSGFuZGxlckluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0
aW9uU3RyZWFtLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFNldENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50SWRlbnRpZmllclNldHMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkR2xvYmFs
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxp
bmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0
YVRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGpzYy5jcHA6
CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBw
YXJzZXIvU291cmNlQ29kZS5oOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VDb2RlS2V5Lmg6Cisg
ICAgICAgIChKU0M6OlNvdXJjZUNvZGVLZXk6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAq
IHBhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvVmFyaWFibGVF
bnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkVuY29kZXI6OkVuY29kZXIpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjp+
RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnZtKToKKyAgICAgICAgKEpTQzo6RW5j
b2Rlcjo6YnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6c2l6ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkVuY29kZXI6Om1hbGxvY09mZnNldCk6CisgICAgICAgIChKU0M6OkVu
Y29kZXI6Om1hbGxvYyk6CisgICAgICAgIChKU0M6OkVuY29kZXI6Om9mZnNldE9mKToKKyAgICAg
ICAgKEpTQzo6RW5jb2Rlcjo6Y2FjaGVQdHIpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZz
ZXRGb3JQdHIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKEpT
Qzo6RGVjb2Rlcjo6fkRlY29kZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjp2bSk6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6Om9mZnNldE9mKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6Y2Fj
aGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjphZGRGaW5hbGl6ZXIpOgorICAgICAg
ICAoSlNDOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpD
YWNoZWRPYmplY3Q6OnNpemVPZik6CisgICAgICAgIChKU0M6OkNhY2hlZE9iamVjdDo6Y2FzdCk6
CisgICAgICAgIChKU0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6
VmFyaWFibGVMZW5ndGhPYmplY3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRy
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFB0cjo6b3BlcmF0b3ItPik6CisgICAgICAgIChKU0M6OkNhY2hlZFB0
cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFdy
aXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFBhaXI6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZElk
ZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2lt
cGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFi
bGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSYXJlRGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJp
dFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQml0VmVjdG9yOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRD
b25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRBcnJheTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3ltYm9s
VGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEltbXV0YWJsZUJ1dHRl
cmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5Ojpk
ZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdFeHA6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQmlnSW50OjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW5zdHJ1
Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE1ldGFkYXRh
VGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9yaWdpbjo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFRl
eHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJv
dmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlkZXJT
aGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nU291cmNlUHJv
dmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVy
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRl
cjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlkZXI6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlOjplbmNv
ZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZW5jb2RlKToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHJv
Z3JhbUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkTW9kdWxl
Q29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRNb2R1bGVDb2RlQmxvY2s6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6OmVuY29k
ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9ja1R5cGU+OjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFsQ29k
ZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNv
ZGVLZXk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlRW50cnk6OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVCbG9jayk6
CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQ2Fj
aGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldFVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRVbmxpbmtl
ZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6d3Jp
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmVuZCk6CisgICAg
ICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGVNYXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAgIChKU0M6Ondy
aXRlQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoKKyAgICAgICAg
KiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGlt
ZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorCiAyMDE5LTAxLTAyICBEZXZpbiBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vzc28uY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEltcGxlbWVudCBgcXVlcnlPYmplY3RzYCBDb21t
YW5kIExpbmUgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDlkZTBjNmIxMjFjODQxMjJkMmZlM2MwZGJjYjcxNTQyYjc5ZTBi
YTguLmIxMWQzNTMwYzYxNTM2ZmZkZWI5MzA3NDFkYzQwMDk1MGI2OTNkNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTgtMTItMjcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBCaXRWZWN0b3JzIGhhdmUgdG8gYmUgZnJpZW5kcyB3aXRoIEpTQzo6Q2FjaGVCaXRWZWN0
b3IgdG8gYWxsb3cKKyAgICAgICAgc2VyaWFsaXppbmcgaXRzIGJ1ZmZlciBhcyBwYXJ0IG9mIHRo
ZSBieXRlY29kZSBjYWNoZSBlbmNvZGluZy4KKworICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoK
KwogMjAxOS0wMS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEhvbW9ncmFwaCB3aXRoIExBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRklT
SEhPT0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjNlZjFjNDIzODBiM2NlZjJm
MDBmYWM2NThlOTJlOWQ2ZTc5OWYwMy4uYzllZWNkMmViNGQ1NzNhYmQxODdjNDNlNzNkYTZkZTE1
OWI4MWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMxMzksNiArMzEzOSw3
IEBACiAJCTE0Mzg2QTczMURENjk4OTUwMDg2NTJDNCAvKiBEaXJlY3RFdmFsRXhlY3V0YWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RFdmFsRXhlY3V0YWJsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NjFERDY5ODlDMDA4NjUyQzQg
LyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQzODZBNzcxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kaXJlY3RFdmFsRXhl
Y3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDNCRTI2NTIxQzg1Nzc3
MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MDA1MUYw
QTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTm9kZS5oOyBwYXRoID0gdGVzdHMvTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDQwMDUyMDBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5jICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmM7IG5hbWUgPSBOb2RlLmM7IHBhdGggPSB0ZXN0cy9Ob2RlLmM7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNzQ4MEE1MzZDQzIwMDA1RjA2MSAvKiBOb2RlTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlTGlzdC5oOyBwYXRoID0gdGVz
dHMvTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1ODEsNiArNjU4
Miw3IEBACiAJCQkJOUU3Mjk0MDkxOTBGMDMwNjAwMUE5MUI1IC8qIEJ1bmRsZVBhdGgubW0gKi8s
CiAJCQkJMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovLAogCQkJCTBG
QjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCisJCQkJMTQz
QkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8qIENhY2hlZFR5cGVzLmggKi8sCiAJCQkJMEZFQzNDNUYx
RjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oICovLAogCQkJCUJDQTYyREZFMEUy
ODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUwN0YwRDlERjYzQjAw
ODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDQ1ZGU4MmU3Y2I1OGEyODNiMjBmY2FlNTk4MmJi
YjVjMDRkYTkxNzUuLmEwZjg1M2E2ZTA1ZGM0NjE4ZmYwNGRlNTkwMTliMWVhMTNkNmIzN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCkBA
IC02Myw2ICs2Myw3IEBAIEJ1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZNKiB2bSwgQ29tbW9u
SWRlbnRpZmllcnMqIGNvbW1vbklkZW50aWZpZXJzKQogICAgIEpTQ19DT01NT05fUFJJVkFURV9J
REVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QUklWQVRFX1RPX1BVQkxJ
Q19FTlRSWSkKICAgICBKU0NfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoSU5JVElBTEla
RV9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJ
RklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5U
UlkpCisgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9T
WU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFJJVkFURV9UT19QVUJMSUNfRU5UUlkpCiAgICAgSlND
X0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9TWU1CT0woSU5JVElB
TElaRV9TWU1CT0xfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgbV9wcml2YXRlVG9QdWJs
aWNNYXAuYWRkKG1fZG9sbGFyVk1Qcml2YXRlTmFtZS5pbXBsKCksICZtX2RvbGxhclZNTmFtZSk7
CiAgICAgbV9wdWJsaWNUb1ByaXZhdGVNYXAuYWRkKG1fZG9sbGFyVk1OYW1lLmltcGwoKSwgJm1f
ZG9sbGFyVk1Qcml2YXRlTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKaW5kZXggZjY2YjhjYjUxZWI0MDJkODczNmZkN2RkMGQyZDBlN2EyOTJm
NDUxMi4uODUzMWRiMjYwYmQwNzAxYjM3MTkwMWI2NzRiZmY1ZGYwYmZiZDg3NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaApAQCAtMjEzLDYgKzIx
Myw3IEBAIGV4dGVybiBTeW1ib2xJbXBsOjpTdGF0aWNTeW1ib2xJbXBsIHBvbHlQcm90b1ByaXZh
dGVOYW1lOwogLy8gV2UgY29tbWFuZGVlciB0aGUgcHVibGljVG9Qcml2YXRlTWFwIHRvIGFsbG93
IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1ib2wgbmFtZXMgaW50byB0aGUgYXBwcm9wcmlhdGUg
c3ltYm9sLgogLy8gZS5nLiBAaXRlcmF0b3JTeW1ib2wgcG9pbnRzIHRvIFN5bWJvbC5pdGVyYXRv
ciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0byBhIGFuIGFjdHVhbCBwcml2YXRlIG5hbWUuCiAv
LyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhhY2sgYW5kIHdlIHNob3VsZG4ndCBuZWVkIHRvIGRv
IHRoaXMuCisjZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZ
KG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sLmltcGwoKSwg
Jm1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllcik7CiAjZGVmaW5lIElOSVRJQUxJWkVf
U1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKG5hbWUpIG1fcHVibGljVG9Qcml2YXRlTWFw
LmFkZChtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIuaW1wbCgpLCAmbV8jI25hbWUj
I1N5bWJvbCk7CiAKIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDdhZmRhMzYzMTcyYWFiODZmMzljYWZhMzgz
YWQ4N2U2Njc1YzYyNzIuLmEyZDMyNjJkMTVmYzdkMDRkOTgwM2UwM2UwOWNjZjg3ZWM5N2E1YzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04
NjQsNyArODY0LDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQogfQogCi12b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0
ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNv
bnN0YW50cykKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3Rl
cnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25z
dGFudHMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA4ZDIzYmJjZGVl
ZDA1ODFmNTNiNmM2OTg2MjUxZWVlNjNkN2U2Yjg4Li40NjM3ZTNjNGZmNzViOGIwZTk4MjdhMGM2
OWExNDVjZGE2MzE4NDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCkBAIC04OTIsNyArODkyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQWxs
UHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsK
IAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3Qg
VmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7CisgICAgdm9p
ZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBWZWN0b3I8Q29u
c3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwogCiAgICAgdm9pZCBzZXRDb25z
dGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
bnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSGFuZGxlckluZm8uaAppbmRleCA2NmMzYjc2ODc3NTYyMDc3NmQyNjNmZjA5OGRlNmY0NmI2
NmU3NzgzLi43ZjQ2NWQyYWU5Mzc5OWI5MWRmNzg3MTQxOTRmY2EzNGJkMmExYTEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaApAQCAtODksNiArODks
MTAgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRIYW5k
bGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIFVubGlua2VkSGFuZGxlcklu
Zm8oKQorICAgIHsKKyAgICB9CisKICAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKHVpbnQzMl90IHN0
YXJ0LCB1aW50MzJfdCBlbmQsIHVpbnQzMl90IHRhcmdldCwgSGFuZGxlclR5cGUgaGFuZGxlclR5
cGUpCiAgICAgewogICAgICAgICB0aGlzLT5zdGFydCA9IHN0YXJ0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAppbmRleCA3MGVkZTNl
NDFjNWQ1YzQ4OWQ3OTZmY2ZjMGMxY2NkOTk4ZDI5ZWQ1Li5kOTMxNTRiYzZiNWMzNmQ0YTg0OTcx
MjUyZDA2MzJlNDQwZDRhZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBJbnN0cnVj
dGlvblN0cmVhbSB7CiAgICAgdXNpbmcgSW5zdHJ1Y3Rpb25CdWZmZXIgPSBWZWN0b3I8dWludDhf
dCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+OwogCiAgICAgZnJpZW5kIGNsYXNzIEluc3RydWN0
aW9uU3RyZWFtV3JpdGVyOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJl
YW07CiBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXgg
ZjBlOWQ2NGM4NTRhM2Y1MzY3NTJkNDg3NDY5MmQyNzg3N2Q2NzA0OS4uMGIyMzZhMDJkNTlkYzI1
OGU5MDg5MGM5MjVhM2M4OGIwNWM1MDdmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTY1LDEyICs2NSwxNSBAQCBjbGFz
cyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitzdHJ1Y3QgQ2FjaGVkQ29k
ZUJsb2NrOworCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxlOwogdHlwZWRl
ZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5r
ZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExp
bmtJbmZvOwotdXNpbmcgQ29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElk
ZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKIAogc3RydWN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpAQCAtMTY4LDcg
KzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJl
Z2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRl
QmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAg
ICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SW5kZW50aWZpZXJTZXRF
bnRyeShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBw
ZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpP
dGhlcikKQEAgLTIwMiw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xpbmtU
aW1lQ29uc3RhbnRzW2luZGV4XTsKICAgICB9CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmll
cjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lz
dGVyczsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBj
b25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3Rh
bnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQog
ICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFu
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KQEAgLTM2Nyw2ICszNzAsMTAgQEAg
cHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1
cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJs
b2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3RydWN0dXJlKiwgY29u
c3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+Jik7
CisKICAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQpAQCAtMzc4LDYgKzM4NSw5IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5
dGVjb2RlUmV3cml0ZXI7CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJs
b2NrVHlwZT4KKyAgICBmcmllbmQgc3RydWN0IENhY2hlZENvZGVCbG9jazsKKwogICAgIHZvaWQg
YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYsIEluc3RydWN0aW9uU3RyZWFtV3Jp
dGVyJik7CiAKICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQpAQCAtNDQ0LDcg
KzQ1NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7
CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwogICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7Ci0gICAgVmVjdG9yPENvbnN0YW50
SW5kZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAgIFZlY3Rv
cjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwog
ICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKICAgICBGdW5j
dGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCmluZGV4IDk5
ODdiNDMxMzM0M2I2Y2I3NTJhNDIwYjM1OGQ5YTM2MDMxNzJmMjYuLjJhYzc0YWU5OGI1MGNmMjI2
MTdiYzk0Mjk0NWUwMjM4NGQxMmNmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKQEAgLTI5LDYgKzI5LDggQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiBjbGFz
cyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2Rl
QmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFz
ZTsKQEAgLTU5LDExICs2MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGlu
Z0NhbmRpZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsKICAgICB9
CiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiAgICAgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAg
ICAgfQogCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRF
dmFsQ29kZUJsb2NrJik7CisKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrLmgKaW5kZXggYjU0ODJiNjVjOGI4ZWZiM2FhMzA2YTQxM2JkNTQ2MDM0OTFhOTAxMy4u
NmEzMGFhM2QxZTUyZWU5Njk2Y2U3OTYzMjVjNTA1OWJmYmY5MjJjZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgQ2Fj
aGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sg
ZmluYWwgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYg
VW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKQEAgLTQ0LDEwICs0NiwxNCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2Fj
aGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewog
ICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENh
Y2hlZEZ1bmN0aW9uQ29kZUJsb2NrJik7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggNTI2ODk4Yzk1MWQ4
MjE3NTk3OTg4MTEwMmY5ZGM3ZDYxNWIwMTUyMi4uMzc1ZjQ3ODk3ZGNkNWIwNjk1NzYyNTVlYzNj
N2FlMWM3Y2Q0NTdkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTM5LDExICszOSwxMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKIGNsYXNzIEZ1bmN0aW9uTWV0
YWRhdGFOb2RlOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgUGFyc2VyRXJyb3I7
CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiBlbnVtIFVubGlua2VkRnVuY3Rp
b25LaW5kIHsKICAgICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLApAQCAtNTQsNiArNTYsNyBAQCBj
bGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewog
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CiAgICAgZnJpZW5kIGNsYXNzIFZN
OworICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAKICAgICB0eXBlZGVmIEpT
Q2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKQEAgLTE0Nyw2ICsxNTAs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUo
Vk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUq
LCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRN
b2RlLCBWYXJpYWJsZUVudmlyb25tZW50JiwgIEpTQzo6RGVyaXZlZENvbnRleHRUeXBlLCBib29s
IGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZShEZWNvZGVyJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIGNvbnN0IENhY2hlZEZ1
bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAgdW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CiAg
ICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCmluZGV4IDM0Mzg2MmU2NDcw
ZmUxYjFhNDI0ODVkODc2OWUyNzdkNzJjMTUwOGUuLjg2OTk2MTU4N2NkZDUxNzE3ZmY2M2MxNjdk
YmYyNDliZDYwZTM4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCkBAIC0zOCw2ICszOCwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVi
dWdnZXJNb2RlKQogICAgIHsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorICAgIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBD
YWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT4mIGNhY2hl
ZENvZGVCbG9jaykKKyAgICAgICAgOiBCYXNlKGRlY29kZXIsIHN0cnVjdHVyZSwgY2FjaGVkQ29k
ZUJsb2NrKQorICAgIHsKKyAgICB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKaW5kZXggM2UzZThkZmI0
ZDViYmM0NjRmNWU2YTIzNDRjYWFjYTk5NDk0OWVmMS4uZDk5MGNkNzhjM2VkMWE2MzlmNjQxMDQ2
OGRmYTNhZWJiMDY2ZDY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaApAQCAtMzUsNiArMzUsNyBAQCBjbGFzcyBN
ZXRhZGF0YVRhYmxlOwogY2xhc3MgVW5saW5rZWRNZXRhZGF0YVRhYmxlIHsKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNZXRhZGF0YVRh
YmxlOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkTWV0YWRhdGFUYWJsZTsKIAogcHVibGljOgog
ICAgIHN0cnVjdCBMaW5raW5nRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKaW5k
ZXggMGU5YzVmNWJkZGU2Yzc1NjJiNjZhMDNiYzBhOThjODdhZGJkOTMwMi4uZTY0ZGNlNjEyNTQ3
N2RkNWM1NDEyY2VkOTJiZTI1NjA0YjVmMzg0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaApAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2Rl
cjsKK3N0cnVjdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAt
NzQsMTEgKzc3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENh
Y2hlZE1vZHVsZUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5m
bywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIE1vZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCisgICAg
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRNb2R1
bGVDb2RlQmxvY2smKTsKKwogICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVD
b25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwogCiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgK
aW5kZXggYWZlMjZhZWQxYTUwM2FiMjNmZDhmNDQ3ZjlkZWMyZGMwNmNhNTgyNi4uOWQ3ZTQzNWFm
ZDhjYTVmYjBhNzRlOTU1ZDM2MjU5MTFhNjI4YWExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaApAQCAt
MjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IENhY2hlZFByb2dyYW1D
b2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1Ymxp
YyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAtNTAsMTEgKzUyLDE1IEBAIHB1YmxpYzoKICAgICBj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVjbGFyYXRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENh
Y2hlZFByb2dyYW1Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBH
bG9iYWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KIAorICAgIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9j
ayYpOworCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKICAgICBW
YXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggYWQ2NTM2
MThiNDI4ZmNhMDZiZTA0ZGRiNjZjMGYzZDMxZDJiMjY0Yy4uOGU4MjU2MDI4YjEwMzdkYjJiMzA3
YWNkMTdkMDViN2YzNThmNDdkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKaW5kZXggZjk0NWUxNzhlNThjNTNmMWZjMzkyNzAwZTI2NTUwOGI4ZmNkMmYyZS4u
YmU5NTc1MWY3NTk3NTUyZmMyNDU4NGI2ZWI3ODlhY2RiN2NmZjJmYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJDb25maWdG
aWxlLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCkBAIC0xOTg1LDggKzE5ODYsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29kZUJsb2Nr
KEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChFeGVj
U3RhdGUqKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgdm0uY29kZUNhY2hl
KCktPndyaXRlKHZtKTsKKwogICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNTKTsKIAogI2lmIENPTVBJ
TEVSKE1TVkMpCkBAIC0yODQ5LDYgKzI4NTMsOCBAQCBpbnQgcnVuSlNDKGNvbnN0IENvbW1hbmRM
aW5lJiBvcHRpb25zLCBib29sIGlzV29ya2VyLCBjb25zdCBGdW5jJiBmdW5jKQogI2VuZGlmCiAg
ICAgfQogCisgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAgIGlmIChpc1dvcmtl
cikgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgLy8gVGhpcyBp
cyBuZWVkZWQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSB3b3JrZXIncyBtYWluCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCmluZGV4IDMxM2NmYTQ1YWFmOTIyYjA3
YjA0NWJiZWUwMzYzODU5Y2JkNGMwOWIuLjAxMzQ5NTVkZWZkYWYxNzIxNWRiNWE5NjMzZTYwMjIz
NTdiOTY3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
Q29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCkBA
IC0zMyw2ICszMyw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFNvdXJjZUNvZGUg
OiBwdWJsaWMgVW5saW5rZWRTb3VyY2VDb2RlIHsKKyAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWNo
ZWRTb3VyY2VDb2RlOworCiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VDb2RlKCkKICAgICAg
ICAgICAgIDogVW5saW5rZWRTb3VyY2VDb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Tb3VyY2VDb2RlS2V5LmgKaW5kZXggYThlNjAzYzI2YTBiNjAzNjJhMDJkZWFjMDUxNjE2
OWQ1NzU1ODAyMS4uMzg0ODEyMTdiYWYzOTM1ZDUwMWFjMjUxNTU5YjBkNDI2OGI0ZGI4MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKQEAgLTM3LDYg
KzM3LDggQEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJFbmFibGVkIHsgTm8sIFllcyB9OwogZW51
bSBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMgfTsKIAogY2xhc3Mg
U291cmNlQ29kZUZsYWdzIHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFNvdXJjZUNvZGVLZXk7
CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2RlRmxhZ3MoKSA9IGRlZmF1bHQ7CiAKQEAgLTcwLDYg
KzcyLDggQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVLZXkgeworICAgIGZyaWVu
ZCBzdHJ1Y3QgQ2FjaGVkU291cmNlQ29kZUtleTsKKwogcHVibGljOgogICAgIFNvdXJjZUNvZGVL
ZXkoKQogICAgIHsKQEAgLTExNCw2ICsxMTgsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgJiYg
c3RyaW5nKCkgPT0gb3RoZXIuc3RyaW5nKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFNvdXJjZUNvZGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKwogICAgIHN0cnVjdCBIYXNoIHsKICAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU291cmNlQ29kZUtleSYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGEsIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKaW5kZXgg
NmVjNTkwYjUzZTZjOWMzMjdlNDI0NGQwYjExOWIzNmQwOTZmYzgxZS4uNDkwYTg4YWE4MzFkMWNi
N2FmNWZmMWE2YTcxY2UwY2E5MjY3YWYxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCkBAIC0zNSw2ICszNSw5IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIFVubGlua2VkU291cmNlQ29kZSB7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIENhY2hlVHlwZT4KKyAgICAgICAgZnJp
ZW5kIHN0cnVjdCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTsKKwogICAgIHB1YmxpYzoK
ICAgICAgICAgVW5saW5rZWRTb3VyY2VDb2RlKCkKICAgICAgICAgICAgIDogbV9wcm92aWRlcigw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmly
b25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1l
bnQuaAppbmRleCAxMjliNWVhNmJkOWI3MjZhMWQ5YTQwMTFlZjk2OTBmOGNjNmIwZGQzLi4zNmY5
ZGRmODE3NzZjY2IwYTc2ZmVlMDhhMGE1OGMzODA3YTkzNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaApAQCAtMTE2LDYgKzEx
Niw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBz
dHJ1Y3QgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudDsKKwogICAgIE1hcCBtX21hcDsKICAgICBi
b29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0OWNjNWQxOTRjNzIx
YTJlY2IwMzNiNmUyYjc0NDI0YzUzMjVkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCkBAIC0wLDAgKzEsMTc4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiSlNDYXN0
LmgiCisjaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJTY29wZWRB
cmd1bWVudHNUYWJsZS5oIgorI2luY2x1ZGUgIlNvdXJjZUNvZGVLZXkuaCIKKyNpbmNsdWRlICJV
bmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgorI2luY2x1
ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPgorc3RydWN0IFNvdXJjZVR5cGVJbXBsIHsK
KyAgICB1c2luZyB0eXBlID0gVDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
U291cmNlVHlwZUltcGw8VCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19mdW5kYW1lbnRhbDxU
Pjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjpTb3VyY2VUeXBlLCB2b2lkPjo6
dmFsdWU+PiB7CisgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGU7CisKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1c2luZyBTb3VyY2VUeXBlID0gdHlwZW5hbWUgU291
cmNlVHlwZUltcGw8VD46OnR5cGU7CisKK2NsYXNzIEVuY29kZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEVuY29kZXIpOworCitwdWJsaWM6CisgICAgRW5jb2RlcihWTSYgdm0pCisgICAg
ICAgIDogbV92bSh2bSkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICAgICAgbV9i
dWZmZXIgPSAodWludDhfdCopZmFzdFplcm9lZE1hbGxvYyhzX21heFNpemUpOworICAgIH0KKwor
ICAgIH5FbmNvZGVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgICAg
IGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICB9CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX3Zt
OyB9CisgICAgY29uc3QgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKKyAgICBw
dHJkaWZmX3QgbWFsbG9jT2Zmc2V0KHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX29m
ZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzaXplb2Yodm9pZCopLCBtX29mZnNldCk7
CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fb2Zmc2V0ICsgc2l6ZSkgPCBz
X21heFNpemUpOworICAgICAgICBwdHJkaWZmX3QgcmVzdWx0ID0gbV9vZmZzZXQ7CisgICAgICAg
IG1fb2Zmc2V0ICs9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
dWludDhfdCogbWFsbG9jKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBwdHJkaWZmX3Qg
b2Zmc2V0ID0gbWFsbG9jT2Zmc2V0KHNpemUpOworICAgICAgICByZXR1cm4gbV9idWZmZXIgKyBv
ZmZzZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBtYWxsb2Mo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1hbGxvYyhzaXpl
b2YoVCkpKTsKKyAgICB9CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29uc3Qgdm9pZCogYWRk
cmVzcykKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oYWRkcmVzcyk7CisgICAgICAgIEFTU0VSVChhZGRyID49IG1fYnVmZmVy
ICYmIGFkZHIgPCBtX2J1ZmZlciArIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHIgLSBt
X2J1ZmZlcjsKKyAgICB9CisKKyAgICB2b2lkIGNhY2hlUHRyKGNvbnN0IHZvaWQqIHB0ciwgcHRy
ZGlmZl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIG1fcHRyVG9PZmZzZXRNYXAuYWRkKHB0ciwg
b2Zmc2V0KTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPHB0cmRpZmZfdD4gb2Zmc2V0Rm9y
UHRyKGNvbnN0IHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtX3B0clRvT2Zm
c2V0TWFwLmZpbmQocHRyKTsKKyAgICAgICAgaWYgKGl0ID09IG1fcHRyVG9PZmZzZXRNYXAuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyBp
dC0+dmFsdWUgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgc19tYXhTaXplID0g
MTAgKiBNQjsKKworICAgIFZNJiBtX3ZtOworICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgIHB0
cmRpZmZfdCBtX29mZnNldDsKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBwdHJkaWZmX3Q+IG1f
cHRyVG9PZmZzZXRNYXA7Cit9OworCitjbGFzcyBEZWNvZGVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEZWNvZGVyKTsKKworcHVibGljOgorICAgIERlY29kZXIoVk0mIHZtLCBjb25zdCB2
b2lkKiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUpCisgICAgICAgIDogbV92bSh2bSkKKyAgICAg
ICAgLCBtX2Jhc2VBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJhc2VB
ZGRyZXNzKSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV9zaXplKHNpemUpCisjZW5kaWYK
KyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICB9CisKKyAgICB+RGVjb2Rl
cigpCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2ZpbmFsaXplcnMpCisgICAg
ICAgICAgICBwYWlyLnZhbHVlKCk7CisgICAgfQorCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92
bTsgfQorCisgICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZvaWQqIHB0cikKKyAgICB7Cisg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
cHRyKTsKKyAgICAgICAgQVNTRVJUKGFkZHIgPj0gbV9iYXNlQWRkcmVzcyAmJiBhZGRyIDwgbV9i
YXNlQWRkcmVzcyArIG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBhZGRyIC0gbV9iYXNlQWRkcmVz
czsKKyAgICB9CisKKyAgICB2b2lkIGNhY2hlT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQsIHZvaWQq
IHB0cikKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0VG9QdHJNYXAuYWRkKG9mZnNldCwgcHRyKTsK
KyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPHZvaWQqPiBwdHJGb3JPZmZzZXQocHRyZGlmZl90
IG9mZnNldCkKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtX29mZnNldFRvUHRyTWFwLmZpbmQo
b2Zmc2V0KTsKKyAgICAgICAgaWYgKGl0ID09IG1fb2Zmc2V0VG9QdHJNYXAuZW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyBpdC0+dmFsdWUg
fTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgYWRk
RmluYWxpemVyKHB0cmRpZmZfdCBvZmZzZXQsIGNvbnN0IEZ1bmN0b3ImIGZuKQorICAgIHsKKyAg
ICAgICAgbV9maW5hbGl6ZXJzLmFkZChvZmZzZXQsIGZuKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVk0mIG1fdm07CisgICAgY29uc3QgdWludDhfdCogbV9iYXNlQWRkcmVzczsKKyNpZm5kZWYg
TkRFQlVHCisgICAgc2l6ZV90IG1fc2l6ZTsKKyNlbmRpZgorICAgIEhhc2hNYXA8cHRyZGlmZl90
LCB2b2lkKj4gbV9vZmZzZXRUb1B0ck1hcDsKKyAgICBIYXNoTWFwPHB0cmRpZmZfdCwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+PiBtX2ZpbmFsaXplcnM7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+
Ojp2YWx1ZT4gZW5jb2RlKEVuY29kZXImLCBUJiBkc3QsIGNvbnN0IFNvdXJjZVR5cGU8VD4mIHNy
YykKK3sKKyAgICBkc3QgPSBzcmM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMg
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4g
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFQmIGRzdCwgY29uc3QgU291cmNlVHlwZTxUPiYgc3Jj
KQoreworICAgIGRzdC5lbmNvZGUoZW5jb2Rlciwgc3JjKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGRlY29kZShEZWNvZGVyJiwgY29uc3QgVCYg
c3JjLCBTb3VyY2VUeXBlPFQ+JiBkc3QsIEFyZ3MuLi4pCit7CisgICAgZHN0ID0gc3JjOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorc3RhdGljIHN0ZDo6ZW5h
YmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBUJiBzcmMsIFNvdXJjZVR5cGU8VD4mIGRzdCwgQXJncy4u
LiBhcmdzKQoreworICAgIHNyYy5kZWNvZGUoZGVjb2RlciwgZHN0LCBhcmdzLi4uKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWUsIFQ+IGRlY29kZShEZWNvZGVyJiwgVCBzcmMpCit7
CisgICAgcmV0dXJuIHNyYzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlLCBTb3Vy
Y2VUeXBlPFQ+PiYmIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBUJiBzcmMpCit7Cisg
ICAgcmV0dXJuIHNyYy5kZWNvZGUoZGVjb2Rlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNv
dXJjZSwgdHlwZW5hbWUgRHN0Pgorc3RydWN0IENhY2hlZE9iamVjdCB7CisgICAgdXNpbmcgU291
cmNlVHlwZSA9IFNvdXJjZTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBzaXplT2YoY29uc3QgU291
cmNlJiBzb3VyY2UpCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICAgICAg
Y29tcHV0ZU91dE9mTGluZVNpemUoc2l6ZSwgc291cmNlKTsKKyAgICAgICAgcmV0dXJuIHNpemU7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgVCYgY2FzdChU
KiBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gKnNvdXJjZTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNf
cG9pbnRlcjxUPjo6dmFsdWU+PgorICAgIHN0YXRpYyBUJiBjYXN0KFQmIHNvdXJjZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBzdGF0aWMgY29uc3QgVCYgY2FzdChjb25zdCBUKiBjb25zdCBzb3VyY2UpCisgICAg
eworICAgICAgICByZXR1cm4gKnNvdXJjZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFs
dWU+PgorICAgIHN0YXRpYyBjb25zdCBUJiBjYXN0KGNvbnN0IFQmIHNvdXJjZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgU291
cmNlLCB0eXBlbmFtZSBEc3Q+CitzdHJ1Y3QgVmFyaWFibGVMZW5ndGhPYmplY3QgOiBwdWJsaWMg
Q2FjaGVkT2JqZWN0PFNvdXJjZSwgRHN0PiB7Citwcml2YXRlOgorICAgIGNvbnN0ZXhwciBzdGF0
aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9IFBUUkRJRkZfTUFYOworcHVibGljOgorICAg
IHB0cmRpZmZfdCBvZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKKworICAgIGNvbnN0IHVpbnQ4
X3QqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0ICE9IHNfaW52
YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPih0aGlzKSArIG9mZnNldDsKKyAgICB9CisKKyAgICB1aW50OF90KiBidWZmZXIoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCAhPSBzX2ludmFsaWRPZmZzZXQpOworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGhpcykgKyBvZmZzZXQ7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGJ1ZmZlcigpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oYnVmZmVyKCkpOworICAg
IH0KKworICAgIHVpbnQ4X3QqIGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIsIHNpemVfdCBzaXpl
KQorICAgIHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldE9mZnNldCA9IGVuY29kZXIub2Zmc2V0
T2YoJm9mZnNldCk7CisgICAgICAgIHB0cmRpZmZfdCBhbGxvY2F0aW9uT2Zmc2V0ID0gZW5jb2Rl
ci5tYWxsb2NPZmZzZXQoc2l6ZSk7CisgICAgICAgIG9mZnNldCA9IGFsbG9jYXRpb25PZmZzZXQg
LSBvZmZzZXRPZmZzZXQ7CisgICAgICAgIHJldHVybiBidWZmZXIoKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIsIHVu
c2lnbmVkIHNpemUgPSAxKQorICAgIHsKKyAgICAgICAgYWxsb2NhdGUoZW5jb2Rlciwgc2l6ZW9m
KFRbc2l6ZV0pKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjxUPigpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJjZVR5cGUgPSBTb3VyY2VUeXBlPFQ+Pgor
c3RydWN0IENhY2hlZFB0ciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2VUeXBl
KiwgQ2FjaGVkUHRyPFQ+PiB7CisgICAgYm9vbCBpc0VtcHR5OworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlVHlwZSogc3JjKQorICAgIHsKKyAgICAgICAg
aXNFbXB0eSA9ICFzcmM7CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmIChXVEY6Ok9wdGlvbmFsPHB0cmRpZmZfdD4gb2Zmc2V0ID0gZW5jb2Rl
ci5vZmZzZXRGb3JQdHIoc3JjKSkgeworICAgICAgICAgICAgdGhpcy0+b2Zmc2V0ID0gKm9mZnNl
dCAtIGVuY29kZXIub2Zmc2V0T2YoJnRoaXMtPm9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBUKiBjYWNoZWRPYmplY3QgPSB0aGlzLT50ZW1wbGF0ZSBh
bGxvY2F0ZTxUPihlbmNvZGVyKTsKKyAgICAgICAgY2FjaGVkT2JqZWN0LT5lbmNvZGUoZW5jb2Rl
ciwgKnNyYyk7CisgICAgICAgIGVuY29kZXIuY2FjaGVQdHIoc3JjLCBlbmNvZGVyLm9mZnNldE9m
KGNhY2hlZE9iamVjdCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+
CisgICAgU291cmNlVHlwZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEFyZ3MuLi4gYXJncykg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgcHRyZGlmZl90IGJ1ZmZlck9mZnNldCA9IGRlY29kZXIub2Zmc2V0
T2YodGhpcy0+YnVmZmVyKCkpOworICAgICAgICBpZiAoV1RGOjpPcHRpb25hbDx2b2lkKj4gcHRy
ID0gZGVjb2Rlci5wdHJGb3JPZmZzZXQoYnVmZmVyT2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PFNvdXJjZVR5cGUqPigqcHRyKTsKKworICAgICAgICBTb3VyY2VU
eXBlKiBwdHIgPSBvcGVyYXRvci0+KCktPmRlY29kZShkZWNvZGVyLCBhcmdzLi4uKTsKKyAgICAg
ICAgZGVjb2Rlci5jYWNoZU9mZnNldChidWZmZXJPZmZzZXQsIHB0cik7CisgICAgICAgIHJldHVy
biBwdHI7CisgICAgfQorCisgICAgVCogb3BlcmF0b3ItPigpCisgICAgeworICAgICAgICBpZiAo
aXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdGhp
cy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgfQorCisgICAgY29uc3QgVCogb3BlcmF0b3It
PigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNlVHlwZSA9IFNv
dXJjZVR5cGU8VD4+CitzdHJ1Y3QgQ2FjaGVkUmVmUHRyIDogcHVibGljIENhY2hlZE9iamVjdDxS
ZWZQdHI8U291cmNlVHlwZT4sIENhY2hlZFJlZlB0cjxUPj4geworICAgIENhY2hlZFB0cjxULCBT
b3VyY2VUeXBlPiBwdHI7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBTb3VyY2VUeXBlKiBzcmMpCisgICAgeworICAgICAgICBwdHIuZW5jb2RlKGVuY29kZXIsIHNy
Yyk7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVm
UHRyPFNvdXJjZVR5cGU+IHNyYykKKyAgICB7CisgICAgICAgIGVuY29kZShlbmNvZGVyLCBzcmMu
Z2V0KCkpOworICAgIH0KKworICAgIFJlZlB0cjxTb3VyY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGUqIGRlY29kZWRQdHIgPSBw
dHIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBkZWNvZGVyLmFkZEZpbmFsaXplcihkZWNvZGVy
Lm9mZnNldE9mKHB0ci5idWZmZXIoKSksIFs9XSB7IGRlcmVmSWZOb3ROdWxsKGRlY29kZWRQdHIp
OyB9KTsKKyAgICAgICAgcmVmSWZOb3ROdWxsKGRlY29kZWRQdHIpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoZGVjb2RlZFB0cik7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgUmVmUHRyPFNvdXJjZVR5cGU+JiBzcmMpIGNvbnN0CisgICAgeworICAgICAgICBz
cmMgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgU291cmNlVHlwZSA9IFNvdXJjZVR5cGU8VD4+CitzdHJ1Y3QgQ2FjaGVkV3JpdGVC
YXJyaWVyIDogcHVibGljIENhY2hlZE9iamVjdDxXcml0ZUJhcnJpZXI8U291cmNlVHlwZT4sIENh
Y2hlZFdyaXRlQmFycmllcjxUPj4geworICAgIENhY2hlZFB0cjxULCBTb3VyY2VUeXBlPiBwdHI7
CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8
U291cmNlVHlwZT4gc3JjKQorICAgIHsKKyAgICAgICAgcHRyLmVuY29kZShlbmNvZGVyLCBzcmMu
Z2V0KCkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdyaXRl
QmFycmllcjxTb3VyY2VUeXBlPiYgc3JjLCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgU291cmNlVHlwZSogZGVjb2RlZFB0ciA9IHB0ci5kZWNvZGUoZGVjb2Rlcik7
CisgICAgICAgIGlmIChkZWNvZGVkUHRyKQorICAgICAgICAgICAgc3JjLnNldChkZWNvZGVyLnZt
KCksIG93bmVyLCBkZWNvZGVkUHRyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgSUMgPSAwLCB0eXBlbmFtZSBPSCA9IENyYXNoT25PdmVyZmxvdz4KK3N0cnVjdCBD
YWNoZWRWZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VmVjdG9yPFNvdXJjZVR5
cGU8VD4sIElDLCBPSD4sIENhY2hlZFZlY3RvcjxULCBJQywgT0g+PiB7CisgICAgdW5zaWduZWQg
c2l6ZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxT
b3VyY2VUeXBlPFQ+LCBJQywgT0g+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBzaXplID0gdmVj
dG9yLnNpemUoKTsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8
VD4oZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGJ1ZmZlcltpXSwgdmVj
dG9yW2ldKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZv
aWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJQywgT0g+
JiB2ZWN0b3IsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHZlY3Rvci5yZXNp
emVUb0ZpdChzaXplKTsKKyAgICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUg
YnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
CisgICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ld
LCBhcmdzLi4uKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGc3QsIHR5cGVuYW1l
IFNuZD4KK3N0cnVjdCBDYWNoZWRQYWlyIDogcHVibGljIENhY2hlZE9iamVjdDxzdGQ6OnBhaXI8
U291cmNlVHlwZTxGc3Q+LCBTb3VyY2VUeXBlPFNuZD4+LCBDYWNoZWRQYWlyPEZzdCwgU25kPj4g
eworICAgIEZzdCBmc3Q7CisgICAgU25kIHNuZDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZzdD4sIFNvdXJjZVR5cGU8U25k
Pj4mIHBhaXIpCisgICAgeworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGZzdCwgc3Rk
OjpnZXQ8MD4ocGFpcikpOworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIHNuZCwgc3Rk
OjpnZXQ8MT4ocGFpcikpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZzdD4sIFNvdXJjZVR5cGU8U25kPj4mIHBhaXIpIGNv
bnN0CisgICAgeworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGZzdCwgc3RkOjpnZXQ8
MD4ocGFpcikpOworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIHNuZCwgc3RkOjpnZXQ8
MT4ocGFpcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxTb3VyY2VUeXBl
PEtleT4+OjpIYXNoLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFNvdXJjZVR5
cGU8S2V5Pj4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlw
ZTxWYWx1ZT4+Pgorc3RydWN0IENhY2hlZEhhc2hNYXAgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhP
YmplY3Q8SGFzaE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+LCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4sIENhY2hlZEhhc2hNYXA8S2V5LCBWYWx1
ZSwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7CisKKyAgICBDYWNo
ZWRWZWN0b3I8Q2FjaGVkUGFpcjxLZXksIFZhbHVlPj4gZW50cmllczsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+CisgICAgdXNpbmcgTWFwID0gSGFzaE1hcDxLLCBWLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz47CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBl
PFZhbHVlPj4mIG1hcCkKKyAgICB7CisgICAgICAgIGVudHJpZXMuc2l6ZSA9IG1hcC5zaXplKCk7
CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50cmllcyk+IGVudHJpZXNWZWN0b3IobWFw
LnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIGl0IDogbWFwKQorICAgICAgICAgICAgZW50cmllc1ZlY3RvcltpKytdID0geyBpdC5rZXks
IGl0LnZhbHVlIH07CisgICAgICAgIGVudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0
b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hcDxTb3Vy
Y2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKSBjb25zdAorICAgIHsKKyAgICAg
ICAgU291cmNlVHlwZTxkZWNsdHlwZShlbnRyaWVzKT4gZGVjb2RlZEVudHJpZXM7CisgICAgICAg
IGVudHJpZXMuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRFbnRyaWVzKTsKKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBwYWlyIDogZGVjb2RlZEVudHJpZXMpCisgICAgICAgICAgICBtYXAuc2V0KHN0
ZDo6Z2V0PDA+KHBhaXIpLCBzdGQ6OmdldDwxPihwYWlyKSk7CisgICAgfQorfTsKKworc3RydWN0
IENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFVu
aXF1ZWRTdHJpbmdJbXBsLCBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4geworICAgIGJvb2wgaXM4
Qml0IDogMTsKKyAgICBib29sIGlzU3ltYm9sIDogMTsKKyAgICBib29sIGlzQXRvbWljIDogMTsK
KyAgICB1bnNpZ25lZCBsZW5ndGg7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCisgICAgeworICAgICAgICBpc0F0b21pYyA9IHN0
cmluZy5pc0F0b21pYygpOworICAgICAgICBpc1N5bWJvbCA9IHN0cmluZy5pc1N5bWJvbCgpOwor
ICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29uc3RfY2FzdDxTdHJpbmdJbXBsKj4oJnN0cmlu
Zyk7CisgICAgICAgIGlmIChpc1N5bWJvbCkgeworICAgICAgICAgICAgU3ltYm9sSW1wbCogc3lt
Ym9sID0gc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCo+KGltcGwpOworICAgICAgICAgICAgaWYgKCFz
eW1ib2wtPmlzTnVsbFN5bWJvbCgpKSB7CisgICAgICAgICAgICAgICAgSWRlbnRpZmllciB1aWQg
PSBJZGVudGlmaWVyOjpmcm9tVWlkKCZlbmNvZGVyLnZtKCksIHN5bWJvbCk7CisgICAgICAgICAg
ICAgICAgaW1wbCA9IGVuY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQdWJsaWNOYW1l
KHVpZCkuc3RyaW5nKCkuaW1wbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaXM4Qml0ID0gaW1wbC0+aXM4Qml0KCk7CisgICAgICAgIGxlbmd0aCA9IGltcGwtPmxlbmd0
aCgpOworCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHVuc2lnbmVkIHNpemUgPSBsZW5ndGg7CisgICAgICAgIGNvbnN0IHZvaWQqIHBheWxvYWQ7
CisgICAgICAgIGlmIChpczhCaXQpCisgICAgICAgICAgICBwYXlsb2FkID0gaW1wbC0+Y2hhcmFj
dGVyczgoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXlsb2FkID0gaW1wbC0+Y2hh
cmFjdGVyczE2KCk7CisgICAgICAgICAgICBzaXplICo9IDI7CisgICAgICAgIH0KKworICAgICAg
ICB1aW50OF90KiBidWZmZXIgPSB0aGlzLT5hbGxvY2F0ZShlbmNvZGVyLCBzaXplKTsKKyAgICAg
ICAgbWVtY3B5KGJ1ZmZlciwgcGF5bG9hZCwgc2l6ZSk7CisgICAgfQorCisgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
YXV0byBjcmVhdGUgPSBbJl0oY29uc3QgYXV0byogYnVmZmVyKSAtPiBVbmlxdWVkU3RyaW5nSW1w
bCogeworICAgICAgICAgICAgaWYgKCFpc1N5bWJvbCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
QXRvbWljU3RyaW5nSW1wbDo6YWRkKGJ1ZmZlciwgbGVuZ3RoKS5sZWFrUmVmKCk7CisKKyAgICAg
ICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiAmU3ltYm9sSW1wbDo6
Y3JlYXRlTnVsbFN5bWJvbCgpLmxlYWtSZWYoKTsKKworICAgICAgICAgICAgSWRlbnRpZmllciBp
ZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmRlY29kZXIudm0oKSwgYnVmZmVyLCBsZW5n
dGgpOworICAgICAgICAgICAgU3RyaW5nIHN0ciA9IGRlY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVz
LT5sb29rVXBQcml2YXRlTmFtZShpZGVudCktPnN0cmluZygpOworICAgICAgICAgICAgU3RyaW5n
SW1wbCogaW1wbCA9IHN0ci5yZWxlYXNlSW1wbCgpLmdldCgpOworICAgICAgICAgICAgQVNTRVJU
KGltcGwtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4oaW1wbCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGlzOEJpdCkK
KyAgICAgICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVmZmVyPExDaGFyPigpKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZSh0aGlzLT5idWZmZXI8VUNoYXI+KCkpOworICAgIH0KK307CisKK3N0
cnVjdCBDYWNoZWRTdHJpbmdJbXBsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFN0cmlu
Z0ltcGwsIENhY2hlZFN0cmluZ0ltcGw+IHsKKyAgICBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCB1
bmlxdWVkU3RyaW5nSW1wbDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFN0cmluZ0ltcGwmIGltcGwpCisgICAgeworICAgICAgICB1bmlxdWVkU3RyaW5nSW1wbC5l
bmNvZGUoZW5jb2RlciwgaW1wbCk7CisgICAgfQorCisgICAgU3RyaW5nSW1wbCogZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5pcXVlZFN0cmlu
Z0ltcGwuZGVjb2RlKGRlY29kZXIpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTdHJpbmcg
OiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U3RyaW5nLCBDYWNoZWRTdHJpbmc+IHsKKyAg
ICBDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+IGltcGw7CisKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7Cisg
ICAgICAgIGltcGwuZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PFVuaXF1ZWRTdHJpbmdJbXBs
Kj4oc3RyaW5nLmltcGwoKSkpOworICAgIH0KKworICAgIFN0cmluZyBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoKFJlZlB0cjxTdHJp
bmdJbXBsPilpbXBsLmRlY29kZShkZWNvZGVyKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiBkc3QpIGNvbnN0CisgICAgeworICAgICAgICBkc3Qg
PSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZElkZW50aWZpZXIg
OiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmllciwgQ2FjaGVkSWRlbnRpZmll
cj4geworICAgIENhY2hlZFN0cmluZyBzdHJpbmc7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAg
c3RyaW5nLmVuY29kZShlbmNvZGVyLCBpZGVudGlmaWVyLnN0cmluZygpKTsKKyAgICB9CisKKyAg
ICBJZGVudGlmaWVyIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgU3RyaW5nIHN0ciA9IHN0cmluZy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzdHIu
aXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcigpOworCisgICAgICAgIHJl
dHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVyLnZtKCksIChVbmlxdWVkU3RyaW5nSW1w
bCopc3RyLmltcGwoKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CisgICAgeworICAgICAgICBpZGVudCA9IGRlY29k
ZShkZWNvZGVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IENh
Y2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdURjo6T3B0aW9uYWw8
U291cmNlVHlwZTxUPj4sIENhY2hlZE9wdGlvbmFsPFQ+PiB7CisgICAgYm9vbCBpc0VtcHR5Owor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpPcHRpb25hbDxT
b3VyY2VUeXBlPFQ+PiYgc291cmNlKQorICAgIHsKKyAgICAgICAgaXNFbXB0eSA9ICFzb3VyY2U7
CisKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc291
cmNlKTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+IGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7IHRoaXMtPnRl
bXBsYXRlIGJ1ZmZlcjxUPigpLT5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+JiBk
c3QpIGNvbnN0CisgICAgeworICAgICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjp1bmlxdWVfcHRy
PFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIXNvdXJjZSkKKyAg
ICAgICAgICAgIGVuY29kZShlbmNvZGVyLCBXVEY6Om51bGxvcHQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbmNvZGUoZW5jb2RlciwgeyAqc291cmNlIH0pOworICAgIH0KKworICAgIFNv
dXJjZVR5cGU8VD4qIGRlY29kZUFzUHRyKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIHJldHVybiB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKS0+ZGVjb2RlKGRlY29kZXIpOwor
ICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTaW1wbGVKdW1wVGFibGUgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PFVubGlua2VkU2ltcGxlSnVtcFRhYmxlLCBDYWNoZWRTaW1wbGVKdW1wVGFibGU+IHsK
KyAgICBpbnQzMl90IG1pbjsKKyAgICBDYWNoZWRWZWN0b3I8aW50MzJfdD4gYnJhbmNoT2Zmc2V0
czsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiBqdW1wVGFibGUpCisgICAgeworICAgICAgICBtaW4gPSBqdW1wVGFibGUu
bWluOworICAgICAgICBicmFuY2hPZmZzZXRzLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUuYnJh
bmNoT2Zmc2V0cyk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QKKyAgICB7CisgICAgICAg
IGp1bXBUYWJsZS5taW4gPSBtaW47CisgICAgICAgIGJyYW5jaE9mZnNldHMuZGVjb2RlKGRlY29k
ZXIsIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVk
U3RyaW5nSnVtcFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZFN0cmluZ0p1bXBU
YWJsZSwgQ2FjaGVkU3RyaW5nSnVtcFRhYmxlPiB7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRS
ZWZQdHI8Q2FjaGVkU3RyaW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjogT2Zmc2V0
TG9jYXRpb24+IG9mZnNldFRhYmxlOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSkKKyAgICB7CisgICAg
ICAgIG9mZnNldFRhYmxlLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUub2Zmc2V0VGFibGUpOwor
ICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiBqdW1wVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBvZmZzZXRUYWJsZS5k
ZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKKyAgICB9Cit9OworCitzdHJ1
Y3QgQ2FjaGVkUmFyZURhdGEgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJsb2Nr
OjpSYXJlRGF0YSwgQ2FjaGVkUmFyZURhdGE+IHsKKyAgICBDYWNoZWRWZWN0b3I8VW5saW5rZWRI
YW5kbGVySW5mbz4gZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAgICAvLyBKdW1wIFRhYmxlcworICAg
IENhY2hlZFZlY3RvcjxDYWNoZWRTaW1wbGVKdW1wVGFibGU+IHN3aXRjaEp1bXBUYWJsZXM7Cisg
ICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gc3RyaW5nU3dpdGNoSnVtcFRh
YmxlczsKKworICAgIENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlv
bj4gZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisKKyAgICBDYWNoZWRIYXNoTWFwPHVuc2ln
bmVkLCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25S
YW5nZT4gdHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rpb25T
dHJlYW06Ok9mZnNldD4gb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CisKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2Nr
OjpSYXJlRGF0YSYgcmFyZURhdGEpCisgICAgeworICAgICAgICBleGNlcHRpb25IYW5kbGVycy5l
bmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgICAgIHN3
aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3dpdGNoSnVtcFRhYmxl
cyk7CisgICAgICAgIHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVE
YXRhLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIGV4cHJlc3Npb25JbmZvRmF0
UG9zaXRpb25zLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX2V4cHJlc3Npb25JbmZvRmF0UG9z
aXRpb25zKTsKKyAgICAgICAgdHlwZVByb2ZpbGVySW5mb01hcC5lbmNvZGUoZW5jb2RlciwgcmFy
ZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICAgICAgb3BQcm9maWxlQ29udHJvbEZs
b3dCeXRlY29kZU9mZnNldHMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fb3BQcm9maWxlQ29u
dHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOworICAgIH0KKworICAgIFVubGlua2VkQ29kZUJsb2Nr
OjpSYXJlRGF0YSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEqIHJhcmVEYXRhID0gbmV3IFVubGlua2VkQ29k
ZUJsb2NrOjpSYXJlRGF0YSB7IH07CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJzLmRlY29kZShk
ZWNvZGVyLCByYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgICAgIHN3aXRjaEp1
bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMpOwor
ICAgICAgICBzdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgZXhwcmVzc2lvbkluZm9GYXRQb3Np
dGlvbnMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRp
b25zKTsKKyAgICAgICAgdHlwZVByb2ZpbGVySW5mb01hcC5kZWNvZGUoZGVjb2RlciwgcmFyZURh
dGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAgIG9wUHJvZmlsZUNvbnRyb2xGbG93
Qnl0ZWNvZGVPZmZzZXRzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250
cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7CisgICAgICAgIHJldHVybiByYXJlRGF0YTsKKyAgICB9
CisKK307CisKK3N0cnVjdCBDYWNoZWRCaXRWZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhP
YmplY3Q8Qml0VmVjdG9yLCBDYWNoZWRCaXRWZWN0b3I+IHsKKyAgICB1bnNpZ25lZCBzaXplOwor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQml0VmVjdG9yJiBiaXRW
ZWN0b3IpCisgICAgeworICAgICAgICBzaXplID0gYml0VmVjdG9yLnNpemUoKTsKKyAgICAgICAg
dWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7CisgICAgICAg
IG1lbWNweShidWZmZXIsIGJpdFZlY3Rvci5iaXRzKCksIHNpemUpOworICAgIH0KKworICAgIHZv
aWQgZGVjb2RlKERlY29kZXImLCBCaXRWZWN0b3ImIGJpdFZlY3RvcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIGJpdFZlY3Rvci5lbnN1cmVTaXplKHNpemUpOworICAgICAgICBtZW1jcHkoYml0VmVj
dG9yLmJpdHMoKSwgdGhpcy0+YnVmZmVyKCksIHNpemUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxUPjo6
SGFzaD4KK3N0cnVjdCBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxIYXNoU2V0
PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+LCBDYWNoZWRIYXNoU2V0PFQsIEhhc2hBcmc+PiB7Cisg
ICAgQ2FjaGVkVmVjdG9yPFQ+IGVudHJpZXM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+JiBzZXQpCisgICAg
eworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKGVudHJpZXMpPiBlbnRyaWVzVmVjdG9yKHNl
dC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBpdGVtIDogc2V0KQorICAgICAgICAgICAgZW50cmllc1ZlY3RvcltpKytdID0gaXRlbTsK
KyAgICAgICAgZW50cmllcy5lbmNvZGUoZW5jb2RlciwgZW50cmllc1ZlY3Rvcik7CisgICAgfQor
CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldDxTb3VyY2VUeXBlPFQ+
LCBIYXNoQXJnPiYgc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlw
ZShlbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKKyAgICAgICAgZW50cmllcy5kZWNvZGUoZGVjb2Rl
ciwgZW50cmllc1ZlY3Rvcik7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGVudHJp
ZXNWZWN0b3IpCisgICAgICAgICAgICBzZXQuYWRkKGl0ZW0pOworICAgIH0KK307CisKK3N0cnVj
dCBDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0
aE9iamVjdDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSwgQ2FjaGVkQ29uc3RhbnRJZGVudGlm
aWVyU2V0RW50cnk+IHsKKyAgICB1bnNpZ25lZCBjb25zdGFudDsKKyAgICBDYWNoZWRIYXNoU2V0
PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNo
PiBzZXQ7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb25zdGFu
dElkZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpCisgICAgeworICAgICAgICBjb25zdGFudCA9IHN0
ZDo6Z2V0PDE+KGVudHJ5KTsKKyAgICAgICAgc2V0LmVuY29kZShlbmNvZGVyLCBzdGQ6OmdldDww
PihlbnRyeSkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENv
bnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBlbnRyeSkgY29uc3QKKyAgICB7CisgICAgICAgIHN0
ZDo6Z2V0PDE+KGVudHJ5KSA9IGNvbnN0YW50OworICAgICAgICBzZXQuZGVjb2RlKGRlY29kZXIs
IHN0ZDo6Z2V0PDA+KGVudHJ5KSk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFZhcmlhYmxl
RW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFZhcmlhYmxlRW52aXJvbm1lbnQsIENh
Y2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ+IHsKKworICAgIGJvb2wgaXNFdmVyeXRoaW5nQ2FwdHVy
ZWQ7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0lt
cGw+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJh
aXRzPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnlI
YXNoVHJhaXRzPiBtYXA7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCisgICAgeworICAgICAgICBpc0V2ZXJ5dGhpbmdD
YXB0dXJlZCA9IGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkOworICAgICAgICBtYXAuZW5jb2Rl
KGVuY29kZXIsIGVudi5tX21hcCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52KSBjb25zdAorICAgIHsKKyAgICAgICAg
ZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgPSBpc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKKyAgICAg
ICAgbWFwLmRlY29kZShkZWNvZGVyLCBlbnYubV9tYXApOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJjZVR5cGUgPSBTb3VyY2VUeXBlPFQ+Pgorc3RydWN0
IENhY2hlZEFycmF5IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZVR5cGUqLCBD
YWNoZWRBcnJheTxULCBTb3VyY2VUeXBlPj4geworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFNvdXJjZVR5cGUqIGFycmF5LCB1bnNpZ25lZCBzaXplKQorICAgIHsKKyAg
ICAgICAgVCogZHN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAg
ICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGRzdFtpXSwgYXJyYXlbaV0pOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgU291cmNlVHlwZSogYXJyYXksIHVuc2lnbmVkIHNpemUsIEFyZ3MuLi4gYXJncykgY29u
c3QKKyAgICB7CisgICAgICAgIGNvbnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZl
cjxUPigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAg
ICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBidWZmZXJbaV0sIGFycmF5W2ldLCBhcmdz
Li4uKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGUgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0PFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBDYWNoZWRTY29wZWRBcmd1
bWVudHNUYWJsZT4geworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBDYWNoZWRBcnJheTxTY29w
ZU9mZnNldD4gYXJndW1lbnRzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU2NvcGVkQXJndW1lbnRzVGFibGUmIHNjb3BlZEFyZ3VtZW50c1RhYmxlKQorICAgIHsK
KyAgICAgICAgbGVuZ3RoID0gc2NvcGVkQXJndW1lbnRzVGFibGUubV9sZW5ndGg7CisgICAgICAg
IGFyZ3VtZW50cy5lbmNvZGUoZW5jb2Rlciwgc2NvcGVkQXJndW1lbnRzVGFibGUubV9hcmd1bWVu
dHMuZ2V0KCksIGxlbmd0aCk7CisgICAgfQorCisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU2NvcGVkQXJndW1l
bnRzVGFibGUqIHNjb3BlZEFyZ3VtZW50c1RhYmxlID0gU2NvcGVkQXJndW1lbnRzVGFibGU6OmNy
ZWF0ZShkZWNvZGVyLnZtKCksIGxlbmd0aCk7CisgICAgICAgIGFyZ3VtZW50cy5kZWNvZGUoZGVj
b2Rlciwgc2NvcGVkQXJndW1lbnRzVGFibGUtPm1fYXJndW1lbnRzLmdldCgpLCBsZW5ndGgpOwor
ICAgICAgICByZXR1cm4gc2NvcGVkQXJndW1lbnRzVGFibGU7CisgICAgfQorfTsKKworc3RydWN0
IENhY2hlZFN5bWJvbFRhYmxlRW50cnkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFN5bWJvbFRhYmxl
RW50cnksIENhY2hlZFN5bWJvbFRhYmxlRW50cnk+IHsKKyAgICBpbnRwdHJfdCBiaXRzOworCisg
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIHN5bWJvbFRh
YmxlRW50cnkpCisgICAgeworICAgICAgICBiaXRzID0gc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMg
fCBTeW1ib2xUYWJsZUVudHJ5OjpTbGltRmxhZzsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShE
ZWNvZGVyJiwgU3ltYm9sVGFibGVFbnRyeSYgc3ltYm9sVGFibGVFbnRyeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHN5bWJvbFRhYmxlRW50cnkubV9iaXRzID0gYml0czsKKyAgICB9Cit9OworCitz
dHJ1Y3QgQ2FjaGVkU3ltYm9sVGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFN5bWJvbFRhYmxl
LCBDYWNoZWRTeW1ib2xUYWJsZT4geworICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENh
Y2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSwgSWRlbnRpZmll
clJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFN5bWJvbFRh
YmxlSW5kZXhIYXNoVHJhaXRzPiBtYXA7CisgICAgU2NvcGVPZmZzZXQgbWF4U2NvcGVPZmZzZXQ7
CisgICAgdW5zaWduZWQgdXNlc05vblN0cmljdEV2YWwgOiAxOworICAgIHVuc2lnbmVkIG5lc3Rl
ZExleGljYWxTY29wZSA6IDE7CisgICAgdW5zaWduZWQgc2NvcGVUeXBlIDogMzsKKyAgICAvLyBG
SVhNRTogZG8gd2UgbmVlZCB0byBjYWNoZWQgdGhpcyBldmVudHVhbGx5PworICAgIC8vIENhY2hl
ZFB0cjxTeW1ib2xUYWJsZVJhcmVEYXRhPiByYXJlRGF0YTsKKyAgICBDYWNoZWRQdHI8Q2FjaGVk
U2NvcGVkQXJndW1lbnRzVGFibGU+IGFyZ3VtZW50czsKKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghc3ltYm9sVGFibGUubV9yYXJlRGF0YSk7CisgICAgICAgIG1hcC5lbmNvZGUo
ZW5jb2Rlciwgc3ltYm9sVGFibGUubV9tYXApOworICAgICAgICBtYXhTY29wZU9mZnNldCA9IHN5
bWJvbFRhYmxlLm1fbWF4U2NvcGVPZmZzZXQ7CisgICAgICAgIHVzZXNOb25TdHJpY3RFdmFsID0g
c3ltYm9sVGFibGUubV91c2VzTm9uU3RyaWN0RXZhbDsKKyAgICAgICAgbmVzdGVkTGV4aWNhbFNj
b3BlID0gc3ltYm9sVGFibGUubV9uZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAgICAgIHNjb3BlVHlw
ZSA9IHN5bWJvbFRhYmxlLm1fc2NvcGVUeXBlOworICAgICAgICBhcmd1bWVudHMuZW5jb2RlKGVu
Y29kZXIsIHN5bWJvbFRhYmxlLm1fYXJndW1lbnRzLmdldCgpKTsKKyAgICB9CisKKyAgICBTeW1i
b2xUYWJsZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0o
KSk7CisgICAgICAgIG1hcC5kZWNvZGUoZGVjb2Rlciwgc3ltYm9sVGFibGUtPm1fbWFwKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUtPm1fbWF4U2NvcGVPZmZzZXQgPSBtYXhTY29wZU9mZnNldDsKKyAg
ICAgICAgc3ltYm9sVGFibGUtPm1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9uU3RyaWN0RXZh
bDsKKyAgICAgICAgc3ltYm9sVGFibGUtPm1fbmVzdGVkTGV4aWNhbFNjb3BlID0gbmVzdGVkTGV4
aWNhbFNjb3BlOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9zY29wZVR5cGUgPSBzY29wZVR5cGU7
CisgICAgICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29wZWRBcmd1bWVudHNUYWJsZSA9IGFy
Z3VtZW50cy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzY29wZWRBcmd1bWVudHNUYWJs
ZSkKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cy5zZXQoZGVjb2Rlci52bSgp
LCBzeW1ib2xUYWJsZSwgc2NvcGVkQXJndW1lbnRzVGFibGUpOworICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGU7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEpTVmFsdWU7CitzdHJ1Y3QgQ2Fj
aGVkSW1tdXRhYmxlQnV0dGVyZmx5IDogcHVibGljIENhY2hlZE9iamVjdDxKU0ltbXV0YWJsZUJ1
dHRlcmZseSwgQ2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PiB7CisgICAgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgdW5pb24geworICAgICAgICBD
YWNoZWRBcnJheTxkb3VibGU+IGNhY2hlZERvdWJsZXM7CisgICAgICAgIENhY2hlZEFycmF5PENh
Y2hlZEpTVmFsdWUsIFdyaXRlQmFycmllcjxVbmtub3duPj4gY2FjaGVkVmFsdWVzOworICAgIH07
CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0ltbXV0YWJsZUJ1dHRlcmZs
eSYgaW1tdXRhYmxlQnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgbGVuZ3RoID0gaW1tdXRhYmxl
QnV0dGVyZmx5Lmxlbmd0aCgpOworICAgICAgICBpbmRleGluZ1R5cGUgPSBpbW11dGFibGVCdXR0
ZXJmbHkuaW5kZXhpbmdNb2RlKCk7IC8vIHRoaXMgaXMgY29uZnVzaW5nLCBub3Qgc3VyZSB3aHkg
d2UgaGF2ZSB0byB1c2UgaW5kZXhpbmdNb2RlIHZzIGluZGV4aW5nVHlwZQorICAgICAgICBpZiAo
aGFzRG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBjYWNoZWREb3VibGVzLmVuY29k
ZShlbmNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+Y29udGlndW91c0Rv
dWJsZSgpLmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FjaGVk
VmFsdWVzLmVuY29kZShlbmNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+
Y29udGlndW91cygpLmRhdGEoKSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBKU0ltbXV0YWJsZUJ1
dHRlcmZseSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBK
U0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJbW11dGFibGVCdXR0
ZXJmbHk6OmNyZWF0ZShkZWNvZGVyLnZtKCksIGluZGV4aW5nVHlwZSwgbGVuZ3RoKTsKKyAgICAg
ICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgY2FjaGVkRG91Ymxl
cy5kZWNvZGUoZGVjb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250
aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBsZW5ndGgsIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGNhY2hlZFZhbHVlcy5kZWNvZGUoZGVjb2RlciwgaW1tdXRh
YmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBsZW5ndGgs
IGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgIHJldHVybiBpbW11dGFibGVCdXR0ZXJmbHk7
CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFJlZ0V4cCA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8
UmVnRXhwLCBDYWNoZWRSZWdFeHA+IHsKKyAgICBDYWNoZWRTdHJpbmcgcGF0dGVyblN0cmluZzsK
KyAgICBSZWdFeHBGbGFncyBmbGFnczsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFJlZ0V4cCYgcmVnRXhwKQorICAgIHsKKyAgICAgICAgcGF0dGVyblN0cmluZy5l
bmNvZGUoZW5jb2RlciwgcmVnRXhwLm1fcGF0dGVyblN0cmluZyk7CisgICAgICAgIGZsYWdzID0g
cmVnRXhwLm1fZmxhZ3M7CisgICAgfQorCisgICAgUmVnRXhwKiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuIHsgcGF0dGVyblN0cmlu
Zy5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICAgICAgcmV0dXJuIFJlZ0V4cDo6Y3JlYXRlKGRlY29k
ZXIudm0oKSwgcGF0dGVybiwgZmxhZ3MpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRUZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3IgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFRlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvciwgQ2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPiB7CisgICAgQ2FjaGVk
VmVjdG9yPENhY2hlZFN0cmluZywgND4gcmF3U3RyaW5nczsKKyAgICBDYWNoZWRWZWN0b3I8Q2Fj
aGVkT3B0aW9uYWw8Q2FjaGVkU3RyaW5nPiwgND4gY29va2VkU3RyaW5nczsKKworICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciYg
dGVtcGxhdGVPYmplY3REZXNjcmlwdG9yKQorICAgIHsKKyAgICAgICAgcmF3U3RyaW5ncy5lbmNv
ZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLnJhd1N0cmluZ3MoKSk7CisgICAg
ICAgIGNvb2tlZFN0cmluZ3MuZW5jb2RlKGVuY29kZXIsIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
ci5jb29rZWRTdHJpbmdzKCkpOworICAgIH0KKworICAgIFJlZjxUZW1wbGF0ZU9iamVjdERlc2Ny
aXB0b3I+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yOjpTdHJpbmdWZWN0b3IgZGVjb2RlZFJhd1N0cmluZ3M7Cisg
ICAgICAgIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6T3B0aW9uYWxTdHJpbmdWZWN0b3IgZGVj
b2RlZENvb2tlZFN0cmluZ3M7CisgICAgICAgIHJhd1N0cmluZ3MuZGVjb2RlKGRlY29kZXIsIGRl
Y29kZWRSYXdTdHJpbmdzKTsKKyAgICAgICAgY29va2VkU3RyaW5ncy5kZWNvZGUoZGVjb2Rlciwg
ZGVjb2RlZENvb2tlZFN0cmluZ3MpOworICAgICAgICByZXR1cm4gVGVtcGxhdGVPYmplY3REZXNj
cmlwdG9yOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkUmF3U3RyaW5ncyksIFdURk1vdmUoZGVjb2Rl
ZENvb2tlZFN0cmluZ3MpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkQmlnSW50IDogcHVi
bGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEpTQmlnSW50LCBDYWNoZWRCaWdJbnQ+IHsKKyAgICB1
bnNpZ25lZCBsZW5ndGg7CisgICAgYm9vbCBzaWduOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgSlNCaWdJbnQmIGJpZ0ludCkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IGJp
Z0ludC5sZW5ndGgoKTsKKyAgICAgICAgc2lnbiA9IGJpZ0ludC5zaWduKCk7CisKKyAgICAgICAg
aWYgKCFsZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgc2l6
ZSA9IHNpemVvZihKU0JpZ0ludDo6RGlnaXRbbGVuZ3RoXSk7CisgICAgICAgIHRoaXMtPmFsbG9j
YXRlKGVuY29kZXIsIHNpemUpOworICAgICAgICBtZW1jcHkodGhpcy0+YnVmZmVyKCksIGJpZ0lu
dC5kYXRhU3RvcmFnZSgpLCBzaXplKTsKKyAgICB9CisKKyAgICBKU0JpZ0ludCogZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0g
SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoZGVjb2Rlci52bSgpLCBsZW5ndGgp
OworICAgICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7CisgICAgICAgIG1lbWNweShiaWdJbnQt
PmRhdGFTdG9yYWdlKCksIHRoaXMtPmJ1ZmZlcigpLCBzaXplb2YoSlNCaWdJbnQ6OkRpZ2l0W2xl
bmd0aF0pKTsKKyAgICAgICAgcmV0dXJuIGJpZ0ludDsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2Fj
aGVkSlNWYWx1ZSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxXcml0ZUJhcnJpZXI8VW5r
bm93bj4sIENhY2hlZEpTVmFsdWU+IHsKKyAgICBlbnVtIGNsYXNzIEVuY29kZWRUeXBlIDogdWlu
dDhfdCB7CisgICAgICAgIEpTVmFsdWUsCisgICAgICAgIFN5bWJvbFRhYmxlLAorICAgICAgICBT
dHJpbmcsCisgICAgICAgIEltbXV0YWJsZUJ1dHRlcmZseSwKKyAgICAgICAgUmVnRXhwLAorICAg
ICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IsCisgICAgICAgIEJpZ0ludCwKKyAgICB9Owor
CisgICAgRW5jb2RlZFR5cGUgdHlwZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpT
VmFsdWUgdiA9IHZhbHVlLmdldCgpOworCisgICAgICAgIGlmICghdi5pc0NlbGwoKSB8fCB2Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpKU1ZhbHVlOworICAg
ICAgICAgICAgKnRoaXMtPmFsbG9jYXRlPEVuY29kZWRKU1ZhbHVlPihlbmNvZGVyKSA9IEpTVmFs
dWU6OmVuY29kZSh2KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHYuYXNDZWxsKCk7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvID0gY2VsbC0+Y2xhc3NJbmZvKGVuY29kZXIudm0oKSk7CisKKyAgICAgICAgaWYgKGNs
YXNzSW5mbyA9PSBTeW1ib2xUYWJsZTo6aW5mbygpKSB7CisgICAgICAgICAgICB0eXBlID0gRW5j
b2RlZFR5cGU6OlN5bWJvbFRhYmxlOworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVk
U3ltYm9sVGFibGU+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmpzQ2FzdDxTeW1ib2xUYWJs
ZSo+KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChjbGFzc0luZm8gPT0gSlNTdHJpbmc6OmluZm8oKSkgeworICAgICAgICAgICAgdHlwZSA9IEVu
Y29kZWRUeXBlOjpTdHJpbmc7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gYXNTdHJp
bmcoY2VsbCktPnRyeUdldFZhbHVlKCkuaW1wbCgpOworICAgICAgICAgICAgQVNTRVJUKCFpbXBs
IHx8ICFpbXBsLT5pc1N5bWJvbCgpKTsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hl
ZFVuaXF1ZWRTdHJpbmdJbXBsPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICppbXBsKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0g
SlNJbW11dGFibGVCdXR0ZXJmbHk6OmluZm8oKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29k
ZWRUeXBlOjpJbW11dGFibGVCdXR0ZXJmbHk7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxD
YWNoZWRJbW11dGFibGVCdXR0ZXJmbHk+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmpzQ2Fz
dDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gUmVnRXhwOjppbmZvKCkpIHsKKyAg
ICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6UmVnRXhwOworICAgICAgICAgICAgdGhpcy0+
YWxsb2NhdGU8Q2FjaGVkUmVnRXhwPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8
UmVnRXhwKj4oY2VsbCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGNsYXNzSW5mbyA9PSBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6aW5mbygpKSB7
CisgICAgICAgICAgICB0eXBlID0gRW5jb2RlZFR5cGU6OlRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
cjsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFRlbXBsYXRlT2JqZWN0RGVzY3Jp
cHRvcj4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCBqc0Nhc3Q8SlNUZW1wbGF0ZU9iamVjdERl
c2NyaXB0b3IqPihjZWxsKS0+ZGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gSlNCaWdJbnQ6OmluZm8oKSkgewor
ICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpCaWdJbnQ7CisgICAgICAgICAgICB0aGlz
LT5hbGxvY2F0ZTxDYWNoZWRCaWdJbnQ+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmpzQ2Fz
dDxKU0JpZ0ludCo+KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSwgY29u
c3QgSlNDZWxsKiBvd25lcikgY29uc3QKKyAgICB7CisgICAgICAgIEpTVmFsdWUgdjsKKyAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkpTVmFsdWU6Cisg
ICAgICAgICAgICB2ID0gSlNWYWx1ZTo6ZGVjb2RlKCp0aGlzLT5idWZmZXI8RW5jb2RlZEpTVmFs
dWU+KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN5
bWJvbFRhYmxlOgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRTeW1ib2xUYWJs
ZT4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RW5jb2RlZFR5cGU6OlN0cmluZzogeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlt
cGwgPSB0aGlzLT5idWZmZXI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+KCktPmRlY29kZShkZWNv
ZGVyKTsKKyAgICAgICAgICAgIHYgPSBKU1N0cmluZzo6Y3JlYXRlKGRlY29kZXIudm0oKSwgYWRv
cHRSZWYoKmltcGwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgRW5jb2RlZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseToKKyAgICAgICAgICAgIHYgPSB0aGlz
LT5idWZmZXI8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PigpLT5kZWNvZGUoZGVjb2Rlcik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6UmVnRXhwOgorICAg
ICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRSZWdFeHA+KCktPmRlY29kZShkZWNvZGVy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I6CisgICAgICAgICAgICB2ID0gSlNUZW1wbGF0ZU9iamVjdERlc2Ny
aXB0b3I6OmNyZWF0ZShkZWNvZGVyLnZtKCksIHRoaXMtPmJ1ZmZlcjxDYWNoZWRUZW1wbGF0ZU9i
amVjdERlc2NyaXB0b3I+KCktPmRlY29kZShkZWNvZGVyKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6QmlnSW50OgorICAgICAgICAgICAgdiA9IHRoaXMt
PmJ1ZmZlcjxDYWNoZWRCaWdJbnQ+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZS5zZXQoZGVjb2Rlci52bSgpLCBvd25l
ciwgdik7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEluc3RydWN0aW9uU3RyZWFtIDogcHVi
bGljIENhY2hlZE9iamVjdDxJbnN0cnVjdGlvblN0cmVhbSwgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJl
YW0+IHsKKyAgICBDYWNoZWRWZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
IGluc3RydWN0aW9uczsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBzdHJlYW0pCisgICAgeworICAgICAgICBpbnN0cnVjdGlvbnMu
ZW5jb2RlKGVuY29kZXIsIHN0cmVhbS5tX2luc3RydWN0aW9ucyk7CisgICAgfQorCisgICAgSW5z
dHJ1Y3Rpb25TdHJlYW0qIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBpbnN0cnVjdGlv
bnNWZWN0b3I7CisgICAgICAgIGluc3RydWN0aW9ucy5kZWNvZGUoZGVjb2RlciwgaW5zdHJ1Y3Rp
b25zVmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJbnN0cnVjdGlvblN0cmVhbShXVEZNb3Zl
KGluc3RydWN0aW9uc1ZlY3RvcikpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRNZXRhZGF0
YVRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZE1ldGFkYXRhVGFibGUsIENhY2hl
ZE1ldGFkYXRhVGFibGU+IHsKKyAgICBib29sIGhhc01ldGFkYXRhOworICAgIHN0ZDo6YXJyYXk8
dW5zaWduZWQsIFVubGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM+IG1l
dGFkYXRhOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkTWV0YWRh
dGFUYWJsZSYgbWV0YWRhdGFUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YVRh
YmxlLm1faXNGaW5hbGl6ZWQpOworICAgICAgICBoYXNNZXRhZGF0YSA9IG1ldGFkYXRhVGFibGUu
bV9oYXNNZXRhZGF0YTsKKyAgICAgICAgaWYgKCFoYXNNZXRhZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpz
X29mZnNldFRhYmxlRW50cmllczsgaS0tOykKKyAgICAgICAgICAgIG1ldGFkYXRhW2ldID0gbWV0
YWRhdGFUYWJsZS5idWZmZXIoKVtpXTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVy
JiwgVW5saW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YVRhYmxlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgbWV0YWRhdGFUYWJsZS5tX2lzRmluYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgbWV0YWRh
dGFUYWJsZS5tX2lzTGlua2VkID0gZmFsc2U7CisgICAgICAgIG1ldGFkYXRhVGFibGUubV9oYXNN
ZXRhZGF0YSA9IGhhc01ldGFkYXRhOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBVbmxpbmtl
ZE1ldGFkYXRhVGFibGU6OnNfb2Zmc2V0VGFibGVFbnRyaWVzOyBpLS07KQorICAgICAgICAgICAg
bWV0YWRhdGFUYWJsZS5idWZmZXIoKVtpXSA9IG1ldGFkYXRhW2ldOworICAgIH0KK307CisKK3N0
cnVjdCBDYWNoZWRTb3VyY2VPcmlnaW4gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZU9yaWdp
biwgQ2FjaGVkU291cmNlT3JpZ2luPiB7CisgICAgQ2FjaGVkU3RyaW5nIHN0cmluZzsKKworICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZU9yaWdpbiYgc291cmNl
T3JpZ2luKQorICAgIHsKKyAgICAgICAgc3RyaW5nLmVuY29kZShlbmNvZGVyLCBzb3VyY2VPcmln
aW4uc3RyaW5nKCkpOworICAgIH0KKworICAgIFNvdXJjZU9yaWdpbiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTb3VyY2VPcmlnaW4geyBzdHJp
bmcuZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFRleHRQb3Np
dGlvbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VGV4dFBvc2l0aW9uLCBDYWNoZWRUZXh0UG9zaXRp
b24+IHsKKyAgICBpbnQgbGluZTsKKyAgICBpbnQgY29sdW1uOworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24pCisgICAgeworICAgICAgICBsaW5l
ID0gdGV4dFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKKyAgICAgICAgY29sdW1uID0g
dGV4dFBvc2l0aW9uLm1fY29sdW1uLnplcm9CYXNlZEludCgpOworICAgIH0KKworICAgIFRleHRQ
b3NpdGlvbiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVGV4
dFBvc2l0aW9uIHsgT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5lKSwgT3JkaW5h
bE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb2x1bW4pIH07CisgICAgfQorfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIENhY2hlZFR5cGU+CitzdHJ1Y3QgQ2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlVHlwZSwg
Q2FjaGVkVHlwZT4geworICAgIGJvb2wgdmFsaWRhdGVkIDogMTsKKyAgICBDYWNoZWRTb3VyY2VP
cmlnaW4gc291cmNlT3JpZ2luOworICAgIENhY2hlZFN0cmluZyB1cmw7CisgICAgQ2FjaGVkU3Ry
aW5nIHNvdXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRTdHJpbmcgc291cmNlTWFwcGluZ1VS
TERpcmVjdGl2ZTsKKyAgICBDYWNoZWRUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbjsKKworICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBzb3Vy
Y2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIHZhbGlkYXRlZCA9IHNvdXJjZVByb3ZpZGVyLmlz
VmFsaWQoKTsKKyAgICAgICAgc291cmNlT3JpZ2luLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92
aWRlci5zb3VyY2VPcmlnaW4oKSk7CisgICAgICAgIHVybC5lbmNvZGUoZW5jb2Rlciwgc291cmNl
UHJvdmlkZXIudXJsKCkpOworICAgICAgICBzb3VyY2VVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29k
ZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZVVSTCgpKTsKKyAgICAgICAgc291cmNlTWFwcGluZ1VS
TERpcmVjdGl2ZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlTWFwcGluZ1VS
TCgpKTsKKyAgICAgICAgc3RhcnRQb3NpdGlvbi5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlk
ZXIuc3RhcnRQb3NpdGlvbigpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAodmFsaWRhdGVkKQorICAgICAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0VmFsaWQo
KTsKKyAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNlVVJMRGlyZWN0aXZlKHNvdXJjZVVS
TERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOworICAgICAgICBzb3VyY2VQcm92aWRlci5zZXRT
b3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZGVjb2Rl
KGRlY29kZXIpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlk
ZXIgOiBwdWJsaWMgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRl
ciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVk
U291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRlciwgQ2FjaGVkU3RyaW5nU291
cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZTsKKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVyJiBzb3VyY2VQ
cm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92
aWRlcik7CisgICAgICAgIHNvdXJjZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291
cmNlKCkudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgU3RyaW5nU291cmNlUHJvdmlkZXIqIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGUgc291cmNlVHlw
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBkZWNvZGVkU291cmNlID0gc291cmNlLmRl
Y29kZShkZWNvZGVyKTsKKyAgICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRTb3VyY2VPcmlnaW4g
PSBzb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOworICAgICAgICBTdHJpbmcgZGVjb2RlZFVS
TCA9IHVybC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFRleHRQb3NpdGlvbiBkZWNvZGVkU3Rh
cnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24uZGVjb2RlKGRlY29kZXIpOworCisgICAgICAgIFJl
ZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3VyY2VQcm92
aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVSTChVUkwo
KSwgZGVjb2RlZFVSTCksIGRlY29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsKKyAgICAg
ICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuICZzb3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CisgICAgfQorfTsKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKK3N0cnVjdCBDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDog
cHVibGljIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRl
ciwgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4geworICAgIHVzaW5nIEJhc2UgPSBD
YWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENhY2hl
ZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJBc3Nl
bWJseVNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6
OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIGRhdGEuZW5jb2RlKGVu
Y29kZXIsIHNvdXJjZVByb3ZpZGVyLmRhdGEoKSk7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlT
b3VyY2VQcm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBWZWN0b3I8dWludDhfdD4gZGVjb2RlZERhdGE7CisgICAgICAgIFNvdXJjZU9yaWdpbiBk
ZWNvZGVkU291cmNlT3JpZ2luID0gc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKKyAgICAg
ICAgU3RyaW5nIGRlY29kZWRVUkwgPSB1cmwuZGVjb2RlKGRlY29kZXIpOworCisgICAgICAgIGRh
dGEuZGVjb2RlKGRlY29kZXIsIGRlY29kZWREYXRhKTsKKworICAgICAgICBSZWY8V2ViQXNzZW1i
bHlTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBXZWJBc3NlbWJseVNvdXJjZVByb3Zp
ZGVyOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkRGF0YSksIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVS
TChVUkwoKSwgZGVjb2RlZFVSTCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291
cmNlUHJvdmlkZXIuZ2V0KCkpOworCisgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIubGVh
a1JlZigpOworICAgIH0KK307CisjZW5kaWYKKworc3RydWN0IENhY2hlZFNvdXJjZVByb3ZpZGVy
IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZVByb3ZpZGVyLCBDYWNoZWRTb3Vy
Y2VQcm92aWRlcj4geworICAgIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlOwor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlkZXIm
IHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgc291cmNlVHlwZSA9IHNvdXJjZVByb3Zp
ZGVyLnNvdXJjZVR5cGUoKTsKKyAgICAgICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7CisgICAgICAg
IGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNv
dXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgdGhpcy0+YWxsb2Nh
dGU8Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2Rlciwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmdTb3VyY2VQcm92aWRlciY+KHNvdXJjZVByb3Zp
ZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
ICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAg
ICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+KGVuY29k
ZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXZWJBc3NlbWJseVNv
dXJjZVByb3ZpZGVyJj4oc291cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vu
ZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgU291cmNlUHJvdmlkZXIqIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChzb3VyY2VUeXBl
KSB7CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAg
ICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAg
cmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2Rl
KGRlY29kZXIsIHNvdXJjZVR5cGUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAg
Y2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5OgorICAgICAgICAgICAg
cmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPigpLT5k
ZWNvZGUoZGVjb2Rlcik7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBDYWNoZVR5cGU+CitzdHJ1Y3QgQ2Fj
aGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZVR5
cGUsICBDYWNoZVR5cGU+IHsKKyAgICBDYWNoZWRQdHI8Q2FjaGVkU291cmNlUHJvdmlkZXI+IHBy
b3ZpZGVyOworICAgIGludCBzdGFydE9mZnNldDsKKyAgICBpbnQgZW5kT2Zmc2V0OworCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAgcHJvdmlkZXIuZW5jb2RlKGVuY29kZXIsIHNvdXJj
ZUNvZGUubV9wcm92aWRlci5nZXQoKSk7CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc291cmNlQ29k
ZS5zdGFydE9mZnNldCgpOworICAgICAgICBlbmRPZmZzZXQgPSBzb3VyY2VDb2RlLmVuZE9mZnNl
dCgpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2Vk
U291cmNlQ29kZSYgc291cmNlQ29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHNvdXJjZUNvZGUu
bV9wcm92aWRlciA9IHByb3ZpZGVyLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgc291cmNlQ29k
ZS5tX3N0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7CisgICAgICAgIHNvdXJjZUNvZGUubV9lbmRP
ZmZzZXQgPSBlbmRPZmZzZXQ7CisgICAgfQorfTsKKworCitzdHJ1Y3QgQ2FjaGVkVW5saW5rZWRT
b3VyY2VDb2RlIDogcHVibGljIENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFVubGlua2Vk
U291cmNlQ29kZSwgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlPiB7IH07CisKK3N0cnVjdCBDYWNo
ZWRTb3VyY2VDb2RlIDogcHVibGljIENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFNvdXJj
ZUNvZGUsIENhY2hlZFNvdXJjZUNvZGU+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkVW5saW5r
ZWRTb3VyY2VDb2RlU2hhcGU8U291cmNlQ29kZSwgQ2FjaGVkU291cmNlQ29kZT47CisKKyAgICBp
bnQgZmlyc3RMaW5lOworICAgIGludCBzdGFydENvbHVtbjsKKworICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCisgICAgeworICAg
ICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZSk7CisgICAgICAgIGZpcnN0TGlu
ZSA9IHNvdXJjZUNvZGUuZmlyc3RMaW5lKCkuemVyb0Jhc2VkSW50KCk7CisgICAgICAgIHN0YXJ0
Q29sdW1uID0gc291cmNlQ29kZS5zdGFydENvbHVtbigpLnplcm9CYXNlZEludCgpOworICAgIH0K
KworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGUmIHNvdXJjZUNv
ZGUpIGNvbnN0CisgICAgeworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlQ29k
ZSk7CisgICAgICAgIHNvdXJjZUNvZGUubV9maXJzdExpbmUgPSBPcmRpbmFsTnVtYmVyOjpmcm9t
WmVyb0Jhc2VkSW50KGZpcnN0TGluZSk7CisgICAgICAgIHNvdXJjZUNvZGUubV9zdGFydENvbHVt
biA9IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoc3RhcnRDb2x1bW4pOworICAgIH0K
K307CisKK3N0cnVjdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+
IHsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSYpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBkZWNvZGUoRGVjb2Rl
ciYpIGNvbnN0OworCisgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zmc2V0OworICAgIHVuc2lnbmVk
IGxpbmVDb3VudDsKKyAgICB1bnNpZ25lZCB1bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0OworICAg
IHVuc2lnbmVkIHVubGlua2VkQm9keVN0YXJ0Q29sdW1uOworICAgIHVuc2lnbmVkIHVubGlua2Vk
Qm9keUVuZENvbHVtbjsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBz
b3VyY2VMZW5ndGg7CisgICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OworICAgIHVu
c2lnbmVkIHR5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCB0eXBlUHJvZmls
aW5nRW5kT2Zmc2V0OworICAgIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50OworICAgIENvZGVGZWF0
dXJlcyBmZWF0dXJlczsKKyAgICBTb3VyY2VQYXJzZU1vZGUgc291cmNlUGFyc2VNb2RlOworICAg
IHVuc2lnbmVkIGlzSW5TdHJpY3RDb250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCBoYXNDYXB0dXJl
ZFZhcmlhYmxlcyA6IDE7CisgICAgdW5zaWduZWQgaXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAg
IHVuc2lnbmVkIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yIDogMTsKKyAgICB1bnNp
Z25lZCBjb25zdHJ1Y3RBYmlsaXR5OiAxOworICAgIHVuc2lnbmVkIGNvbnN0cnVjdG9yS2luZCA6
IDI7CisgICAgdW5zaWduZWQgZnVuY3Rpb25Nb2RlIDogMjsgLy8gRnVuY3Rpb25Nb2RlCisgICAg
dW5zaWduZWQgc2NyaXB0TW9kZTogMTsgLy8gSlNQYXJzZXJTY3JpcHRNb2RlCisgICAgdW5zaWdu
ZWQgc3VwZXJCaW5kaW5nIDogMTsKKyAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGU6IDI7
CisKKyAgICBDYWNoZWRTb3VyY2VDb2RlIGNsYXNzU291cmNlOworCisgICAgQ2FjaGVkSWRlbnRp
ZmllciBuYW1lOworICAgIENhY2hlZElkZW50aWZpZXIgZWNtYU5hbWU7CisgICAgQ2FjaGVkSWRl
bnRpZmllciBpbmZlcnJlZE5hbWU7CisKKyAgICBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IHBh
cmVudFNjb3BlVERaVmFyaWFibGVzOworCisgICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1
bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiB1bmxpbmtlZENvZGVC
bG9ja0ZvckNhbGw7CisgICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJs
b2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiB1bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0
cnVjdDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENh
Y2hlZENvZGVCbG9ja1R5cGU+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrIDogcHVibGljIENhY2hl
ZE9iamVjdDxDb2RlQmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tUeXBlPiB7CisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJik7CisgICAgdm9pZCBkZWNv
ZGUoRGVjb2RlciYsIFVubGlua2VkQ29kZUJsb2NrJikgY29uc3Q7CisKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1JlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcjsKKworICAgIHVuc2lnbmVk
IHVzZXNFdmFsIDogMTsKKyAgICB1bnNpZ25lZCBpc1N0cmljdE1vZGUgOiAxOworICAgIHVuc2ln
bmVkIGlzQ29uc3RydWN0b3IgOiAxOworICAgIHVuc2lnbmVkIGhhc0NhcHR1cmVkVmFyaWFibGVz
IDogMTsKKyAgICB1bnNpZ25lZCBpc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWduZWQg
c3VwZXJCaW5kaW5nIDogMTsKKyAgICB1bnNpZ25lZCBzY3JpcHRNb2RlOiAxOworICAgIHVuc2ln
bmVkIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIGlzQ2xhc3NDb250
ZXh0IDogMTsKKyAgICB1bnNpZ25lZCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzIDog
MTsKKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQgOiAyOworICAgIHVuc2lnbmVkIGRlcml2
ZWRDb250ZXh0VHlwZSA6IDI7CisgICAgdW5zaWduZWQgZXZhbENvbnRleHRUeXBlIDogMjsKKyAg
ICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMgOiAxOworCisgICAgdW5zaWduZWQgbGluZUNvdW50Owor
ICAgIHVuc2lnbmVkIGVuZENvbHVtbjsKKworICAgIGludCBudW1WYXJzOworICAgIGludCBudW1D
YWxsZWVMb2NhbHM7CisgICAgaW50IG51bVBhcmFtZXRlcnM7CisKKyAgICBDb2RlRmVhdHVyZXMg
ZmVhdHVyZXM7CisgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZTsKKyAgICBDb2RlVHlwZSBj
b2RlVHlwZTsKKworICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExpbmtUaW1lQ29uc3RhbnRDb3Vu
dD4gbGlua1RpbWVDb25zdGFudHM7CisgICAgQ2FjaGVkTWV0YWRhdGFUYWJsZSBtZXRhZGF0YTsK
KworICAgIENhY2hlZE9wdGlvbmFsPENhY2hlZFJhcmVEYXRhPiByYXJlRGF0YTsKKworICAgIENh
Y2hlZFN0cmluZyBzb3VyY2VVUkxEaXJlY3RpdmU7CisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZU1h
cHBpbmdVUkxEaXJlY3RpdmU7CisKKyAgICBDYWNoZWRQdHI8Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJl
YW0+IGluc3RydWN0aW9uczsKKyAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldD4ganVtcFRhcmdldHM7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQ+IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworICAgIENhY2hlZFZlY3RvcjxDYWNo
ZWRKU1ZhbHVlPiBjb25zdGFudFJlZ2lzdGVyczsKKyAgICBDYWNoZWRWZWN0b3I8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CisgICAg
Q2FjaGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IGV4cHJlc3Npb25JbmZvOworICAgIENh
Y2hlZEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PiBvdXRPZkxpbmVKdW1w
VGFyZ2V0czsKKworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRF
bnRyeT4gY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSWRl
bnRpZmllcj4gaWRlbnRpZmllcnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZEJpdFZlY3Rvcj4g
Yml0VmVjdG9yczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1
bmN0aW9uRXhlY3V0YWJsZT4+IGZ1bmN0aW9uRGVjbHM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hl
ZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBmdW5jdGlvbkV4cHJzOwor
fTsKKworc3RydWN0IENhY2hlZFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJs
b2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaywgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jaz4gewor
ICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
LCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrPjsKKyAgICB1c2luZyBCYXNlOjplbmNvZGU7CisKKyAg
ICBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IHZhckRlY2xhcmF0aW9uczsKKyAgICBDYWNoZWRW
YXJpYWJsZUVudmlyb25tZW50IGxleGljYWxEZWNsYXJhdGlvbnM7CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2smIGNvZGVC
bG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2spOwor
ICAgICAgICB2YXJEZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3ZhckRl
Y2xhcmF0aW9ucyk7CisgICAgICAgIGxleGljYWxEZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIs
IGNvZGVCbG9jay5tX2xleGljYWxEZWNsYXJhdGlvbnMpOworICAgIH0KKworICAgIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZGVjb2Rlci52bSgpLmhl
YXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAgICBj
b2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRl
Y29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgdmFyRGVjbGFyYXRpb25zLmRlY29k
ZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFyRGVjbGFyYXRpb25zKTsKKyAgICAgICAgbGV4aWNh
bERlY2xhcmF0aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2xleGljYWxEZWNsYXJh
dGlvbnMpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KK307CisKK3N0cnVjdCBD
YWNoZWRNb2R1bGVDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jaywgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrPiB7CisgICAgdXNpbmcg
QmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2ssIENh
Y2hlZE1vZHVsZUNvZGVCbG9jaz47CisgICAgdXNpbmcgQmFzZTo6ZW5jb2RlOworCisgICAgaW50
IG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OworCisg
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrKTsKKyAgICAgICAgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNv
bnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBjb2RlQmxvY2subV9tb2R1bGVFbnZpcm9ubWVudFN5bWJv
bFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKyAgICB9CisKKyAgICBVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KGRl
Y29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKGRlY29kZXIs
ICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkp
OworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIGNv
ZGVCbG9jay0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9m
ZnNldCA9IG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0
OworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRF
dmFsQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEV2YWxDb2RlQmxv
Y2ssIENhY2hlZEV2YWxDb2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJs
b2NrPFVubGlua2VkRXZhbENvZGVCbG9jaywgQ2FjaGVkRXZhbENvZGVCbG9jaz47CisgICAgdXNp
bmcgQmFzZTo6ZW5jb2RlOworCisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiB2YXJpYWJsZXM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hl
ZElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBmdW5jdGlvbkhvaXN0aW5nQ2Fu
ZGlkYXRlczsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlu
a2VkRXZhbENvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2Rl
KGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgICAgIHZhcmlhYmxlcy5lbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrLm1fdmFyaWFibGVzKTsKKyAgICAgICAgZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0
ZXMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVz
KTsKKyAgICB9CisKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+
KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKGRlY29kZXIsICp0aGlz
KTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAg
ICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIHZhcmlhYmxl
cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX3ZhcmlhYmxlcyk7CisgICAgICAgIGZ1bmN0
aW9uSG9pc3RpbmdDYW5kaWRhdGVzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fZnVuY3Rp
b25Ib2lzdGluZ0NhbmRpZGF0ZXMpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0K
K307CisKK3N0cnVjdCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2Rl
QmxvY2s8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaywgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s+
IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2ssIENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrPjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2smIGNvZGVCbG9jaykK
KyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2spOworICAgIH0K
KworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJs
b2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
az4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKGRlY29kZXIs
ICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkp
OworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybiBjb2RlQmxvY2s7CisgICAgfQorfTsKKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrOjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIs
IGNvbnN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBC
YXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw7CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBD
YWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1
c2luZyB0eXBlID0gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jazsKK307CisKK3RlbXBsYXRlPD4KK3N0
cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+IHsKKyAgICB1c2luZyB0eXBlID0gQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOworfTsKKwordGVt
cGxhdGU8Pgorc3RydWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkRXZhbENvZGVC
bG9jaz4geworICAgIHVzaW5nIHR5cGUgPSBDYWNoZWRFdmFsQ29kZUJsb2NrOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3VzaW5nIENhY2hlZENvZGVCbG9ja1R5cGUgPSB0eXBlbmFtZSBD
YWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxUPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUg
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwg
Q2FjaGVkQ29kZUJsb2NrVHlwZT4mIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rl
ci52bSgpLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2luc3RydWN0aW9ucyhjYWNoZWRDb2RlQmxvY2su
aW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyKSkKKyAgICAsIG1fbGl2ZW5lc3MobnVsbHB0cikK
KyAgICAsIG1fdGhpc1JlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay50aGlzUmVnaXN0ZXIpCisgICAg
LCBtX3Njb3BlUmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnNjb3BlUmVnaXN0ZXIpCisgICAgLCBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay5nbG9iYWxPYmplY3RSZWdpc3Rl
cikKKworICAgICwgbV9zb3VyY2VVUkxEaXJlY3RpdmUoY2FjaGVkQ29kZUJsb2NrLnNvdXJjZVVS
TERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpCisgICAgLCBtX3NvdXJjZU1hcHBpbmdVUkxEaXJl
Y3RpdmUoY2FjaGVkQ29kZUJsb2NrLnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZGVjb2RlKGRl
Y29kZXIpKQorCisgICAgLCBtX3VzZXNFdmFsKGNhY2hlZENvZGVCbG9jay51c2VzRXZhbCkKKyAg
ICAsIG1faXNTdHJpY3RNb2RlKGNhY2hlZENvZGVCbG9jay5pc1N0cmljdE1vZGUpCisgICAgLCBt
X2lzQ29uc3RydWN0b3IoY2FjaGVkQ29kZUJsb2NrLmlzQ29uc3RydWN0b3IpCisgICAgLCBtX2hh
c0NhcHR1cmVkVmFyaWFibGVzKGNhY2hlZENvZGVCbG9jay5oYXNDYXB0dXJlZFZhcmlhYmxlcykK
KyAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oY2FjaGVkQ29kZUJsb2NrLmlzQnVpbHRpbkZ1bmN0
aW9uKQorICAgICwgbV9zdXBlckJpbmRpbmcoY2FjaGVkQ29kZUJsb2NrLnN1cGVyQmluZGluZykK
KyAgICAsIG1fc2NyaXB0TW9kZShjYWNoZWRDb2RlQmxvY2suc2NyaXB0TW9kZSkKKyAgICAsIG1f
aXNBcnJvd0Z1bmN0aW9uQ29udGV4dChjYWNoZWRDb2RlQmxvY2suaXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCkKKyAgICAsIG1faXNDbGFzc0NvbnRleHQoY2FjaGVkQ29kZUJsb2NrLmlzQ2xhc3NDb250
ZXh0KQorICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKGNhY2hlZENvZGVC
bG9jay53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKQorICAgICwgbV9jb25zdHJ1Y3Rv
cktpbmQoY2FjaGVkQ29kZUJsb2NrLmNvbnN0cnVjdG9yS2luZCkKKyAgICAsIG1fZGVyaXZlZENv
bnRleHRUeXBlKGNhY2hlZENvZGVCbG9jay5kZXJpdmVkQ29udGV4dFR5cGUpCisgICAgLCBtX2V2
YWxDb250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZXZhbENvbnRleHRUeXBlKQorICAgICwgbV9o
YXNUYWlsQ2FsbHMoY2FjaGVkQ29kZUJsb2NrLmhhc1RhaWxDYWxscykKKyAgICAsIG1fbGluZUNv
dW50KGNhY2hlZENvZGVCbG9jay5saW5lQ291bnQpCisgICAgLCBtX2VuZENvbHVtbihjYWNoZWRD
b2RlQmxvY2suZW5kQ29sdW1uKQorICAgICwgbV9udW1WYXJzKGNhY2hlZENvZGVCbG9jay5udW1W
YXJzKQorICAgICwgbV9udW1DYWxsZWVMb2NhbHMoY2FjaGVkQ29kZUJsb2NrLm51bUNhbGxlZUxv
Y2FscykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhjYWNoZWRDb2RlQmxvY2subnVtUGFyYW1ldGVy
cykKKyAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKQorICAgICwgbV9w
YXJzZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSkKKyAgICAsIG1fY29kZVR5cGUoY2Fj
aGVkQ29kZUJsb2NrLmNvZGVUeXBlKQorICAgICwgbV9yYXJlRGF0YShjYWNoZWRDb2RlQmxvY2su
cmFyZURhdGEuZGVjb2RlQXNQdHIoZGVjb2RlcikpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5M
SU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5
cGU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVW5saW5rZWRDb2RlQmxvY2smIGNvZGVCbG9j
aykgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBMaW5rVGltZUNvbnN0YW50Q291bnQ7
IGktLTspCisgICAgICAgIGNvZGVCbG9jay5tX2xpbmtUaW1lQ29uc3RhbnRzW2ldID0gbGlua1Rp
bWVDb25zdGFudHNbaV07CisKKyAgICBtZXRhZGF0YS5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2Nr
Lm1fbWV0YWRhdGEpOworICAgIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNv
ZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk7CisgICAgY29uc3Rh
bnRSZWdpc3RlcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50UmVnaXN0ZXJz
LCAmY29kZUJsb2NrKTsKKyAgICBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uZGVj
b2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bik7CisgICAgZXhwcmVzc2lvbkluZm8uZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2V4cHJl
c3Npb25JbmZvKTsKKyAgICBvdXRPZkxpbmVKdW1wVGFyZ2V0cy5kZWNvZGUoZGVjb2RlciwgY29k
ZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOworICAgIGp1bXBUYXJnZXRzLmRlY29kZShk
ZWNvZGVyLCBjb2RlQmxvY2subV9qdW1wVGFyZ2V0cyk7CisgICAgY29uc3RhbnRJZGVudGlmaWVy
U2V0cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRJZGVudGlmaWVyU2V0cyk7
CisgICAgaWRlbnRpZmllcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2lkZW50aWZpZXJz
KTsKKyAgICBiaXRWZWN0b3JzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0b3Jz
KTsKKyAgICBmdW5jdGlvbkRlY2xzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlv
bkRlY2xzLCAmY29kZUJsb2NrKTsKKyAgICBmdW5jdGlvbkV4cHJzLmRlY29kZShkZWNvZGVyLCBj
b2RlQmxvY2subV9mdW5jdGlvbkV4cHJzLCAmY29kZUJsb2NrKTsKK30KKworQUxXQVlTX0lOTElO
RSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNv
ZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxv
Y2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKworQUxXQVlTX0lO
TElORSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2sm
IGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2Nr
KQoreworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRXZhbENvZGVCbG9jazo6VW5saW5rZWRF
dmFsQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hlZEV2YWxDb2RlQmxvY2sm
IGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlu
a2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUmIGV4ZWN1dGFi
bGUpCit7CisgICAgZmlyc3RMaW5lT2Zmc2V0ID0gZXhlY3V0YWJsZS5tX2ZpcnN0TGluZU9mZnNl
dDsKKyAgICBsaW5lQ291bnQgPSBleGVjdXRhYmxlLm1fbGluZUNvdW50OworICAgIHVubGlua2Vk
RnVuY3Rpb25OYW1lU3RhcnQgPSBleGVjdXRhYmxlLm1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFy
dDsKKyAgICB1bmxpbmtlZEJvZHlTdGFydENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEJv
ZHlTdGFydENvbHVtbjsKKyAgICB1bmxpbmtlZEJvZHlFbmRDb2x1bW4gPSBleGVjdXRhYmxlLm1f
dW5saW5rZWRCb2R5RW5kQ29sdW1uOworICAgIHN0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3N0
YXJ0T2Zmc2V0OworICAgIHNvdXJjZUxlbmd0aCA9IGV4ZWN1dGFibGUubV9zb3VyY2VMZW5ndGg7
CisgICAgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3BhcmFtZXRlcnNTdGFy
dE9mZnNldDsKKyAgICB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBleGVj
dXRhYmxlLm1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKKyAgICBwYXJhbWV0ZXJDb3VudCA9IGV4
ZWN1dGFibGUubV9wYXJhbWV0ZXJDb3VudDsKKworICAgIGZlYXR1cmVzID0gZXhlY3V0YWJsZS5t
X2ZlYXR1cmVzOworICAgIHNvdXJjZVBhcnNlTW9kZSA9IGV4ZWN1dGFibGUubV9zb3VyY2VQYXJz
ZU1vZGU7CisKKyAgICBpc0luU3RyaWN0Q29udGV4dCA9IGV4ZWN1dGFibGUubV9pc0luU3RyaWN0
Q29udGV4dDsKKyAgICBoYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGV4ZWN1dGFibGUubV9oYXNDYXB0
dXJlZFZhcmlhYmxlczsKKyAgICBpc0J1aWx0aW5GdW5jdGlvbiA9IGV4ZWN1dGFibGUubV9pc0J1
aWx0aW5GdW5jdGlvbjsKKyAgICBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGV4
ZWN1dGFibGUubV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcjsKKyAgICBjb25zdHJ1
Y3RBYmlsaXR5ID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdEFiaWxpdHk7CisgICAgY29uc3RydWN0
b3JLaW5kID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdG9yS2luZDsKKyAgICBmdW5jdGlvbk1vZGUg
PSBleGVjdXRhYmxlLm1fZnVuY3Rpb25Nb2RlOworICAgIHNjcmlwdE1vZGUgPSBleGVjdXRhYmxl
Lm1fc2NyaXB0TW9kZTsKKyAgICBzdXBlckJpbmRpbmcgPSBleGVjdXRhYmxlLm1fc3VwZXJCaW5k
aW5nOworICAgIGRlcml2ZWRDb250ZXh0VHlwZSA9IGV4ZWN1dGFibGUubV9kZXJpdmVkQ29udGV4
dFR5cGU7CisKKyAgICBjbGFzc1NvdXJjZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX2Ns
YXNzU291cmNlKTsKKworICAgIG5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubmFtZSgp
KTsKKyAgICBlY21hTmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5lY21hTmFtZSgpKTsK
KyAgICBpbmZlcnJlZE5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUuaW5mZXJyZWROYW1l
KCkpOworCisgICAgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGV4ZWN1
dGFibGUucGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSk7CisKKyAgICB1bmxpbmtlZENvZGVCbG9j
a0ZvckNhbGwuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubV91bmxpbmtlZENvZGVCbG9ja0Zv
ckNhbGwpOworICAgIHVubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmVuY29kZShlbmNvZGVy
LCBleGVjdXRhYmxlLm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworfQorCitBTFdB
WVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDYWNoZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAoreworICAgIFZhcmlhYmxlRW52
aXJvbm1lbnQgZW52OworICAgIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLmRlY29kZShkZWNvZGVy
LCBlbnYpOworCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVj
b2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBlbnYs
ICp0aGlzKTsKKyAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOwor
CisgICAgY2xhc3NTb3VyY2UuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fY2xhc3NTb3Vy
Y2UpOworICAgIHVubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0
YWJsZS0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwsIGV4ZWN1dGFibGUpOworICAgIHVubGlu
a2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX3Vu
bGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LCBleGVjdXRhYmxlKTsKKworICAgIHJldHVybiBl
eGVjdXRhYmxlOworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVu
dmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29uc3QgQ2FjaGVkRnVuY3Rpb25F
eGVjdXRhYmxlJiBjYWNoZWRFeGVjdXRhYmxlKQorICAgIDogQmFzZShkZWNvZGVyLnZtKCksIGRl
Y29kZXIudm0oKS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAg
ICAsIG1fZmlyc3RMaW5lT2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUuZmlyc3RMaW5lT2Zmc2V0KQor
ICAgICwgbV9saW5lQ291bnQoY2FjaGVkRXhlY3V0YWJsZS5saW5lQ291bnQpCisgICAgLCBtX3Vu
bGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEZ1bmN0aW9u
TmFtZVN0YXJ0KQorICAgICwgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbihjYWNoZWRFeGVjdXRh
YmxlLnVubGlua2VkQm9keVN0YXJ0Q29sdW1uKQorICAgICwgbV91bmxpbmtlZEJvZHlFbmRDb2x1
bW4oY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEJvZHlFbmRDb2x1bW4pCisgICAgLCBtX3N0YXJ0
T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUuc3RhcnRPZmZzZXQpCisgICAgLCBtX3NvdXJjZUxlbmd0
aChjYWNoZWRFeGVjdXRhYmxlLnNvdXJjZUxlbmd0aCkKKyAgICAsIG1fcGFyYW1ldGVyc1N0YXJ0
T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUucGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KQorICAgICwgbV90
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nU3Rh
cnRPZmZzZXQpCisgICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQoY2FjaGVkRXhlY3V0YWJs
ZS50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KQorICAgICwgbV9wYXJhbWV0ZXJDb3VudChjYWNoZWRF
eGVjdXRhYmxlLnBhcmFtZXRlckNvdW50KQorICAgICwgbV9mZWF0dXJlcyhjYWNoZWRFeGVjdXRh
YmxlLmZlYXR1cmVzKQorICAgICwgbV9zb3VyY2VQYXJzZU1vZGUoY2FjaGVkRXhlY3V0YWJsZS5z
b3VyY2VQYXJzZU1vZGUpCisgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KGNhY2hlZEV4ZWN1dGFi
bGUuaXNJblN0cmljdENvbnRleHQpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGNhY2hl
ZEV4ZWN1dGFibGUuaGFzQ2FwdHVyZWRWYXJpYWJsZXMpCisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0
aW9uKGNhY2hlZEV4ZWN1dGFibGUuaXNCdWlsdGluRnVuY3Rpb24pCisgICAgLCBtX2lzQnVpbHRp
bkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKGNhY2hlZEV4ZWN1dGFibGUuaXNCdWlsdGluRGVmYXVs
dENsYXNzQ29uc3RydWN0b3IpCisgICAgLCBtX2NvbnN0cnVjdEFiaWxpdHkoY2FjaGVkRXhlY3V0
YWJsZS5jb25zdHJ1Y3RBYmlsaXR5KQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVkRXhl
Y3V0YWJsZS5jb25zdHJ1Y3RvcktpbmQpCisgICAgLCBtX2Z1bmN0aW9uTW9kZShjYWNoZWRFeGVj
dXRhYmxlLmZ1bmN0aW9uTW9kZSkKKyAgICAsIG1fc2NyaXB0TW9kZShjYWNoZWRFeGVjdXRhYmxl
LnNjcmlwdE1vZGUpCisgICAgLCBtX3N1cGVyQmluZGluZyhjYWNoZWRFeGVjdXRhYmxlLnN1cGVy
QmluZGluZykKKyAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNhY2hlZEV4ZWN1dGFibGUuZGVy
aXZlZENvbnRleHRUeXBlKQorCisgICAgLCBtX25hbWUoY2FjaGVkRXhlY3V0YWJsZS5uYW1lLmRl
Y29kZShkZWNvZGVyKSkKKyAgICAsIG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0YWJsZS5lY21hTmFt
ZS5kZWNvZGUoZGVjb2RlcikpCisgICAgLCBtX2luZmVycmVkTmFtZShjYWNoZWRFeGVjdXRhYmxl
LmluZmVycmVkTmFtZS5kZWNvZGUoZGVjb2RlcikpCisKKyAgICAsIG1fcGFyZW50U2NvcGVURFpW
YXJpYWJsZXMoZGVjb2Rlci52bSgpLm1fY29tcGFjdFZhcmlhYmxlTWFwLT5nZXQocGFyZW50U2Nv
cGVURFpWYXJpYWJsZXMpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
LCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIENhY2hl
ZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJiBjb2RlQmxvY2spCit7Cisg
ICAgdGhpc1JlZ2lzdGVyID0gY29kZUJsb2NrLm1fdGhpc1JlZ2lzdGVyOworICAgIHNjb3BlUmVn
aXN0ZXIgPSBjb2RlQmxvY2subV9zY29wZVJlZ2lzdGVyOworICAgIGdsb2JhbE9iamVjdFJlZ2lz
dGVyID0gY29kZUJsb2NrLm1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisgICAgdXNlc0V2YWwgPSBj
b2RlQmxvY2subV91c2VzRXZhbDsKKyAgICBpc1N0cmljdE1vZGUgPSBjb2RlQmxvY2subV9pc1N0
cmljdE1vZGU7CisgICAgaXNDb25zdHJ1Y3RvciA9IGNvZGVCbG9jay5tX2lzQ29uc3RydWN0b3I7
CisgICAgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBjb2RlQmxvY2subV9oYXNDYXB0dXJlZFZhcmlh
YmxlczsKKyAgICBpc0J1aWx0aW5GdW5jdGlvbiA9IGNvZGVCbG9jay5tX2lzQnVpbHRpbkZ1bmN0
aW9uOworICAgIHN1cGVyQmluZGluZyA9IGNvZGVCbG9jay5tX3N1cGVyQmluZGluZzsKKyAgICBz
Y3JpcHRNb2RlID0gY29kZUJsb2NrLm1fc2NyaXB0TW9kZTsKKyAgICBpc0Fycm93RnVuY3Rpb25D
b250ZXh0ID0gY29kZUJsb2NrLm1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dDsKKyAgICBpc0NsYXNz
Q29udGV4dCA9IGNvZGVCbG9jay5tX2lzQ2xhc3NDb250ZXh0OworICAgIHdhc0NvbXBpbGVkV2l0
aERlYnVnZ2luZ09wY29kZXMgPSBjb2RlQmxvY2subV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdP
cGNvZGVzOworICAgIGNvbnN0cnVjdG9yS2luZCA9IGNvZGVCbG9jay5tX2NvbnN0cnVjdG9yS2lu
ZDsKKyAgICBkZXJpdmVkQ29udGV4dFR5cGUgPSBjb2RlQmxvY2subV9kZXJpdmVkQ29udGV4dFR5
cGU7CisgICAgZXZhbENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZXZhbENvbnRleHRUeXBlOwor
ICAgIGhhc1RhaWxDYWxscyA9IGNvZGVCbG9jay5tX2hhc1RhaWxDYWxsczsKKyAgICBsaW5lQ291
bnQgPSBjb2RlQmxvY2subV9saW5lQ291bnQ7CisgICAgZW5kQ29sdW1uID0gY29kZUJsb2NrLm1f
ZW5kQ29sdW1uOworICAgIG51bVZhcnMgPSBjb2RlQmxvY2subV9udW1WYXJzOworICAgIG51bUNh
bGxlZUxvY2FscyA9IGNvZGVCbG9jay5tX251bUNhbGxlZUxvY2FsczsKKyAgICBudW1QYXJhbWV0
ZXJzID0gY29kZUJsb2NrLm1fbnVtUGFyYW1ldGVyczsKKyAgICBmZWF0dXJlcyA9IGNvZGVCbG9j
ay5tX2ZlYXR1cmVzOworICAgIHBhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKKyAg
ICBjb2RlVHlwZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBlOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gTGlua1RpbWVDb25zdGFudENvdW50OyBpLS07KQorICAgICAgICBsaW5rVGltZUNvbnN0YW50
c1tpXSA9IGNvZGVCbG9jay5tX2xpbmtUaW1lQ29uc3RhbnRzW2ldOworCisgICAgbWV0YWRhdGEu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhKTsKKyAgICByYXJlRGF0YS5lbmNv
ZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEpOworCisgICAgc291cmNlVVJMRGlyZWN0
aXZlLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9zb3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgp
KTsKKyAgICBzb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9zb3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsKKworICAgIGluc3RydWN0aW9ucy5lbmNv
ZGUoZW5jb2RlciwgY29kZUJsb2NrLm1faW5zdHJ1Y3Rpb25zLmdldCgpKTsKKyAgICBwcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMpOworICAgIGNvbnN0YW50UmVnaXN0ZXJzLmVuY29kZShlbmNvZGVy
LCBjb2RlQmxvY2subV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgIGV4cHJlc3Npb25JbmZvLmVuY29kZShlbmNvZGVy
LCBjb2RlQmxvY2subV9leHByZXNzaW9uSW5mbyk7CisgICAganVtcFRhcmdldHMuZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBvdXRPZkxpbmVKdW1wVGFyZ2V0
cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOworCisg
ICAgY29uc3RhbnRJZGVudGlmaWVyU2V0cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29u
c3RhbnRJZGVudGlmaWVyU2V0cyk7CisgICAgaWRlbnRpZmllcnMuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX2lkZW50aWZpZXJzKTsKKyAgICBiaXRWZWN0b3JzLmVuY29kZShlbmNvZGVyLCBj
b2RlQmxvY2subV9iaXRWZWN0b3JzKTsKKyAgICBmdW5jdGlvbkRlY2xzLmVuY29kZShlbmNvZGVy
LCBjb2RlQmxvY2subV9mdW5jdGlvbkRlY2xzKTsKKyAgICBmdW5jdGlvbkV4cHJzLmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkV4cHJzKTsKK30KKworc3RydWN0IENhY2hlZFNv
dXJjZUNvZGVLZXkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZUNvZGVLZXksIENhY2hlZFNv
dXJjZUNvZGVLZXk+IHsKKyAgICBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGUgc291cmNlQ29kZTsK
KyAgICBDYWNoZWRTdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBmbGFnczsKKyAgICB1bnNpZ25l
ZCBoYXNoOworICAgIGludCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9u
OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlQ29kZUtl
eSYga2V5KQorICAgIHsKKyAgICAgICAgc291cmNlQ29kZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1f
c291cmNlQ29kZSk7CisgICAgICAgIG5hbWUuZW5jb2RlKGVuY29kZXIsIGtleS5tX25hbWUpOwor
ICAgICAgICBmbGFncyA9IGtleS5tX2ZsYWdzLm1fZmxhZ3M7CisgICAgICAgIGhhc2ggPSBrZXku
aGFzaCgpOworICAgICAgICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9u
ID0ga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsKKyAgICB9
CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlS2V5JiBrZXkp
IGNvbnN0CisgICAgeworICAgICAgICBzb3VyY2VDb2RlLmRlY29kZShkZWNvZGVyLCBrZXkubV9z
b3VyY2VDb2RlKTsKKyAgICAgICAgbmFtZS5kZWNvZGUoZGVjb2Rlciwga2V5Lm1fbmFtZSk7Cisg
ICAgICAgIGtleS5tX2ZsYWdzLm1fZmxhZ3MgPSBmbGFnczsKKyAgICAgICAga2V5Lm1faGFzaCA9
IGhhc2g7CisgICAgICAgIGtleS5tX2Z1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9z
aXRpb24gPSBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KK3N0cnVjdCBD
YWNoZUVudHJ5IHsKKyAgICBDYWNoZWRTb3VyY2VDb2RlS2V5IGtleTsKKyAgICBDYWNoZWRQdHI8
Q2FjaGVkQ29kZUJsb2NrVHlwZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+PiBjb2RlQmxvY2s7CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBzdGQ6OnBhaXI8U291cmNlQ29kZUtl
eSwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4gcGFpcikKKyAgICB7CisgICAgICAgIGtl
eS5lbmNvZGUoZW5jb2RlciwgcGFpci5maXJzdCk7CisgICAgICAgIGNvZGVCbG9jay5lbmNvZGUo
ZW5jb2RlciwgcGFpci5zZWNvbmQpOworICAgIH0KKworICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2Rl
S2V5LCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFNvdXJjZUNvZGVLZXkgZGVjb2RlZEtleTsKKyAgICAgICAga2V5
LmRlY29kZShkZWNvZGVyLCBkZWNvZGVkS2V5KTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShk
ZWNvZGVkS2V5KSwgY29kZUJsb2NrLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBlbmNvZGVDb2RlQmxvY2soRW5jb2RlciYgZW5jb2RlciwgU291cmNlQ29kZUtleSBrZXksIGNv
bnN0IFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgYXV0byogZW50cnkgPSBl
bmNvZGVyLnRlbXBsYXRlIG1hbGxvYzxDYWNoZUVudHJ5PFVubGlua2VkQ29kZUJsb2NrVHlwZT4+
KCk7CisgICAgZW50cnktPmVuY29kZShlbmNvZGVyLCAgeyBrZXksIGpzQ2FzdDxjb25zdCBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqPihjb2RlQmxvY2spIH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgZW5jb2RlQ29kZUJsb2NrKEVuY29kZXImIGVuY29kZXIsIFNvdXJjZUNvZGVLZXkga2V5LCBj
b25zdCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvID0gY29kZUJsb2NrLT5jbGFzc0luZm8oZW5jb2Rlci52bSgpKTsKKworICAg
IGlmIChjbGFzc0luZm8gPT0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpIHsKKyAg
ICAgICAgZW5jb2RlQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZW5jb2Rlciwg
a2V5LCBjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNsYXNz
SW5mbyA9PSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkgeworICAgICAg
ICBlbmNvZGVDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVy
LCBrZXksIGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQo
Y2xhc3NJbmZvID09IFVubGlua2VkRXZhbENvZGVCbG9jazo6aW5mbygpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNw
cAppbmRleCA0NjAxNzkyMWE0NmVmYzY0MTcyNWQwYTIzNTI1MjkwMzVhZjVmM2FkLi5jMzJkMjA0
YjZjZDg5NjgxODFjYjBkMWRmMGVhYjgzZWMxMTgxOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKQEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBDb2RlQ2Fj
aGVNYXA6OnBydW5lU2xvd0Nhc2UoKQogCiAgICAgd2hpbGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkg
fHwgIWNhblBydW5lUXVpY2tseSgpKSB7CiAgICAgICAgIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0g
bV9tYXAuYmVnaW4oKTsKKworICAgICAgICB3cml0ZUNvZGVCbG9jaygqaXQtPnZhbHVlLmNlbGwt
PnZtKCksIGl0LT5rZXksIGl0LT52YWx1ZSk7CisKICAgICAgICAgbV9zaXplIC09IGl0LT5rZXku
bGVuZ3RoKCk7CiAgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CiAgICAgfQpAQCAtNTksOSArNjIs
OCBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxD
b2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVAogICAgICAgICB2bS50eXBlUHJvZmlsZXIoKSA/
IFR5cGVQcm9maWxlckVuYWJsZWQ6OlllcyA6IFR5cGVQcm9maWxlckVuYWJsZWQ6Ok5vLCAKICAg
ICAgICAgdm0uY29udHJvbEZsb3dQcm9maWxlcigpID8gQ29udHJvbEZsb3dQcm9maWxlckVuYWJs
ZWQ6OlllcyA6IENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpObywKICAgICAgICAgV1RGOjpu
dWxsb3B0KTsKLSAgICBTb3VyY2VDb2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRD
YWNoZUFuZFVwZGF0ZUFnZShrZXkpOwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2Rl
Q2FjaGUoKSkgewotICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJs
b2NrID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsK
KyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gbV9zb3VyY2VD
b2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkp
OworICAgIGlmICh1bmxpbmtlZENvZGVCbG9jayAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkg
ewogICAgICAgICB1bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bGluZUNv
dW50KCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRDb2RlQmxvY2st
PnN0YXJ0Q29sdW1uKCkgKyBzb3VyY2Uuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpOwogICAg
ICAgICBib29sIGVuZENvbHVtbklzT25TdGFydExpbmUgPSAhbGluZUNvdW50OwpAQCAtNzEsOSAr
NzMsOSBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9i
YWxDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVAogICAgICAgICBzb3VyY2UucHJvdmlkZXIo
KS0+c2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSh1bmxpbmtlZENvZGVCbG9jay0+c291cmNl
TWFwcGluZ1VSTERpcmVjdGl2ZSgpKTsKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2Nr
OwogICAgIH0KLSAgICAKKwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJU
RFo7Ci0gICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVy
YXRlVW5saW5rZWRDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBFeGVjdXRhYmxlVHlw
ZT4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdn
ZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAg
IHVubGlua2VkQ29kZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENv
ZGVCbG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJp
Y3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUs
ICZ2YXJpYWJsZXNVbmRlclREWik7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0
aW9uczo6dXNlQ29kZUNhY2hlKCkpCiAgICAgICAgIG1fc291cmNlQ29kZS5hZGRDYWNoZShrZXks
IFNvdXJjZUNvZGVWYWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fc291cmNlQ29kZS5hZ2Uo
KSkpOwpAQCAtMTEwLDkgKzExMiw4IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2Rl
Q2FjaGU6OmdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2CiAgICAgICAg
IHZtLnR5cGVQcm9maWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2Zp
bGVyRW5hYmxlZDo6Tm8sIAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250
cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6
Ok5vLAogICAgICAgICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsK
LSAgICBTb3VyY2VDb2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVw
ZGF0ZUFnZShrZXkpOwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkg
ewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fc291cmNlQ29kZS5maW5k
Q2FjaGVBbmRVcGRhdGVBZ2U8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBrZXkpOwor
ICAgIGlmIChleGVjdXRhYmxlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAg
IHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291
cmNlVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNl
TWFwcGluZ1VSTERpcmVjdGl2ZShleGVjdXRhYmxlLT5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZl
KCkpOwogICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKQEAgLTE1NSw0ICsxNTYsMTAgQEAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5j
dGlvbkV4ZWN1dGFibGUoVk0mIHYKICAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOwogfQog
Cit2b2lkIENvZGVDYWNoZTo6d3JpdGUoVk0mIHZtKQoreworICAgIGZvciAoY29uc3QgYXV0byYg
aXQgOiBtX3NvdXJjZUNvZGUpCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKHZtLCBpdC5rZXksIGl0
LnZhbHVlKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUu
aAppbmRleCA4YTQ0MTlmOTZjYThmYTRhNjI5YmUwZTlhNzgyN2NiYWY2OGNmZjg2Li45YTNjYmYy
OTgzMGNmZDJjN2I0M2Q2MWQ3N2MxOTdkNDZiYjdkZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2RlQ2FjaGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgi
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZUluZm8uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiUGFyc2VyLmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRF
dmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkBAIC04OSwxMyArOTEsNzYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
LSAgICBTb3VyY2VDb2RlVmFsdWUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShjb25zdCBTb3VyY2VD
b2RlS2V5JiBrZXkpCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigp
OyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVC
bG9ja1R5cGUqIGZldGNoRnJvbURpc2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYg
a2V5KQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlz
a0NhY2hlUGF0aCgpOworICAgICAgICBpZiAoIWNhY2hlUGF0aCkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBrZXkuaGFzaCgpOworICAgICAg
ICBjaGFyIGZpbGVuYW1lWzUxMl07CisgICAgICAgIGludCBjb3VudCA9IHNucHJpbnRmKGZpbGVu
YW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7CisgICAgICAgIGlmIChj
b3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisgICAgICAgIGlmIChm
ZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGludCByYyA9
IGZsb2NrKGZkLCBMT0NLX1NIIHwgTE9DS19OQik7CisgICAgICAgIGlmIChyYykgeworICAgICAg
ICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KworICAgICAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICAgICAgaW50IHJlcyA9IGZzdGF0KGZkLCAm
c2IpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2Iuc3Rfc2l6
ZSk7CisgICAgICAgIGlmIChyZXMgfHwgIXNpemUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBS
T1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAgICAgY29uc3QgYXV0byogY2FjaGVk
Q29kZUJsb2NrID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDYWNoZUVudHJ5PFVubGlua2VkQ29k
ZUJsb2NrVHlwZT4qPihidWZmZXIpOworICAgICAgICBEZWNvZGVyIGRlY29kZXIodm0sIGNhY2hl
ZENvZGVCbG9jaywgc2l6ZSk7CisgICAgICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqPiBlbnRyeTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICAgICAgZW50cnkgPSBjYWNoZWRDb2RlQmxvY2st
PmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbnRyeS5maXJzdCAh
PSBrZXkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhZGRDYWNoZShr
ZXksIFNvdXJjZUNvZGVWYWx1ZSh2bSwgZW50cnkuc2Vjb25kLCBtX2FnZSkpOworICAgICAgICBy
ZXR1cm4gZW50cnkuc2Vjb25kOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4KKyAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxV
bmxpbmtlZENvZGVCbG9jaywgVW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6
aXNfc2FtZTxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZh
bHVlLCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPgorICAgIGZldGNoRnJvbURpc2soVk0mIHZtLCBj
b25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisgICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jayA9IGZldGNoRnJvbURpc2tJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlw
ZT4odm0sIGtleSk7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZURpc2tDYWNo
ZSgpKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybiBjb2RlQmxvY2s7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBz
dGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Jhc2Vfb2Y8VW5saW5rZWRDb2RlQmxvY2ssIFQ+Ojp2
YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFQq
PgorICAgIGZldGNoRnJvbURpc2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JikgeyByZXR1cm4g
bnVsbHB0cjsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBl
PgorICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsKICAgICAgICAgcHJ1bmUoKTsKIAog
ICAgICAgICBpdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBp
ZiAoZmluZFJlc3VsdCA9PSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgcmV0dXJuIGZldGNoRnJvbURpc2s8VW5saW5rZWRDb2RlQmxvY2tUeXBl
Pih2bSwga2V5KTsKIAogICAgICAgICBpbnQ2NF90IGFnZSA9IG1fYWdlIC0gZmluZFJlc3VsdC0+
dmFsdWUuYWdlOwogICAgICAgICBpZiAoYWdlID4gbV9jYXBhY2l0eSkgewpAQCAtMTE1LDcgKzE4
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgZmluZFJlc3VsdC0+dmFsdWUuYWdlID0gbV9hZ2U7CiAg
ICAgICAgIG1fYWdlICs9IGtleS5sZW5ndGgoKTsKIAotICAgICAgICByZXR1cm4gJmZpbmRSZXN1
bHQtPnZhbHVlOworICAgICAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+
KGZpbmRSZXN1bHQtPnZhbHVlLmNlbGwuZ2V0KCkpOwogICAgIH0KIAogICAgIEFkZFJlc3VsdCBh
ZGRDYWNoZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYg
dmFsdWUpCkBAIC0xOTcsNiArMjYyLDcgQEAgcHVibGljOgogICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBTb3VyY2VDb2RlJiwgRGVidWdnZXJNb2RlLCBPcHRpb25hbDxp
bnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIFBhcnNlckVycm9y
Jik7CiAKICAgICB2b2lkIGNsZWFyKCkgeyBtX3NvdXJjZUNvZGUuY2xlYXIoKTsgfQorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGUoVk0mKTsKIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4gCkBA
IC0yNTYsNCArMzIyLDMxIEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtl
ZENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhCiAgICAgcmV0dXJuIHVu
bGlua2VkQ29kZUJsb2NrOwogfQogCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29k
ZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2Rl
VmFsdWUmIHZhbHVlKQoreworICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRp
c2tDYWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0ganNEeW5hbWljQ2FzdDxV
bmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsKKyAgICBpZiAoIWNvZGVC
bG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgaGFzaCA9IGtleS5oYXNoKCk7
CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGludCBjb3VudCA9IHNucHJpbnRmKGZpbGVu
YW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7CisgICAgaWYgKGNvdW50
IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgcmV0dXJuOworCisgICAgRW5jb2RlciBlbmNv
ZGVyKHZtKTsKKyAgICBlbmNvZGVDb2RlQmxvY2soZW5jb2Rlciwga2V5LCBjb2RlQmxvY2spOwor
CisgICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsK
KyAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOworICAgIGlmICghcmMp
CisgICAgICAgIDo6d3JpdGUoZmQsIGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuc2l6ZSgpKTsK
KyAgICBjbG9zZShmZCk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKaW5kZXggY2E1MzE2MzZiNzgxZTg2OWVhNzhm
NzZkMjViNWU0YWVhZDQxNjE4NS4uMmJjYWE5YjY3NjJkMjUyZjBiMzFlZTFhODk0OWNkZDgzNzQ2
ODAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcApAQCAt
MTY4OCwxMSArMTY4OCw2IEBAIGJvb2wgSlNCaWdJbnQ6OmdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWlubGluZSBzaXplX3QgSlNCaWdJbnQ6Om9mZnNldE9mRGF0YSgpCi17Ci0gICAg
cmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoRGlnaXQpPihzaXplb2YoSlNC
aWdJbnQpKTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogSlNCaWdJbnQqIEpT
QmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIENoYXJUeXBlKiAgZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoLCBFcnJvclBhcnNlTW9kZSBlcnJvclBhcnNlTW9kZSkKIHsKQEAgLTE3OTUsMTEg
KzE3OTAsNiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBDaGFyVHlwZSogZGF0YSwgdW5zaWduZWQgbAogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1pbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0KiBKU0JpZ0ludDo6ZGF0YVN0b3JhZ2UoKQotewot
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PERpZ2l0Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGhpcykgKyBvZmZzZXRPZkRhdGEoKSk7Ci19Ci0KIGlubGluZSBKU0JpZ0ludDo6RGlnaXQg
SlNCaWdJbnQ6OmRpZ2l0KHVuc2lnbmVkIG4pCiB7CiAgICAgQVNTRVJUKG4gPCBsZW5ndGgoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAppbmRleCAyYjNiZjkzMDdk
OGRiYmIxMTA3NTMzZWQ4MzAzNDdiY2RkNGE2MTBiLi5lMmE2NTc4MTA3MTcyOTRhOTRmODE3ODRh
MmU3MWM0OGE4YWQ1YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50
LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0JpZ0ludCBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOworICAgIGZyaWVuZCBzdHJ1Y3Qg
Q2FjaGVkQmlnSW50OwogCiBwdWJsaWM6CiAKQEAgLTIyOCw4ICsyMjksMTUgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoSlNCaWdJbnQqIHgpOwog
CiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAg
IHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCk7Ci0gICAgRGlnaXQqIGRhdGFTdG9yYWdlKCk7
CisgICAgaW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpT
QmlnSW50KSk7CisgICAgfQorCisgICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgpCisgICAg
eworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOworICAgIH0KIAogICAgIERpZ2l0IGRp
Z2l0KHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDY2Y2VjM2FmNzlmNmE4
MTNkOThiMzA2NzhlN2Q0ZmRmODZlYzYxMjYuLjk2MmQ4N2U5OTI2ZGFjZTM3NjZmNTk3M2QwOTZk
ODgyMjdlMWRlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CkBAIC01MTcsNiArNTE3LDEyIEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMoKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5
NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwogI2VuZGlmCisKKyAg
ICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQorICAgICAgICBPcHRpb25zOjpkaXNrQ2Fj
aGVQYXRoKCkgPSBudWxscHRyOworCisgICAgaWYgKCFPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkp
CisgICAgICAgIE9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKIH0KIAogdm9pZCBP
cHRpb25zOjppbml0aWFsaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAppbmRleCBlNjdkOTM5M2UwYzI2OGY4OTE3Yzk4MjI5YzFhZjM0OGFlMjFmMzYxLi40OGY2ZTYy
YTdhMDJiOTQxYTljMzFlODgxY2E2Y2IxZjI5ZDIyNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCkBAIC01MDgsNiArNTA4LDggQEAgY29uc3RleHByIGJvb2wgZW5h
YmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxzZTsKICAgICB2KGJvb2wsIHRyYWNlTExJ
bnRFeGVjdXRpb24sIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHRyYWNlTExJbnRTbG93UGF0aCwgZmFsc2UsIENvbmZpZ3VyYWJsZSwgbnVsbHB0cikgXAogICAg
IHYoYm9vbCwgdHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYob3B0aW9uU3RyaW5nLCBkaXNrQ2FjaGVQYXRoLCBudWxscHRyLCBSZXN0cmlj
dGVkLCAiIikgXAorICAgIHYoYm9vbCwgZm9yY2VEaXNrQ2FjaGUsIGZhbHNlLCBSZXN0cmljdGVk
LCAiIikgXAogCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHAuaAppbmRleCA4M2FhZDM1NjAzOGViMmVjNzZlNmI4YmQzN2M3NDc2Y2Vj
OTEzNTJlLi44OTMwNDU0YTRjMjNiYTg5ODY5ZWQ0NjRmNzQzYjI5YjMyZTkwMjlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaApAQCAtNDEsNiArNDEsOCBAQCBjbGFzcyBW
TTsKIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cEZsYWdzIHJlZ0V4cEZsYWdzKGNvbnN0IFN0cmlu
ZyYpOwogCiBjbGFzcyBSZWdFeHAgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBmcmllbmQg
c3RydWN0IENhY2hlZFJlZ0V4cDsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKaW5kZXggNDBlN2M3ZWMyZmQ2
MGI1ODQyYTU3Mjg1YWM5N2IwZjZhOTU5Mzk1ZC4uNWY1MDM0NGEzMDVjZDhmMDc3MDEzMDc0ZmRl
MGZkZDJlYzMzYWQyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCkBAIC0zOSw2ICszOSw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29t
bW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6eSBsaWtlCiAvLyAiZGVsZXRlIGFy
Z3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRlZmluZU93blByb3BlcnR5LgogY2xhc3Mg
U2NvcGVkQXJndW1lbnRzVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBmcmllbmQg
c3RydWN0IENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOworCiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAppbmRleCA5MTU3ZDViODI5MjAwZmI2
YTk2NWVhM2JjNzg2OTZlNTMyYTkyYjk1Li4yMjBmMDM3YmIxZTAxYTgwOWExZDdhZWIxOTkyMGVm
N2FiMzVjMjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgKQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD4KIC8vIGNvcHk6ICAg
ICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAogc3RydWN0IFN5bWJvbFRh
YmxlRW50cnkgeworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeTsKKwog
cHJpdmF0ZToKICAgICBzdGF0aWMgVmFyT2Zmc2V0IHZhck9mZnNldEZyb21CaXRzKGludHB0cl90
IGJpdHMpCiAgICAgewpAQCAtNDM2LDYgKzQzOCw4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUluZGV4
SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8U3ltYm9sVGFibGVFbnRyeT4gewogfTsKIAogY2xhc3Mg
U3ltYm9sVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBmcmllbmQgc3RydWN0IENh
Y2hlZFN5bWJvbFRhYmxlOworCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9C
aXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCmluZGV4IDc1NWNkN2E5YWE1
NzZjNmY3YTRkYjE0YzBkOWUzMDJjNzhkYjUxNzguLjQxZDk3MjJlNWYzNzQwNDljMjQ4YzVjZWJi
ODI2NzhhMDUzNGNhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAor
bmFtZXNwYWNlIEpTQyB7CitzdHJ1Y3QgQ2FjaGVkQml0VmVjdG9yOworfQorCiBuYW1lc3BhY2Ug
V1RGIHsKIAogLy8gVGhpcyBpcyBhIHNwYWNlLWVmZmljaWVudCwgcmVzaXplYWJsZSBiaXR2ZWN0
b3IgY2xhc3MuIEluIHRoZSBjb21tb24gY2FzZSBpdApAQCAtMzM4LDYgKzM0Miw4IEBAIHB1Ymxp
YzoKICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6
ZSgpKTsgfQogICAgICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIHN0cnVjdCBKU0M6OkNhY2hl
ZEJpdFZlY3RvcjsKKwogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCopIDw8IDM7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDkwYTBlYTg2ZTRkOGJlZTQ0ZGZjODBi
ZmEwNGFmYmJhZDA3NjFjOC4uMjg3ODk3MDU4ZjkwYWY4ZjMyYmMzYTc1ZTdjMjk2ZDA1YjUwNGVj
OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDE4LTEyLTI3ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUu
Y29tPgorCisgICAgICAgIENhY2hlIGJ5dGVjb2RlIHRvIGRpc2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjc4MgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNDYwODQ5MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHRlc3QgaGVscGVyIHRvIGV4ZWN1dGUgYnl0ZWNvZGUtY2FjaGUgdGVzdHM6
IGl0IGV4ZWN1dGVzIGVhY2ggdGVzdAorICAgICAgICB0d2ljZSwgdGhlIGZpcnN0IHdpdGggSlND
X2Rpc2tDYWNoZVBhdGggc2V0IHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeQorICAgICAgICBhbmQg
c2Vjb25kIHdpdGggSlNDX2ZvcmNlRGlza0NhY2hlPXRydWUgKGluIGFkZGl0aW9uIHRvIHRoZSBj
YWNoZSBwYXRoKQorICAgICAgICB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHRoZSBkaXNrIGNhY2hl
IGlzIGJlaW5nIHVzZWQgYW5kIG5vIG5ldworICAgICAgICBVbmxpbmtlZENvZGVCbG9ja3MgYXJl
IGJlaW5nIGNyZWF0ZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxw
ZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAyMDE5LTAxLTAyICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSG9tb2dyYXBoIHdpdGggTEFUSU4g
U01BTEwgTEVUVEVSIFIgV0lUSCBGSVNISE9PSwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9q
c2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlciBiL1Rvb2xz
L1NjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxw
ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzhjOTI5MjFkYjhkNGRkMjUwMjc0NDBjNmNmNGZkMWY5ZmFmN2U4OAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBlcnMv
Ynl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIKQEAgLTAsMCArMSw0OCBAQAorIyEvdXNyL2Jpbi9l
bnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgJ3J1Ynln
ZW1zJworcmVxdWlyZSAnZmlsZXV0aWxzJworcmVxdWlyZSAnanNvbicKK3JlcXVpcmUgJ3NoZWxs
d29yZHMnCityZXF1aXJlICd0bXBkaXInCisKK2RlZiBteXN5cygqY21kKQorICAgIHJhaXNlICJD
b21tYW5kICN7Y21kLmluc3BlY3R9IGZhaWxlZDogI3skPy5pbnNwZWN0fSIgdW5sZXNzIHN5c3Rl
bSgqY21kKQorZW5kCisKK3BhdGhUb1ZNID0gQVJHVlswXQoraW5wdXRGaWxlID0gQVJHVlsxXQor
ZXh0cmFPcHRpb25zID0gQVJHVlsyLi4tMV0KK2Rpc2tDYWNoZVBhdGggPSBEaXIubWt0bXBkaXIg
W2lucHV0RmlsZSwgJ2J5dGVjb2RlLWNhY2hlJ10KKworYmVnaW4KKyAgICBFTlZbIkpTQ19kaXNr
Q2FjaGVQYXRoIl0gPSBkaXNrQ2FjaGVQYXRoCisgICAgbXlzeXMocGF0aFRvVk0sIGlucHV0Rmls
ZSwgKmV4dHJhT3B0aW9ucykKKyAgICBFTlZbIkpTQ19mb3JjZURpc2tDYWNoZSJdID0gInRydWUi
CisgICAgbXlzeXMocGF0aFRvVk0sIGlucHV0RmlsZSwgKmV4dHJhT3B0aW9ucykKK2Vuc3VyZQor
ICAgIEZpbGVVdGlscy5ybV9yZihkaXNrQ2FjaGVQYXRoKQorZW5kCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwppbmRleCAzNWE5ZWIxYzU1ZTEwMmI1MmRkNDU1NzAyM2Q5MmQxNjAzZTBjNWEx
Li41ZGY1MDljMzJhNTI1NmFiZTM1YjliNWU5NmNkMDU3ZmNiMzA4YjkxIDEwMDc1NQotLS0gYS9U
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMKQEAgLTY1NSw2ICs2NTUsMTEgQEAgZGVmIHJ1bkRlZmF1bHQoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBydW4oImRlZmF1bHQiLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCitkZWYgcnVuQnl0ZWNv
ZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQorICAgIG9wdGlvbnMgPSBCQVNF
X09QVElPTlMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zICsgRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMKKyAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1j
YWNoZSIsIFsicnVieSIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVs
cGVyIikudG9fcywgcGF0aFRvVk0udG9fcywgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNp
bGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlcikKK2VuZAorCiBkZWYgcnVuQmln
SW50RW5hYmxlZCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgICMgRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS80MDMzMTEyMT4KICAgICBpZiAkcmVtb3RlIG9yICgkYXJjaGl0ZWN0dXJl
ICF+IC94ODYvaSBhbmQgJGhvc3RPUyA9PSAiZGFyd2luIikKQEAgLTc1MSw2ICs3NTYsNyBAQCBk
ZWYgZGVmYXVsdFJ1bgogICAgICAgICBkZWZhdWx0UXVpY2tSdW4KICAgICBlbHNlCiAgICAgICAg
IHJ1bkRlZmF1bHQKKyAgICAgICAgcnVuQnl0ZWNvZGVDYWNoZQogICAgICAgICBpZiAkaml0VGVz
dHMKICAgICAgICAgICAgIHJ1bk5vTExJbnQKICAgICAgICAgICAgIHJ1bk5vQ0pJVFZhbGlkYXRl
UGhhc2VzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358362</attachid>
            <date>2019-01-04 13:50:58 -0800</date>
            <delta_ts>2019-01-07 10:16:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190104225053.patch</filename>
            <type>text/plain</type>
            <size>116860</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NGQ0ZDZmOTU5ZjhhMjc4MWEzZGEyMTc4NjlmYzQ1MWNjNzJiYWEwLi43ZDJkZjE4NjVlMTkzYjRl
OTc3NDUxNDE5OTcyZTE3ODNkNzdkYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTEgQEAKKzIwMTgtMTItMjcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLiBBbHNvLCBkdXJpbmcgZGVjb2RpbmcsIHRoZSBjYWNoZWQgb2JqZWN0cworICAg
ICAgICBhcmUgbW1hcCdkIGZyb20gZGlzaywgYnV0IG9ubHkgdXNlZCBmb3IgY3JlYXRpbmcgaW5z
dGFuY2VzIG9mIHRoZSByZXNwZWN0aXZlCisgICAgICAgIGluLW1lbW9yeSB2ZXJzaW9uIG9mIGVh
Y2ggb2JqZWN0LiBJZGVhbGx5LCB0aGUgbW1hcCdkIG9iamVjdHMgc2hvdWxkIGJlIHVzZWQKKyAg
ICAgICAgYXQgcnVudGltZSBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyk6Cisg
ICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZp
ZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkSGFuZGxl
ckluZm86OlVubGlua2VkSGFuZGxlckluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0
aW9uU3RyZWFtLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFNldENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50SWRlbnRpZmllclNldHMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkR2xvYmFs
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxp
bmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0
YVRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGpzYy5jcHA6
CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBw
YXJzZXIvU291cmNlQ29kZS5oOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VDb2RlS2V5Lmg6Cisg
ICAgICAgIChKU0M6OlNvdXJjZUNvZGVLZXk6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAq
IHBhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvVmFyaWFibGVF
bnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkVuY29kZXI6OkVuY29kZXIpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjp+
RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnZtKToKKyAgICAgICAgKEpTQzo6RW5j
b2Rlcjo6YnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6c2l6ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkVuY29kZXI6Om1hbGxvY09mZnNldCk6CisgICAgICAgIChKU0M6OkVu
Y29kZXI6Om1hbGxvYyk6CisgICAgICAgIChKU0M6OkVuY29kZXI6Om9mZnNldE9mKToKKyAgICAg
ICAgKEpTQzo6RW5jb2Rlcjo6Y2FjaGVQdHIpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZz
ZXRGb3JQdHIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKEpT
Qzo6RGVjb2Rlcjo6fkRlY29kZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjp2bSk6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6Om9mZnNldE9mKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6Y2Fj
aGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjphZGRGaW5hbGl6ZXIpOgorICAgICAg
ICAoSlNDOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpD
YWNoZWRPYmplY3Q6OnNpemVPZik6CisgICAgICAgIChKU0M6OkNhY2hlZE9iamVjdDo6Y2FzdCk6
CisgICAgICAgIChKU0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6
VmFyaWFibGVMZW5ndGhPYmplY3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRy
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFB0cjo6b3BlcmF0b3ItPik6CisgICAgICAgIChKU0M6OkNhY2hlZFB0
cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFdy
aXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFBhaXI6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZElk
ZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2lt
cGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFi
bGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSYXJlRGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJp
dFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQml0VmVjdG9yOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRD
b25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRBcnJheTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3ltYm9s
VGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEltbXV0YWJsZUJ1dHRl
cmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5Ojpk
ZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdFeHA6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQmlnSW50OjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW5zdHJ1
Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE1ldGFkYXRh
VGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9yaWdpbjo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFRl
eHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJv
dmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlkZXJT
aGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nU291cmNlUHJv
dmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVy
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRl
cjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlUHJvdmlkZXI6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlOjplbmNv
ZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZW5jb2RlKToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHJv
Z3JhbUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkTW9kdWxl
Q29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRNb2R1bGVDb2RlQmxvY2s6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6OmVuY29k
ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9ja1R5cGU+OjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFsQ29k
ZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNv
ZGVLZXk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlRW50cnk6OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVCbG9jayk6
CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQ2Fj
aGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldFVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRVbmxpbmtl
ZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6d3Jp
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmVuZCk6CisgICAg
ICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGVNYXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAgIChKU0M6Ondy
aXRlQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoKKyAgICAgICAg
KiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGlt
ZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorCiAyMDE5LTAxLTAyICBEZXZpbiBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vzc28uY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEltcGxlbWVudCBgcXVlcnlPYmplY3RzYCBDb21t
YW5kIExpbmUgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDlkZTBjNmIxMjFjODQxMjJkMmZlM2MwZGJjYjcxNTQyYjc5ZTBi
YTguLmIxMWQzNTMwYzYxNTM2ZmZkZWI5MzA3NDFkYzQwMDk1MGI2OTNkNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTgtMTItMjcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBCaXRWZWN0b3JzIGhhdmUgdG8gYmUgZnJpZW5kcyB3aXRoIEpTQzo6Q2FjaGVCaXRWZWN0
b3IgdG8gYWxsb3cKKyAgICAgICAgc2VyaWFsaXppbmcgaXRzIGJ1ZmZlciBhcyBwYXJ0IG9mIHRo
ZSBieXRlY29kZSBjYWNoZSBlbmNvZGluZy4KKworICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoK
KwogMjAxOS0wMS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEhvbW9ncmFwaCB3aXRoIExBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRklT
SEhPT0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjNlZjFjNDIzODBiM2NlZjJm
MDBmYWM2NThlOTJlOWQ2ZTc5OWYwMy4uYzllZWNkMmViNGQ1NzNhYmQxODdjNDNlNzNkYTZkZTE1
OWI4MWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMxMzksNiArMzEzOSw3
IEBACiAJCTE0Mzg2QTczMURENjk4OTUwMDg2NTJDNCAvKiBEaXJlY3RFdmFsRXhlY3V0YWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RFdmFsRXhlY3V0YWJsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NjFERDY5ODlDMDA4NjUyQzQg
LyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQzODZBNzcxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kaXJlY3RFdmFsRXhl
Y3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDNCRTI2NTIxQzg1Nzc3
MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MDA1MUYw
QTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTm9kZS5oOyBwYXRoID0gdGVzdHMvTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDQwMDUyMDBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5jICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmM7IG5hbWUgPSBOb2RlLmM7IHBhdGggPSB0ZXN0cy9Ob2RlLmM7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNzQ4MEE1MzZDQzIwMDA1RjA2MSAvKiBOb2RlTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlTGlzdC5oOyBwYXRoID0gdGVz
dHMvTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1ODEsNiArNjU4
Miw3IEBACiAJCQkJOUU3Mjk0MDkxOTBGMDMwNjAwMUE5MUI1IC8qIEJ1bmRsZVBhdGgubW0gKi8s
CiAJCQkJMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovLAogCQkJCTBG
QjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCisJCQkJMTQz
QkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8qIENhY2hlZFR5cGVzLmggKi8sCiAJCQkJMEZFQzNDNUYx
RjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oICovLAogCQkJCUJDQTYyREZFMEUy
ODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUwN0YwRDlERjYzQjAw
ODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDQ1ZGU4MmU3Y2I1OGEyODNiMjBmY2FlNTk4MmJi
YjVjMDRkYTkxNzUuLmEwZjg1M2E2ZTA1ZGM0NjE4ZmYwNGRlNTkwMTliMWVhMTNkNmIzN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCkBA
IC02Myw2ICs2Myw3IEBAIEJ1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZNKiB2bSwgQ29tbW9u
SWRlbnRpZmllcnMqIGNvbW1vbklkZW50aWZpZXJzKQogICAgIEpTQ19DT01NT05fUFJJVkFURV9J
REVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QUklWQVRFX1RPX1BVQkxJ
Q19FTlRSWSkKICAgICBKU0NfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoSU5JVElBTEla
RV9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJ
RklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5U
UlkpCisgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9T
WU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFJJVkFURV9UT19QVUJMSUNfRU5UUlkpCiAgICAgSlND
X0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9TWU1CT0woSU5JVElB
TElaRV9TWU1CT0xfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgbV9wcml2YXRlVG9QdWJs
aWNNYXAuYWRkKG1fZG9sbGFyVk1Qcml2YXRlTmFtZS5pbXBsKCksICZtX2RvbGxhclZNTmFtZSk7
CiAgICAgbV9wdWJsaWNUb1ByaXZhdGVNYXAuYWRkKG1fZG9sbGFyVk1OYW1lLmltcGwoKSwgJm1f
ZG9sbGFyVk1Qcml2YXRlTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKaW5kZXggZjY2YjhjYjUxZWI0MDJkODczNmZkN2RkMGQyZDBlN2EyOTJm
NDUxMi4uODUzMWRiMjYwYmQwNzAxYjM3MTkwMWI2NzRiZmY1ZGYwYmZiZDg3NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaApAQCAtMjEzLDYgKzIx
Myw3IEBAIGV4dGVybiBTeW1ib2xJbXBsOjpTdGF0aWNTeW1ib2xJbXBsIHBvbHlQcm90b1ByaXZh
dGVOYW1lOwogLy8gV2UgY29tbWFuZGVlciB0aGUgcHVibGljVG9Qcml2YXRlTWFwIHRvIGFsbG93
IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1ib2wgbmFtZXMgaW50byB0aGUgYXBwcm9wcmlhdGUg
c3ltYm9sLgogLy8gZS5nLiBAaXRlcmF0b3JTeW1ib2wgcG9pbnRzIHRvIFN5bWJvbC5pdGVyYXRv
ciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0byBhIGFuIGFjdHVhbCBwcml2YXRlIG5hbWUuCiAv
LyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhhY2sgYW5kIHdlIHNob3VsZG4ndCBuZWVkIHRvIGRv
IHRoaXMuCisjZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZ
KG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sLmltcGwoKSwg
Jm1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllcik7CiAjZGVmaW5lIElOSVRJQUxJWkVf
U1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKG5hbWUpIG1fcHVibGljVG9Qcml2YXRlTWFw
LmFkZChtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIuaW1wbCgpLCAmbV8jI25hbWUj
I1N5bWJvbCk7CiAKIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDdhZmRhMzYzMTcyYWFiODZmMzljYWZhMzgz
YWQ4N2U2Njc1YzYyNzIuLmEyZDMyNjJkMTVmYzdkMDRkOTgwM2UwM2UwOWNjZjg3ZWM5N2E1YzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04
NjQsNyArODY0LDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQogfQogCi12b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0
ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNv
bnN0YW50cykKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3Rl
cnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25z
dGFudHMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA4ZDIzYmJjZGVl
ZDA1ODFmNTNiNmM2OTg2MjUxZWVlNjNkN2U2Yjg4Li40NjM3ZTNjNGZmNzViOGIwZTk4MjdhMGM2
OWExNDVjZGE2MzE4NDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCkBAIC04OTIsNyArODkyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQWxs
UHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsK
IAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3Qg
VmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7CisgICAgdm9p
ZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBWZWN0b3I8Q29u
c3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwogCiAgICAgdm9pZCBzZXRDb25z
dGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
bnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSGFuZGxlckluZm8uaAppbmRleCA2NmMzYjc2ODc3NTYyMDc3NmQyNjNmZjA5OGRlNmY0NmI2
NmU3NzgzLi43ZjQ2NWQyYWU5Mzc5OWI5MWRmNzg3MTQxOTRmY2EzNGJkMmExYTEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaApAQCAtODksNiArODks
MTAgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRIYW5k
bGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIFVubGlua2VkSGFuZGxlcklu
Zm8oKQorICAgIHsKKyAgICB9CisKICAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKHVpbnQzMl90IHN0
YXJ0LCB1aW50MzJfdCBlbmQsIHVpbnQzMl90IHRhcmdldCwgSGFuZGxlclR5cGUgaGFuZGxlclR5
cGUpCiAgICAgewogICAgICAgICB0aGlzLT5zdGFydCA9IHN0YXJ0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAppbmRleCA3MGVkZTNl
NDFjNWQ1YzQ4OWQ3OTZmY2ZjMGMxY2NkOTk4ZDI5ZWQ1Li5kOTMxNTRiYzZiNWMzNmQ0YTg0OTcx
MjUyZDA2MzJlNDQwZDRhZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBJbnN0cnVj
dGlvblN0cmVhbSB7CiAgICAgdXNpbmcgSW5zdHJ1Y3Rpb25CdWZmZXIgPSBWZWN0b3I8dWludDhf
dCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+OwogCiAgICAgZnJpZW5kIGNsYXNzIEluc3RydWN0
aW9uU3RyZWFtV3JpdGVyOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJl
YW07CiBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXgg
ZjBlOWQ2NGM4NTRhM2Y1MzY3NTJkNDg3NDY5MmQyNzg3N2Q2NzA0OS4uMGIyMzZhMDJkNTlkYzI1
OGU5MDg5MGM5MjVhM2M4OGIwNWM1MDdmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTY1LDEyICs2NSwxNSBAQCBjbGFz
cyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitzdHJ1Y3QgQ2FjaGVkQ29k
ZUJsb2NrOworCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxlOwogdHlwZWRl
ZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5r
ZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExp
bmtJbmZvOwotdXNpbmcgQ29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElk
ZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKIAogc3RydWN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpAQCAtMTY4LDcg
KzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJl
Z2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRl
QmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAg
ICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SW5kZW50aWZpZXJTZXRF
bnRyeShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBw
ZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpP
dGhlcikKQEAgLTIwMiw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xpbmtU
aW1lQ29uc3RhbnRzW2luZGV4XTsKICAgICB9CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmll
cjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lz
dGVyczsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBj
b25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3Rh
bnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQog
ICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFu
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KQEAgLTM2Nyw2ICszNzAsMTAgQEAg
cHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1
cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJs
b2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3RydWN0dXJlKiwgY29u
c3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+Jik7
CisKICAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQpAQCAtMzc4LDYgKzM4NSw5IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5
dGVjb2RlUmV3cml0ZXI7CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJs
b2NrVHlwZT4KKyAgICBmcmllbmQgc3RydWN0IENhY2hlZENvZGVCbG9jazsKKwogICAgIHZvaWQg
YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYsIEluc3RydWN0aW9uU3RyZWFtV3Jp
dGVyJik7CiAKICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQpAQCAtNDQ0LDcg
KzQ1NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7
CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwogICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7Ci0gICAgVmVjdG9yPENvbnN0YW50
SW5kZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAgIFZlY3Rv
cjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwog
ICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKICAgICBGdW5j
dGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCmluZGV4IDk5
ODdiNDMxMzM0M2I2Y2I3NTJhNDIwYjM1OGQ5YTM2MDMxNzJmMjYuLjJhYzc0YWU5OGI1MGNmMjI2
MTdiYzk0Mjk0NWUwMjM4NGQxMmNmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKQEAgLTI5LDYgKzI5LDggQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiBjbGFz
cyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2Rl
QmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFz
ZTsKQEAgLTU5LDExICs2MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGlu
Z0NhbmRpZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsKICAgICB9
CiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiAgICAgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAg
ICAgfQogCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRF
dmFsQ29kZUJsb2NrJik7CisKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrLmgKaW5kZXggYjU0ODJiNjVjOGI4ZWZiM2FhMzA2YTQxM2JkNTQ2MDM0OTFhOTAxMy4u
NmEzMGFhM2QxZTUyZWU5Njk2Y2U3OTYzMjVjNTA1OWJmYmY5MjJjZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgQ2Fj
aGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sg
ZmluYWwgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYg
VW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKQEAgLTQ0LDEwICs0NiwxNCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2Fj
aGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewog
ICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENh
Y2hlZEZ1bmN0aW9uQ29kZUJsb2NrJik7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggNTI2ODk4Yzk1MWQ4
MjE3NTk3OTg4MTEwMmY5ZGM3ZDYxNWIwMTUyMi4uMzc1ZjQ3ODk3ZGNkNWIwNjk1NzYyNTVlYzNj
N2FlMWM3Y2Q0NTdkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTM5LDExICszOSwxMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKIGNsYXNzIEZ1bmN0aW9uTWV0
YWRhdGFOb2RlOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgUGFyc2VyRXJyb3I7
CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiBlbnVtIFVubGlua2VkRnVuY3Rp
b25LaW5kIHsKICAgICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLApAQCAtNTQsNiArNTYsNyBAQCBj
bGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewog
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CiAgICAgZnJpZW5kIGNsYXNzIFZN
OworICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAKICAgICB0eXBlZGVmIEpT
Q2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKQEAgLTE0Nyw2ICsxNTAs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUo
Vk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUq
LCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRN
b2RlLCBWYXJpYWJsZUVudmlyb25tZW50JiwgIEpTQzo6RGVyaXZlZENvbnRleHRUeXBlLCBib29s
IGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZShEZWNvZGVyJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIGNvbnN0IENhY2hlZEZ1
bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAgdW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CiAg
ICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCmluZGV4IDM0Mzg2MmU2NDcw
ZmUxYjFhNDI0ODVkODc2OWUyNzdkNzJjMTUwOGUuLjg2OTk2MTU4N2NkZDUxNzE3ZmY2M2MxNjdk
YmYyNDliZDYwZTM4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCkBAIC0zOCw2ICszOCwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVi
dWdnZXJNb2RlKQogICAgIHsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorICAgIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBD
YWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT4mIGNhY2hl
ZENvZGVCbG9jaykKKyAgICAgICAgOiBCYXNlKGRlY29kZXIsIHN0cnVjdHVyZSwgY2FjaGVkQ29k
ZUJsb2NrKQorICAgIHsKKyAgICB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKaW5kZXggM2UzZThkZmI0
ZDViYmM0NjRmNWU2YTIzNDRjYWFjYTk5NDk0OWVmMS4uZDk5MGNkNzhjM2VkMWE2MzlmNjQxMDQ2
OGRmYTNhZWJiMDY2ZDY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaApAQCAtMzUsNiArMzUsNyBAQCBjbGFzcyBN
ZXRhZGF0YVRhYmxlOwogY2xhc3MgVW5saW5rZWRNZXRhZGF0YVRhYmxlIHsKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNZXRhZGF0YVRh
YmxlOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkTWV0YWRhdGFUYWJsZTsKIAogcHVibGljOgog
ICAgIHN0cnVjdCBMaW5raW5nRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKaW5k
ZXggMGU5YzVmNWJkZGU2Yzc1NjJiNjZhMDNiYzBhOThjODdhZGJkOTMwMi4uZTY0ZGNlNjEyNTQ3
N2RkNWM1NDEyY2VkOTJiZTI1NjA0YjVmMzg0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaApAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2Rl
cjsKK3N0cnVjdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAt
NzQsMTEgKzc3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENh
Y2hlZE1vZHVsZUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5m
bywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIE1vZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCisgICAg
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRNb2R1
bGVDb2RlQmxvY2smKTsKKwogICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVD
b25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwogCiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgK
aW5kZXggYWZlMjZhZWQxYTUwM2FiMjNmZDhmNDQ3ZjlkZWMyZGMwNmNhNTgyNi4uOWQ3ZTQzNWFm
ZDhjYTVmYjBhNzRlOTU1ZDM2MjU5MTFhNjI4YWExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaApAQCAt
MjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IENhY2hlZFByb2dyYW1D
b2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1Ymxp
YyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAtNTAsMTEgKzUyLDE1IEBAIHB1YmxpYzoKICAgICBj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVjbGFyYXRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENh
Y2hlZFByb2dyYW1Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBH
bG9iYWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KIAorICAgIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9j
ayYpOworCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKICAgICBW
YXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggYWQ2NTM2
MThiNDI4ZmNhMDZiZTA0ZGRiNjZjMGYzZDMxZDJiMjY0Yy4uOGU4MjU2MDI4YjEwMzdkYjJiMzA3
YWNkMTdkMDViN2YzNThmNDdkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKaW5kZXggZjk0NWUxNzhlNThjNTNmMWZjMzkyNzAwZTI2NTUwOGI4ZmNkMmYyZS4u
YmU5NTc1MWY3NTk3NTUyZmMyNDU4NGI2ZWI3ODlhY2RiN2NmZjJmYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJDb25maWdG
aWxlLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCkBAIC0xOTg1LDggKzE5ODYsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29kZUJsb2Nr
KEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChFeGVj
U3RhdGUqKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgdm0uY29kZUNhY2hl
KCktPndyaXRlKHZtKTsKKwogICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNTKTsKIAogI2lmIENPTVBJ
TEVSKE1TVkMpCkBAIC0yODQ5LDYgKzI4NTMsOCBAQCBpbnQgcnVuSlNDKGNvbnN0IENvbW1hbmRM
aW5lJiBvcHRpb25zLCBib29sIGlzV29ya2VyLCBjb25zdCBGdW5jJiBmdW5jKQogI2VuZGlmCiAg
ICAgfQogCisgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAgIGlmIChpc1dvcmtl
cikgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgLy8gVGhpcyBp
cyBuZWVkZWQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSB3b3JrZXIncyBtYWluCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCmluZGV4IDMxM2NmYTQ1YWFmOTIyYjA3
YjA0NWJiZWUwMzYzODU5Y2JkNGMwOWIuLjAxMzQ5NTVkZWZkYWYxNzIxNWRiNWE5NjMzZTYwMjIz
NTdiOTY3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
Q29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCkBA
IC0zMyw2ICszMyw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFNvdXJjZUNvZGUg
OiBwdWJsaWMgVW5saW5rZWRTb3VyY2VDb2RlIHsKKyAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWNo
ZWRTb3VyY2VDb2RlOworCiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VDb2RlKCkKICAgICAg
ICAgICAgIDogVW5saW5rZWRTb3VyY2VDb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Tb3VyY2VDb2RlS2V5LmgKaW5kZXggYThlNjAzYzI2YTBiNjAzNjJhMDJkZWFjMDUxNjE2
OWQ1NzU1ODAyMS4uMzg0ODEyMTdiYWYzOTM1ZDUwMWFjMjUxNTU5YjBkNDI2OGI0ZGI4MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKQEAgLTM3LDYg
KzM3LDggQEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJFbmFibGVkIHsgTm8sIFllcyB9OwogZW51
bSBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMgfTsKIAogY2xhc3Mg
U291cmNlQ29kZUZsYWdzIHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFNvdXJjZUNvZGVLZXk7
CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2RlRmxhZ3MoKSA9IGRlZmF1bHQ7CiAKQEAgLTcwLDYg
KzcyLDggQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVLZXkgeworICAgIGZyaWVu
ZCBzdHJ1Y3QgQ2FjaGVkU291cmNlQ29kZUtleTsKKwogcHVibGljOgogICAgIFNvdXJjZUNvZGVL
ZXkoKQogICAgIHsKQEAgLTExNCw2ICsxMTgsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgJiYg
c3RyaW5nKCkgPT0gb3RoZXIuc3RyaW5nKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFNvdXJjZUNvZGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKwogICAgIHN0cnVjdCBIYXNoIHsKICAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU291cmNlQ29kZUtleSYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGEsIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKaW5kZXgg
NmVjNTkwYjUzZTZjOWMzMjdlNDI0NGQwYjExOWIzNmQwOTZmYzgxZS4uNDkwYTg4YWE4MzFkMWNi
N2FmNWZmMWE2YTcxY2UwY2E5MjY3YWYxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCkBAIC0zNSw2ICszNSw5IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIFVubGlua2VkU291cmNlQ29kZSB7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIENhY2hlVHlwZT4KKyAgICAgICAgZnJp
ZW5kIHN0cnVjdCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTsKKwogICAgIHB1YmxpYzoK
ICAgICAgICAgVW5saW5rZWRTb3VyY2VDb2RlKCkKICAgICAgICAgICAgIDogbV9wcm92aWRlcigw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmly
b25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1l
bnQuaAppbmRleCAxMjliNWVhNmJkOWI3MjZhMWQ5YTQwMTFlZjk2OTBmOGNjNmIwZGQzLi4zNmY5
ZGRmODE3NzZjY2IwYTc2ZmVlMDhhMGE1OGMzODA3YTkzNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaApAQCAtMTE2LDYgKzEx
Niw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBz
dHJ1Y3QgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudDsKKwogICAgIE1hcCBtX21hcDsKICAgICBi
b29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjOTY5ZjRjNTFiN2Zi
ZWI5YzhkZTk1NTgzOWU2OWE3MmNhYmJkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCkBAIC0wLDAgKzEsMTc4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiSlNDYXN0
LmgiCisjaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJTY29wZWRB
cmd1bWVudHNUYWJsZS5oIgorI2luY2x1ZGUgIlNvdXJjZUNvZGVLZXkuaCIKKyNpbmNsdWRlICJV
bmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgorI2luY2x1
ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPgorc3RydWN0IFNvdXJjZVR5cGVJbXBsIHsK
KyAgICB1c2luZyB0eXBlID0gVDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
U291cmNlVHlwZUltcGw8VCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19mdW5kYW1lbnRhbDxU
Pjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjpTb3VyY2VUeXBlXywgdm9pZD46
OnZhbHVlPj4geworICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBUOjpTb3VyY2VUeXBlXzsKKwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VzaW5nIFNvdXJjZVR5cGUgPSB0eXBlbmFtZSBT
b3VyY2VUeXBlSW1wbDxUPjo6dHlwZTsKKworY2xhc3MgRW5jb2RlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRW5jb2Rlcik7CisKK3B1YmxpYzoKKyAgICBFbmNvZGVyKFZNJiB2bSkKKyAg
ICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgICAgICBt
X2J1ZmZlciA9ICh1aW50OF90KilmYXN0WmVyb2VkTWFsbG9jKHNfbWF4U2l6ZSk7CisgICAgfQor
CisgICAgfkVuY29kZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAg
ICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgIH0KKworICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1f
dm07IH0KKyAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
cjsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworICAg
IHB0cmRpZmZfdCBtYWxsb2NPZmZzZXQodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIG1f
b2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNpemVvZih2b2lkKiksIG1fb2Zmc2V0
KTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obV9vZmZzZXQgKyBzaXplKSA8
IHNfbWF4U2l6ZSk7CisgICAgICAgIHB0cmRpZmZfdCByZXN1bHQgPSBtX29mZnNldDsKKyAgICAg
ICAgbV9vZmZzZXQgKz0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICB1aW50OF90KiBtYWxsb2ModW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIHB0cmRpZmZf
dCBvZmZzZXQgPSBtYWxsb2NPZmZzZXQoc2l6ZSk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlciAr
IG9mZnNldDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIG1hbGxv
YygpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obWFsbG9jKHNp
emVvZihUKSkpOworICAgIH0KKworICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogYWRkciA9IHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihhZGRyZXNzKTsKKyAgICAgICAgQVNTRVJUKGFkZHIgPj0gbV9idWZm
ZXIgJiYgYWRkciA8IG1fYnVmZmVyICsgbV9vZmZzZXQpOworICAgICAgICByZXR1cm4gYWRkciAt
IG1fYnVmZmVyOworICAgIH0KKworICAgIHZvaWQgY2FjaGVQdHIoY29uc3Qgdm9pZCogcHRyLCBw
dHJkaWZmX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9wdHJUb09mZnNldE1hcC5hZGQocHRy
LCBvZmZzZXQpOworICAgIH0KKworICAgIFdURjo6T3B0aW9uYWw8cHRyZGlmZl90PiBvZmZzZXRG
b3JQdHIoY29uc3Qgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IG1fcHRyVG9P
ZmZzZXRNYXAuZmluZChwdHIpOworICAgICAgICBpZiAoaXQgPT0gbV9wdHJUb09mZnNldE1hcC5l
bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7
IGl0LT52YWx1ZSB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBzX21heFNpemUg
PSAxMCAqIE1COworCisgICAgVk0mIG1fdm07CisgICAgdWludDhfdCogbV9idWZmZXI7CisgICAg
cHRyZGlmZl90IG1fb2Zmc2V0OworICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIHB0cmRpZmZfdD4g
bV9wdHJUb09mZnNldE1hcDsKK307CisKK2NsYXNzIERlY29kZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKERlY29kZXIpOworCitwdWJsaWM6CisgICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0
IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3ZtKHZtKQorICAg
ICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYmFz
ZUFkZHJlc3MpKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyNlbmRp
ZgorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIH0KKworICAgIH5EZWNv
ZGVyKCkKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fZmluYWxpemVycykKKyAg
ICAgICAgICAgIHBhaXIudmFsdWUoKTsKKyAgICB9CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBt
X3ZtOyB9CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29uc3Qgdm9pZCogcHRyKQorICAgIHsK
KyAgICAgICAgY29uc3QgdWludDhfdCogYWRkciA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihwdHIpOworICAgICAgICBBU1NFUlQoYWRkciA+PSBtX2Jhc2VBZGRyZXNzICYmIGFkZHIgPCBt
X2Jhc2VBZGRyZXNzICsgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIGFkZHIgLSBtX2Jhc2VBZGRy
ZXNzOworICAgIH0KKworICAgIHZvaWQgY2FjaGVPZmZzZXQocHRyZGlmZl90IG9mZnNldCwgdm9p
ZCogcHRyKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRUb1B0ck1hcC5hZGQob2Zmc2V0LCBwdHIp
OworICAgIH0KKworICAgIFdURjo6T3B0aW9uYWw8dm9pZCo+IHB0ckZvck9mZnNldChwdHJkaWZm
X3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IG1fb2Zmc2V0VG9QdHJNYXAuZmlu
ZChvZmZzZXQpOworICAgICAgICBpZiAoaXQgPT0gbV9vZmZzZXRUb1B0ck1hcC5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IGl0LT52YWx1
ZSB9OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBh
ZGRGaW5hbGl6ZXIocHRyZGlmZl90IG9mZnNldCwgY29uc3QgRnVuY3RvciYgZm4pCisgICAgewor
ICAgICAgICBtX2ZpbmFsaXplcnMuYWRkKG9mZnNldCwgZm4pOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWTSYgbV92bTsKKyAgICBjb25zdCB1aW50OF90KiBtX2Jhc2VBZGRyZXNzOworI2lmbmRl
ZiBOREVCVUcKKyAgICBzaXplX3QgbV9zaXplOworI2VuZGlmCisgICAgSGFzaE1hcDxwdHJkaWZm
X3QsIHZvaWQqPiBtX29mZnNldFRvUHRyTWFwOworICAgIEhhc2hNYXA8cHRyZGlmZl90LCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4+IG1fZmluYWxpemVyczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxU
Pj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYsIFQmIGRzdCwgY29uc3QgU291cmNlVHlwZTxUPiYg
c3JjKQoreworICAgIGRzdCA9IHNyYzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRp
YyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVl
PiBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCYgZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+JiBz
cmMpCit7CisgICAgZHN0LmVuY29kZShlbmNvZGVyLCBzcmMpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVjb2RlKERlY29kZXImLCBjb25zdCBU
JiBzcmMsIFNvdXJjZVR5cGU8VD4mIGRzdCwgQXJncy4uLikKK3sKKyAgICBkc3QgPSBzcmM7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CitzdGF0aWMgc3RkOjpl
bmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIGNvbnN0IFQmIHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdz
Li4uIGFyZ3MpCit7CisgICAgc3JjLmRlY29kZShkZWNvZGVyLCBkc3QsIGFyZ3MuLi4pOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwgVD4gZGVjb2RlKERlY29kZXImLCBUIHNyYykK
K3sKKyAgICByZXR1cm4gc3JjOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0
ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWUsIFNv
dXJjZVR5cGU8VD4+JiYgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIGNvbnN0IFQmIHNyYykKK3sK
KyAgICByZXR1cm4gc3JjLmRlY29kZShkZWNvZGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
U291cmNlLCB0eXBlbmFtZSBEc3Q+CitzdHJ1Y3QgQ2FjaGVkT2JqZWN0IHsKKyAgICB1c2luZyBT
b3VyY2VUeXBlXyA9IFNvdXJjZTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBzaXplT2YoY29uc3Qg
U291cmNlJiBzb3VyY2UpCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICAg
ICAgY29tcHV0ZU91dE9mTGluZVNpemUoc2l6ZSwgc291cmNlKTsKKyAgICAgICAgcmV0dXJuIHNp
emU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgVCYgY2Fz
dChUKiBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gKnNvdXJjZTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6
aXNfcG9pbnRlcjxUPjo6dmFsdWU+PgorICAgIHN0YXRpYyBUJiBjYXN0KFQmIHNvdXJjZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBzdGF0aWMgY29uc3QgVCYgY2FzdChjb25zdCBUKiBjb25zdCBzb3VyY2UpCisg
ICAgeworICAgICAgICByZXR1cm4gKnNvdXJjZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfcG9pbnRlcjxUPjo6
dmFsdWU+PgorICAgIHN0YXRpYyBjb25zdCBUJiBjYXN0KGNvbnN0IFQmIHNvdXJjZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
U291cmNlLCB0eXBlbmFtZSBEc3Q+CitzdHJ1Y3QgVmFyaWFibGVMZW5ndGhPYmplY3QgOiBwdWJs
aWMgQ2FjaGVkT2JqZWN0PFNvdXJjZSwgRHN0PiB7Citwcml2YXRlOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9IFBUUkRJRkZfTUFYOworcHVibGljOgor
ICAgIHB0cmRpZmZfdCBvZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKKworICAgIGNvbnN0IHVp
bnQ4X3QqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0ICE9IHNf
aW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPih0aGlzKSArIG9mZnNldDsKKyAgICB9CisKKyAgICB1aW50OF90KiBidWZmZXIoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCAhPSBzX2ludmFsaWRPZmZzZXQpOworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGhpcykgKyBvZmZzZXQ7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBidWZmZXIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZl
cigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGJ1ZmZlcigp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oYnVmZmVyKCkpOwor
ICAgIH0KKworICAgIHVpbnQ4X3QqIGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIsIHNpemVfdCBz
aXplKQorICAgIHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldE9mZnNldCA9IGVuY29kZXIub2Zm
c2V0T2YoJm9mZnNldCk7CisgICAgICAgIHB0cmRpZmZfdCBhbGxvY2F0aW9uT2Zmc2V0ID0gZW5j
b2Rlci5tYWxsb2NPZmZzZXQoc2l6ZSk7CisgICAgICAgIG9mZnNldCA9IGFsbG9jYXRpb25PZmZz
ZXQgLSBvZmZzZXRPZmZzZXQ7CisgICAgICAgIHJldHVybiBidWZmZXIoKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIs
IHVuc2lnbmVkIHNpemUgPSAxKQorICAgIHsKKyAgICAgICAgYWxsb2NhdGUoZW5jb2Rlciwgc2l6
ZW9mKFQpICogc2l6ZSk7CisgICAgICAgIHJldHVybiBidWZmZXI8VD4oKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTVCA9IFNvdXJjZVR5cGU8VD4+CitzdHJ1
Y3QgQ2FjaGVkUHRyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNUKiwgQ2FjaGVkUHRy
PFQ+PiB7CisgICAgYm9vbCBpc0VtcHR5OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU1QqIHNyYykKKyAgICB7CisgICAgICAgIGlzRW1wdHkgPSAhc3JjOworICAg
ICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoV1RG
OjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNldCA9IGVuY29kZXIub2Zmc2V0Rm9yUHRyKHNyYykp
IHsKKyAgICAgICAgICAgIHRoaXMtPm9mZnNldCA9ICpvZmZzZXQgLSBlbmNvZGVyLm9mZnNldE9m
KCZ0aGlzLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgVCogY2FjaGVkT2JqZWN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlcik7
CisgICAgICAgIGNhY2hlZE9iamVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOworICAgICAgICBl
bmNvZGVyLmNhY2hlUHRyKHNyYywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFNUKiBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlz
RW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwdHJkaWZmX3Qg
YnVmZmVyT2Zmc2V0ID0gZGVjb2Rlci5vZmZzZXRPZih0aGlzLT5idWZmZXIoKSk7CisgICAgICAg
IGlmIChXVEY6Ok9wdGlvbmFsPHZvaWQqPiBwdHIgPSBkZWNvZGVyLnB0ckZvck9mZnNldChidWZm
ZXJPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U1QqPigqcHRy
KTsKKworICAgICAgICBTVCogcHRyID0gb3BlcmF0b3ItPigpLT5kZWNvZGUoZGVjb2RlciwgYXJn
cy4uLik7CisgICAgICAgIGRlY29kZXIuY2FjaGVPZmZzZXQoYnVmZmVyT2Zmc2V0LCBwdHIpOwor
ICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIFQqIG9wZXJhdG9yLT4oKQorICAgIHsK
KyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgIH0KKworICAgIGNvbnN0
IFQqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1
ZmZlcjxUPigpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNU
ID0gU291cmNlVHlwZTxUPj4KK3N0cnVjdCBDYWNoZWRSZWZQdHIgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFJlZlB0cjxTVD4sIENhY2hlZFJlZlB0cjxUPj4geworICAgIENhY2hlZFB0cjxULCBTVD4g
cHRyOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU1QqIHNyYykK
KyAgICB7CisgICAgICAgIHB0ci5lbmNvZGUoZW5jb2Rlciwgc3JjKTsKKyAgICB9CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8U1Q+IHNyYykKKyAgICB7
CisgICAgICAgIGVuY29kZShlbmNvZGVyLCBzcmMuZ2V0KCkpOworICAgIH0KKworICAgIFJlZlB0
cjxTVD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTVCog
ZGVjb2RlZFB0ciA9IHB0ci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGRlY29kZXIuYWRkRmlu
YWxpemVyKGRlY29kZXIub2Zmc2V0T2YocHRyLmJ1ZmZlcigpKSwgWz1dIHsgZGVyZWZJZk5vdE51
bGwoZGVjb2RlZFB0cik7IH0pOworICAgICAgICByZWZJZk5vdE51bGwoZGVjb2RlZFB0cik7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihkZWNvZGVkUHRyKTsKKyAgICB9CisKKyAgICB2b2lkIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWZQdHI8U1Q+JiBzcmMpIGNvbnN0CisgICAgeworICAg
ICAgICBzcmMgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgU1QgPSBTb3VyY2VUeXBlPFQ+Pgorc3RydWN0IENhY2hlZFdyaXRlQmFy
cmllciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNUPiwgQ2FjaGVkV3JpdGVC
YXJyaWVyPFQ+PiB7CisgICAgQ2FjaGVkUHRyPFQsIFNUPiBwdHI7CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8U1Q+IHNyYykKKyAgICB7Cisg
ICAgICAgIHB0ci5lbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8U1Q+JiBzcmMsIGNvbnN0IEpT
Q2VsbCogb3duZXIpIGNvbnN0CisgICAgeworICAgICAgICBTVCogZGVjb2RlZFB0ciA9IHB0ci5k
ZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChkZWNvZGVkUHRyKQorICAgICAgICAgICAgc3Jj
LnNldChkZWNvZGVyLnZtKCksIG93bmVyLCBkZWNvZGVkUHRyKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgSUMgPSAwLCB0eXBlbmFtZSBPSCA9IENyYXNoT25PdmVy
Zmxvdz4KK3N0cnVjdCBDYWNoZWRWZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8
VmVjdG9yPFNvdXJjZVR5cGU8VD4sIElDLCBPSD4sIENhY2hlZFZlY3RvcjxULCBJQywgT0g+PiB7
CisgICAgdW5zaWduZWQgc2l6ZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJQywgT0g+JiB2ZWN0b3IpCisgICAgeworICAg
ICAgICBzaXplID0gdmVjdG9yLnNpemUoKTsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVt
cGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIs
IGJ1ZmZlcltpXSwgdmVjdG9yW2ldKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmdzPgorICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxTb3VyY2VU
eXBlPFQ+LCBJQywgT0g+JiB2ZWN0b3IsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAg
ICAgIHZlY3Rvci5yZXNpemVUb0ZpdChzaXplKTsKKyAgICAgICAgY29uc3QgVCogYnVmZmVyID0g
dGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZl
cltpXSwgdmVjdG9yW2ldLCBhcmdzLi4uKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGc3QsIHR5cGVuYW1lIFNuZD4KK3N0cnVjdCBDYWNoZWRQYWlyIDogcHVibGljIENhY2hlZE9i
amVjdDxzdGQ6OnBhaXI8U291cmNlVHlwZTxGc3Q+LCBTb3VyY2VUeXBlPFNuZD4+LCBDYWNoZWRQ
YWlyPEZzdCwgU25kPj4geworICAgIEZzdCBmc3Q7CisgICAgU25kIHNuZDsKKworICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZzdD4s
IFNvdXJjZVR5cGU8U25kPj4mIHBhaXIpCisgICAgeworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVu
Y29kZXIsIGZzdCwgc3RkOjpnZXQ8MD4ocGFpcikpOworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVu
Y29kZXIsIHNuZCwgc3RkOjpnZXQ8MT4ocGFpcikpOworICAgIH0KKworICAgIHZvaWQgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZzdD4sIFNvdXJjZVR5cGU8
U25kPj4mIHBhaXIpIGNvbnN0CisgICAgeworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIs
IGZzdCwgc3RkOjpnZXQ8MD4ocGFpcikpOworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIs
IHNuZCwgc3RkOjpnZXQ8MT4ocGFpcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0
SGFzaDxTb3VyY2VUeXBlPEtleT4+OjpIYXNoLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNo
VHJhaXRzPFNvdXJjZVR5cGU8S2V5Pj4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hU
cmFpdHM8U291cmNlVHlwZTxWYWx1ZT4+Pgorc3RydWN0IENhY2hlZEhhc2hNYXAgOiBwdWJsaWMg
VmFyaWFibGVMZW5ndGhPYmplY3Q8SGFzaE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8
VmFsdWU+LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4sIENhY2hlZEhh
c2hNYXA8S2V5LCBWYWx1ZSwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+
PiB7CisKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkUGFpcjxLZXksIFZhbHVlPj4gZW50cmllczsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+CisgICAgdXNpbmcgTWFwID0g
SGFzaE1hcDxLLCBWLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz47CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBNYXA8U291cmNlVHlwZTxL
ZXk+LCBTb3VyY2VUeXBlPFZhbHVlPj4mIG1hcCkKKyAgICB7CisgICAgICAgIGVudHJpZXMuc2l6
ZSA9IG1hcC5zaXplKCk7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50cmllcyk+IGVu
dHJpZXNWZWN0b3IobWFwLnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogbWFwKQorICAgICAgICAgICAgZW50cmllc1ZlY3Rvcltp
KytdID0geyBpdC5rZXksIGl0LnZhbHVlIH07CisgICAgICAgIGVudHJpZXMuZW5jb2RlKGVuY29k
ZXIsIGVudHJpZXNWZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKSBjb25z
dAorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShlbnRyaWVzKT4gZGVjb2RlZEVu
dHJpZXM7CisgICAgICAgIGVudHJpZXMuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRFbnRyaWVzKTsK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogZGVjb2RlZEVudHJpZXMpCisgICAgICAg
ICAgICBtYXAuc2V0KHN0ZDo6Z2V0PDA+KHBhaXIpLCBzdGQ6OmdldDwxPihwYWlyKSk7CisgICAg
fQorfTsKKworc3RydWN0IENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsIDogcHVibGljIFZhcmlhYmxl
TGVuZ3RoT2JqZWN0PFVuaXF1ZWRTdHJpbmdJbXBsLCBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4g
eworICAgIGJvb2wgaXM4Qml0IDogMTsKKyAgICBib29sIGlzU3ltYm9sIDogMTsKKyAgICBib29s
IGlzQXRvbWljIDogMTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCisgICAgeworICAgICAg
ICBpc0F0b21pYyA9IHN0cmluZy5pc0F0b21pYygpOworICAgICAgICBpc1N5bWJvbCA9IHN0cmlu
Zy5pc1N5bWJvbCgpOworICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29uc3RfY2FzdDxTdHJp
bmdJbXBsKj4oJnN0cmluZyk7CisgICAgICAgIGlmIChpc1N5bWJvbCkgeworICAgICAgICAgICAg
U3ltYm9sSW1wbCogc3ltYm9sID0gc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCo+KGltcGwpOworICAg
ICAgICAgICAgaWYgKCFzeW1ib2wtPmlzTnVsbFN5bWJvbCgpKSB7CisgICAgICAgICAgICAgICAg
SWRlbnRpZmllciB1aWQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZlbmNvZGVyLnZtKCksIHN5bWJv
bCk7CisgICAgICAgICAgICAgICAgaW1wbCA9IGVuY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5s
b29rVXBQdWJsaWNOYW1lKHVpZCkuc3RyaW5nKCkuaW1wbCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaXM4Qml0ID0gaW1wbC0+aXM4Qml0KCk7CisgICAgICAgIGxlbmd0
aCA9IGltcGwtPmxlbmd0aCgpOworCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBsZW5ndGg7CisgICAgICAgIGNvbnN0
IHZvaWQqIHBheWxvYWQ7CisgICAgICAgIGlmIChpczhCaXQpCisgICAgICAgICAgICBwYXlsb2Fk
ID0gaW1wbC0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXls
b2FkID0gaW1wbC0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBzaXplICo9IDI7CisgICAg
ICAgIH0KKworICAgICAgICB1aW50OF90KiBidWZmZXIgPSB0aGlzLT5hbGxvY2F0ZShlbmNvZGVy
LCBzaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgcGF5bG9hZCwgc2l6ZSk7CisgICAgfQor
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgYXV0byBjcmVhdGUgPSBbJl0oY29uc3QgYXV0byogYnVmZmVyKSAtPiBV
bmlxdWVkU3RyaW5nSW1wbCogeworICAgICAgICAgICAgaWYgKCFpc1N5bWJvbCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nSW1wbDo6YWRkKGJ1ZmZlciwgbGVuZ3RoKS5sZWFr
UmVmKCk7CisKKyAgICAgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVy
biAmU3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5bWJvbCgpLmxlYWtSZWYoKTsKKworICAgICAgICAg
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmRlY29kZXIudm0o
KSwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgU3RyaW5nIHN0ciA9IGRlY29kZXIudm0o
KS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShpZGVudCktPnN0cmluZygpOworICAg
ICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0ci5yZWxlYXNlSW1wbCgpLmdldCgpOworICAg
ICAgICAgICAgQVNTRVJUKGltcGwtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oaW1wbCk7CisgICAgICAgIH07CisKKyAgICAg
ICAgaWYgKGlzOEJpdCkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVmZmVyPExD
aGFyPigpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh0aGlzLT5idWZmZXI8VUNoYXI+KCkpOwor
ICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTdHJpbmdJbXBsIDogcHVibGljIFZhcmlhYmxlTGVu
Z3RoT2JqZWN0PFN0cmluZ0ltcGwsIENhY2hlZFN0cmluZ0ltcGw+IHsKKyAgICBDYWNoZWRVbmlx
dWVkU3RyaW5nSW1wbCB1bmlxdWVkU3RyaW5nSW1wbDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ0ltcGwmIGltcGwpCisgICAgeworICAgICAgICB1bmlx
dWVkU3RyaW5nSW1wbC5lbmNvZGUoZW5jb2RlciwgaW1wbCk7CisgICAgfQorCisgICAgU3RyaW5n
SW1wbCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdW5pcXVlZFN0cmluZ0ltcGwuZGVjb2RlKGRlY29kZXIpOworICAgIH0KK307CisKK3N0cnVj
dCBDYWNoZWRTdHJpbmcgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U3RyaW5nLCBDYWNo
ZWRTdHJpbmc+IHsKKyAgICBDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+IGlt
cGw7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcmIHN0
cmluZykKKyAgICB7CisgICAgICAgIGltcGwuZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PFVu
aXF1ZWRTdHJpbmdJbXBsKj4oc3RyaW5nLmltcGwoKSkpOworICAgIH0KKworICAgIFN0cmluZyBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJp
bmcoKFJlZlB0cjxTdHJpbmdJbXBsPilpbXBsLmRlY29kZShkZWNvZGVyKSk7CisgICAgfQorCisg
ICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiBkc3QpIGNvbnN0CisgICAg
eworICAgICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKworc3RydWN0IENh
Y2hlZElkZW50aWZpZXIgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmllciwg
Q2FjaGVkSWRlbnRpZmllcj4geworICAgIENhY2hlZFN0cmluZyBzdHJpbmc7CisKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQor
ICAgIHsKKyAgICAgICAgc3RyaW5nLmVuY29kZShlbmNvZGVyLCBpZGVudGlmaWVyLnN0cmluZygp
KTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IHN0cmluZy5kZWNvZGUoZGVjb2Rlcik7Cisg
ICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcigp
OworCisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVyLnZtKCksIChV
bmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CisgICAgeworICAgICAg
ICBpZGVudCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorc3RydWN0IENhY2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0
PFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4sIENhY2hlZE9wdGlvbmFsPFQ+PiB7CisgICAg
Ym9vbCBpc0VtcHR5OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
V1RGOjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiYgc291cmNlKQorICAgIHsKKyAgICAgICAgaXNF
bXB0eSA9ICFzb3VyY2U7CisKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2RlciktPmVuY29k
ZShlbmNvZGVyLCAqc291cmNlKTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5
cGU8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJl
dHVybiB7IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpLT5kZWNvZGUoZGVjb2RlcikgfTsKKyAg
ICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXVEY6Ok9wdGlvbmFsPFNv
dXJjZVR5cGU8VD4+JiBkc3QpIGNvbnN0CisgICAgeworICAgICAgICBkc3QgPSBkZWNvZGUoZGVj
b2Rlcik7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
c3RkOjp1bmlxdWVfcHRyPFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCisgICAgeworICAgICAgICBp
ZiAoIXNvdXJjZSkKKyAgICAgICAgICAgIGVuY29kZShlbmNvZGVyLCBXVEY6Om51bGxvcHQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmNvZGUoZW5jb2RlciwgeyAqc291cmNlIH0pOwor
ICAgIH0KKworICAgIFNvdXJjZVR5cGU8VD4qIGRlY29kZUFzUHRyKERlY29kZXImIGRlY29kZXIp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIHJldHVybiB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKS0+ZGVj
b2RlKGRlY29kZXIpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTaW1wbGVKdW1wVGFibGUg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU2ltcGxlSnVtcFRhYmxlLCBDYWNoZWRTaW1w
bGVKdW1wVGFibGU+IHsKKyAgICBpbnQzMl90IG1pbjsKKyAgICBDYWNoZWRWZWN0b3I8aW50MzJf
dD4gYnJhbmNoT2Zmc2V0czsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUpCisgICAgeworICAgICAgICBt
aW4gPSBqdW1wVGFibGUubWluOworICAgICAgICBicmFuY2hPZmZzZXRzLmVuY29kZShlbmNvZGVy
LCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QK
KyAgICB7CisgICAgICAgIGp1bXBUYWJsZS5taW4gPSBtaW47CisgICAgICAgIGJyYW5jaE9mZnNl
dHMuZGVjb2RlKGRlY29kZXIsIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzKTsKKyAgICB9Cit9Owor
CitzdHJ1Y3QgQ2FjaGVkU3RyaW5nSnVtcFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSwgQ2FjaGVkU3RyaW5nSnVtcFRhYmxlPiB7CisgICAgQ2FjaGVk
SGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkU3RyaW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlOjogT2Zmc2V0TG9jYXRpb24+IG9mZnNldFRhYmxlOworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJs
ZSkKKyAgICB7CisgICAgICAgIG9mZnNldFRhYmxlLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUu
b2Zmc2V0VGFibGUpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUpIGNvbnN0CisgICAgeworICAgICAg
ICBvZmZzZXRUYWJsZS5kZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkUmFyZURhdGEgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVu
bGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSwgQ2FjaGVkUmFyZURhdGE+IHsKKyAgICBDYWNoZWRW
ZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAgICAvLyBK
dW1wIFRhYmxlcworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRTaW1wbGVKdW1wVGFibGU+IHN3aXRj
aEp1bXBUYWJsZXM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgIENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJ
bmZvOjpGYXRQb3NpdGlvbj4gZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisKKyAgICBDYWNo
ZWRIYXNoTWFwPHVuc2lnbmVkLCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9m
aWxlckV4cHJlc3Npb25SYW5nZT4gdHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICBDYWNoZWRWZWN0
b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29k
ZU9mZnNldHM7CisKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVu
bGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSYgcmFyZURhdGEpCisgICAgeworICAgICAgICBleGNl
cHRpb25IYW5kbGVycy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leGNlcHRpb25IYW5kbGVy
cyk7CisgICAgICAgIHN3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1f
c3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZW5jb2Rl
KGVuY29kZXIsIHJhcmVEYXRhLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIGV4
cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX2V4cHJl
c3Npb25JbmZvRmF0UG9zaXRpb25zKTsKKyAgICAgICAgdHlwZVByb2ZpbGVySW5mb01hcC5lbmNv
ZGUoZW5jb2RlciwgcmFyZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICAgICAgb3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRh
Lm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOworICAgIH0KKworICAgIFVu
bGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0
CisgICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEqIHJhcmVEYXRhID0g
bmV3IFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSB7IH07CisgICAgICAgIGV4Y2VwdGlvbkhh
bmRsZXJzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycyk7Cisg
ICAgICAgIHN3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMpOworICAgICAgICBzdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNv
ZGVyLCByYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgZXhwcmVz
c2lvbkluZm9GYXRQb3NpdGlvbnMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX2V4cHJlc3Np
b25JbmZvRmF0UG9zaXRpb25zKTsKKyAgICAgICAgdHlwZVByb2ZpbGVySW5mb01hcC5kZWNvZGUo
ZGVjb2RlciwgcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAgIG9wUHJv
ZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7CisgICAgICAgIHJldHVybiBy
YXJlRGF0YTsKKyAgICB9CisKK307CisKK3N0cnVjdCBDYWNoZWRCaXRWZWN0b3IgOiBwdWJsaWMg
VmFyaWFibGVMZW5ndGhPYmplY3Q8Qml0VmVjdG9yLCBDYWNoZWRCaXRWZWN0b3I+IHsKKyAgICB1
bnNpZ25lZCBzaXplOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
Qml0VmVjdG9yJiBiaXRWZWN0b3IpCisgICAgeworICAgICAgICBzaXplID0gYml0VmVjdG9yLnNp
emUoKTsKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwg
c2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGJpdFZlY3Rvci5iaXRzKCksIHNpemUpOwor
ICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBCaXRWZWN0b3ImIGJpdFZlY3Rvcikg
Y29uc3QKKyAgICB7CisgICAgICAgIGJpdFZlY3Rvci5lbnN1cmVTaXplKHNpemUpOworICAgICAg
ICBtZW1jcHkoYml0VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVmZmVyKCksIHNpemUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBE
ZWZhdWx0SGFzaDxUPjo6SGFzaD4KK3N0cnVjdCBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hl
ZE9iamVjdDxIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+LCBDYWNoZWRIYXNoU2V0PFQs
IEhhc2hBcmc+PiB7CisgICAgQ2FjaGVkVmVjdG9yPFQ+IGVudHJpZXM7CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hB
cmc+JiBzZXQpCisgICAgeworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKGVudHJpZXMpPiBl
bnRyaWVzVmVjdG9yKHNldC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogc2V0KQorICAgICAgICAgICAgZW50cmllc1ZlY3Rv
cltpKytdID0gaXRlbTsKKyAgICAgICAgZW50cmllcy5lbmNvZGUoZW5jb2RlciwgZW50cmllc1Zl
Y3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNl
dDxTb3VyY2VUeXBlPFQ+LCBIYXNoQXJnPiYgc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgU291
cmNlVHlwZTxkZWNsdHlwZShlbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKKyAgICAgICAgZW50cmll
cy5kZWNvZGUoZGVjb2RlciwgZW50cmllc1ZlY3Rvcik7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgaXRlbSA6IGVudHJpZXNWZWN0b3IpCisgICAgICAgICAgICBzZXQuYWRkKGl0ZW0pOworICAg
IH0KK307CisKK3N0cnVjdCBDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1Ymxp
YyBWYXJpYWJsZUxlbmd0aE9iamVjdDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSwgQ2FjaGVk
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IHsKKyAgICB1bnNpZ25lZCBjb25zdGFudDsKKyAg
ICBDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElk
ZW50aWZpZXJSZXBIYXNoPiBzZXQ7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpCisgICAgeworICAgICAg
ICBjb25zdGFudCA9IHN0ZDo6Z2V0PDE+KGVudHJ5KTsKKyAgICAgICAgc2V0LmVuY29kZShlbmNv
ZGVyLCBzdGQ6OmdldDwwPihlbnRyeSkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBlbnRyeSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN0ZDo6Z2V0PDE+KGVudHJ5KSA9IGNvbnN0YW50OworICAgICAgICBzZXQu
ZGVjb2RlKGRlY29kZXIsIHN0ZDo6Z2V0PDA+KGVudHJ5KSk7CisgICAgfQorfTsKKworc3RydWN0
IENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFZhcmlhYmxl
RW52aXJvbm1lbnQsIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ+IHsKKworICAgIGJvb2wgaXNF
dmVyeXRoaW5nQ2FwdHVyZWQ7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVk
VW5pcXVlZFN0cmluZ0ltcGw+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnksIElkZW50aWZpZXJS
ZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+LCBWYXJpYWJsZUVu
dmlyb25tZW50RW50cnlIYXNoVHJhaXRzPiBtYXA7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCisgICAgeworICAgICAg
ICBpc0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkOworICAg
ICAgICBtYXAuZW5jb2RlKGVuY29kZXIsIGVudi5tX21hcCk7CisgICAgfQorCisgICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52KSBjb25zdAor
ICAgIHsKKyAgICAgICAgZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgPSBpc0V2ZXJ5dGhpbmdD
YXB0dXJlZDsKKyAgICAgICAgbWFwLmRlY29kZShkZWNvZGVyLCBlbnYubV9tYXApOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNUID0gU291cmNlVHlwZTxUPj4K
K3N0cnVjdCBDYWNoZWRBcnJheSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTVCosIENh
Y2hlZEFycmF5PFQsIFNUPj4geworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNUKiBhcnJheSwgdW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIFQqIGRzdCA9IHRo
aXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIsIHNpemUpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShl
bmNvZGVyLCBkc3RbaV0sIGFycmF5W2ldKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmdzPgorICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNUKiBhcnJheSwg
dW5zaWduZWQgc2l6ZSwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3Qg
VCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRl
Y29kZXIsIGJ1ZmZlcltpXSwgYXJyYXlbaV0sIGFyZ3MuLi4pOworICAgIH0KK307CisKK3N0cnVj
dCBDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U2NvcGVk
QXJndW1lbnRzVGFibGUsIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiB7CisgICAgdWludDMy
X3QgbGVuZ3RoOworICAgIENhY2hlZEFycmF5PFNjb3BlT2Zmc2V0PiBhcmd1bWVudHM7CisKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTY29wZWRBcmd1bWVudHNUYWJs
ZSYgc2NvcGVkQXJndW1lbnRzVGFibGUpCisgICAgeworICAgICAgICBsZW5ndGggPSBzY29wZWRB
cmd1bWVudHNUYWJsZS5tX2xlbmd0aDsKKyAgICAgICAgYXJndW1lbnRzLmVuY29kZShlbmNvZGVy
LCBzY29wZWRBcmd1bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSwgbGVuZ3RoKTsKKyAgICB9
CisKKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNv
bnN0CisgICAgeworICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1lbnRz
VGFibGUgPSBTY29wZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSwgbGVuZ3Ro
KTsKKyAgICAgICAgYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJs
ZS0+bV9hcmd1bWVudHMuZ2V0KCksIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBzY29wZWRBcmd1
bWVudHNUYWJsZTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSA6
IHB1YmxpYyBDYWNoZWRPYmplY3Q8U3ltYm9sVGFibGVFbnRyeSwgQ2FjaGVkU3ltYm9sVGFibGVF
bnRyeT4geworICAgIGludHB0cl90IGJpdHM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwg
Y29uc3QgU3ltYm9sVGFibGVFbnRyeSYgc3ltYm9sVGFibGVFbnRyeSkKKyAgICB7CisgICAgICAg
IGJpdHMgPSBzeW1ib2xUYWJsZUVudHJ5Lm1fYml0cyB8IFN5bWJvbFRhYmxlRW50cnk6OlNsaW1G
bGFnOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBTeW1ib2xUYWJsZUVudHJ5
JiBzeW1ib2xUYWJsZUVudHJ5KSBjb25zdAorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGVFbnRy
eS5tX2JpdHMgPSBiaXRzOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTeW1ib2xUYWJsZSA6
IHB1YmxpYyBDYWNoZWRPYmplY3Q8U3ltYm9sVGFibGUsIENhY2hlZFN5bWJvbFRhYmxlPiB7Cisg
ICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+LCBD
YWNoZWRTeW1ib2xUYWJsZUVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQ
dHI8VW5pcXVlZFN0cmluZ0ltcGw+PiwgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHM+IG1hcDsK
KyAgICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldDsKKyAgICB1bnNpZ25lZCB1c2VzTm9uU3Ry
aWN0RXZhbCA6IDE7CisgICAgdW5zaWduZWQgbmVzdGVkTGV4aWNhbFNjb3BlIDogMTsKKyAgICB1
bnNpZ25lZCBzY29wZVR5cGUgOiAzOworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGNhY2hl
ZCB0aGlzIGV2ZW50dWFsbHk/CisgICAgLy8gQ2FjaGVkUHRyPFN5bWJvbFRhYmxlUmFyZURhdGE+
IHJhcmVEYXRhOworICAgIENhY2hlZFB0cjxDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZT4gYXJn
dW1lbnRzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFzeW1ib2xUYWJsZS5t
X3JhcmVEYXRhKTsKKyAgICAgICAgbWFwLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX21h
cCk7CisgICAgICAgIG1heFNjb3BlT2Zmc2V0ID0gc3ltYm9sVGFibGUubV9tYXhTY29wZU9mZnNl
dDsKKyAgICAgICAgdXNlc05vblN0cmljdEV2YWwgPSBzeW1ib2xUYWJsZS5tX3VzZXNOb25TdHJp
Y3RFdmFsOworICAgICAgICBuZXN0ZWRMZXhpY2FsU2NvcGUgPSBzeW1ib2xUYWJsZS5tX25lc3Rl
ZExleGljYWxTY29wZTsKKyAgICAgICAgc2NvcGVUeXBlID0gc3ltYm9sVGFibGUubV9zY29wZVR5
cGU7CisgICAgICAgIGFyZ3VtZW50cy5lbmNvZGUoZW5jb2Rlciwgc3ltYm9sVGFibGUubV9hcmd1
bWVudHMuZ2V0KCkpOworICAgIH0KKworICAgIFN5bWJvbFRhYmxlKiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IFN5bWJvbFRhYmxlOjpjcmVhdGUoZGVjb2Rlci52bSgpKTsKKyAgICAgICAgbWFwLmRlY29kZShk
ZWNvZGVyLCBzeW1ib2xUYWJsZS0+bV9tYXApOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9tYXhT
Y29wZU9mZnNldCA9IG1heFNjb3BlT2Zmc2V0OworICAgICAgICBzeW1ib2xUYWJsZS0+bV91c2Vz
Tm9uU3RyaWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOworICAgICAgICBzeW1ib2xUYWJsZS0+
bV9uZXN0ZWRMZXhpY2FsU2NvcGUgPSBuZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAgICAgIHN5bWJv
bFRhYmxlLT5tX3Njb3BlVHlwZSA9IHNjb3BlVHlwZTsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRz
VGFibGUqIHNjb3BlZEFyZ3VtZW50c1RhYmxlID0gYXJndW1lbnRzLmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgaWYgKHNjb3BlZEFyZ3VtZW50c1RhYmxlKQorICAgICAgICAgICAgc3ltYm9sVGFi
bGUtPm1fYXJndW1lbnRzLnNldChkZWNvZGVyLnZtKCksIHN5bWJvbFRhYmxlLCBzY29wZWRBcmd1
bWVudHNUYWJsZSk7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZTsKKyAgICB9Cit9OworCitz
dHJ1Y3QgQ2FjaGVkSlNWYWx1ZTsKK3N0cnVjdCBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHkgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5LCBDYWNoZWRJbW11dGFibGVC
dXR0ZXJmbHk+IHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlOworICAgIHVuc2lnbmVk
IGxlbmd0aDsKKyAgICB1bmlvbiB7CisgICAgICAgIENhY2hlZEFycmF5PGRvdWJsZT4gY2FjaGVk
RG91YmxlczsKKyAgICAgICAgQ2FjaGVkQXJyYXk8Q2FjaGVkSlNWYWx1ZSwgV3JpdGVCYXJyaWVy
PFVua25vd24+PiBjYWNoZWRWYWx1ZXM7CisgICAgfTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIEpTSW1tdXRhYmxlQnV0dGVyZmx5JiBpbW11dGFibGVCdXR0ZXJmbHkpCisg
ICAgeworICAgICAgICBsZW5ndGggPSBpbW11dGFibGVCdXR0ZXJmbHkubGVuZ3RoKCk7CisgICAg
ICAgIGluZGV4aW5nVHlwZSA9IGltbXV0YWJsZUJ1dHRlcmZseS5pbmRleGluZ01vZGUoKTsgLy8g
dGhpcyBpcyBjb25mdXNpbmcsIG5vdCBzdXJlIHdoeSB3ZSBoYXZlIHRvIHVzZSBpbmRleGluZ01v
ZGUgdnMgaW5kZXhpbmdUeXBlCisgICAgICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkK
KyAgICAgICAgICAgIGNhY2hlZERvdWJsZXMuZW5jb2RlKGVuY29kZXIsIGltbXV0YWJsZUJ1dHRl
cmZseS50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBsZW5ndGgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWNoZWRWYWx1ZXMuZW5jb2RlKGVuY29kZXIsIGlt
bXV0YWJsZUJ1dHRlcmZseS50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBsZW5n
dGgpOworICAgIH0KKworICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11
dGFibGVCdXR0ZXJmbHkgPSBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y3JlYXRlKGRlY29kZXIudm0o
KSwgaW5kZXhpbmdUeXBlLCBsZW5ndGgpOworICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5n
VHlwZSkpCisgICAgICAgICAgICBjYWNoZWREb3VibGVzLmRlY29kZShkZWNvZGVyLCBpbW11dGFi
bGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIGxl
bmd0aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2Fj
aGVkVmFsdWVzLmRlY29kZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGxlbmd0aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAg
ICAgICAgcmV0dXJuIGltbXV0YWJsZUJ1dHRlcmZseTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2Fj
aGVkUmVnRXhwIDogcHVibGljIENhY2hlZE9iamVjdDxSZWdFeHAsIENhY2hlZFJlZ0V4cD4gewor
ICAgIENhY2hlZFN0cmluZyBwYXR0ZXJuU3RyaW5nOworICAgIFJlZ0V4cEZsYWdzIGZsYWdzOwor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVnRXhwJiByZWdFeHAp
CisgICAgeworICAgICAgICBwYXR0ZXJuU3RyaW5nLmVuY29kZShlbmNvZGVyLCByZWdFeHAubV9w
YXR0ZXJuU3RyaW5nKTsKKyAgICAgICAgZmxhZ3MgPSByZWdFeHAubV9mbGFnczsKKyAgICB9CisK
KyAgICBSZWdFeHAqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgU3RyaW5nIHBhdHRlcm4geyBwYXR0ZXJuU3RyaW5nLmRlY29kZShkZWNvZGVyKSB9OworICAg
ICAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBwYXR0ZXJuLCBmbGFncyk7
CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA6IHB1
YmxpYyBDYWNoZWRPYmplY3Q8VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLCBDYWNoZWRUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I+IHsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkU3RyaW5nLCA0PiBy
YXdTdHJpbmdzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRPcHRpb25hbDxDYWNoZWRTdHJpbmc+
LCA0PiBjb29rZWRTdHJpbmdzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yJiB0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Ip
CisgICAgeworICAgICAgICByYXdTdHJpbmdzLmVuY29kZShlbmNvZGVyLCB0ZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3IucmF3U3RyaW5ncygpKTsKKyAgICAgICAgY29va2VkU3RyaW5ncy5lbmNvZGUo
ZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNvb2tlZFN0cmluZ3MoKSk7CisgICAg
fQorCisgICAgUmVmPFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4gZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OlN0
cmluZ1ZlY3RvciBkZWNvZGVkUmF3U3RyaW5nczsKKyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNj
cmlwdG9yOjpPcHRpb25hbFN0cmluZ1ZlY3RvciBkZWNvZGVkQ29va2VkU3RyaW5nczsKKyAgICAg
ICAgcmF3U3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZFJhd1N0cmluZ3MpOworICAgICAg
ICBjb29rZWRTdHJpbmdzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkQ29va2VkU3RyaW5ncyk7Cisg
ICAgICAgIHJldHVybiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShXVEZNb3ZlKGRl
Y29kZWRSYXdTdHJpbmdzKSwgV1RGTW92ZShkZWNvZGVkQ29va2VkU3RyaW5ncykpOworICAgIH0K
K307CisKK3N0cnVjdCBDYWNoZWRCaWdJbnQgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8
SlNCaWdJbnQsIENhY2hlZEJpZ0ludD4geworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBib29s
IHNpZ247CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0JpZ0ludCYgYmln
SW50KQorICAgIHsKKyAgICAgICAgbGVuZ3RoID0gYmlnSW50Lmxlbmd0aCgpOworICAgICAgICBz
aWduID0gYmlnSW50LnNpZ24oKTsKKworICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKEpTQmlnSW50OjpEaWdp
dCkgKiBsZW5ndGg7CisgICAgICAgIHRoaXMtPmFsbG9jYXRlKGVuY29kZXIsIHNpemUpOworICAg
ICAgICBtZW1jcHkodGhpcy0+YnVmZmVyKCksIGJpZ0ludC5kYXRhU3RvcmFnZSgpLCBzaXplKTsK
KyAgICB9CisKKyAgICBKU0JpZ0ludCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5n
dGhVbmNoZWNrZWQoZGVjb2Rlci52bSgpLCBsZW5ndGgpOworICAgICAgICBiaWdJbnQtPnNldFNp
Z24oc2lnbik7CisgICAgICAgIG1lbWNweShiaWdJbnQtPmRhdGFTdG9yYWdlKCksIHRoaXMtPmJ1
ZmZlcigpLCBzaXplb2YoSlNCaWdJbnQ6OkRpZ2l0KSAqIGxlbmd0aCk7CisgICAgICAgIHJldHVy
biBiaWdJbnQ7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEpTVmFsdWUgOiBwdWJsaWMgVmFy
aWFibGVMZW5ndGhPYmplY3Q8V3JpdGVCYXJyaWVyPFVua25vd24+LCBDYWNoZWRKU1ZhbHVlPiB7
CisgICAgZW51bSBjbGFzcyBFbmNvZGVkVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBKU1ZhbHVl
LAorICAgICAgICBTeW1ib2xUYWJsZSwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBJbW11dGFi
bGVCdXR0ZXJmbHksCisgICAgICAgIFJlZ0V4cCwKKyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNj
cmlwdG9yLAorICAgICAgICBCaWdJbnQsCisgICAgfTsKKworICAgIEVuY29kZWRUeXBlIHR5cGU7
CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4gdmFsdWUpCisgICAgeworICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZS5nZXQoKTsK
KworICAgICAgICBpZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IHR5cGUgPSBFbmNvZGVkVHlwZTo6SlNWYWx1ZTsKKyAgICAgICAgICAgICp0aGlzLT5hbGxvY2F0
ZTxFbmNvZGVkSlNWYWx1ZT4oZW5jb2RlcikgPSBKU1ZhbHVlOjplbmNvZGUodik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2LmFzQ2Vs
bCgpOworICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IGNlbGwtPmNsYXNzSW5m
byhlbmNvZGVyLnZtKCkpOworCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gU3ltYm9sVGFibGU6
OmluZm8oKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpTeW1ib2xUYWJsZTsK
KyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFN5bWJvbFRhYmxlPihlbmNvZGVyKS0+
ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8U3ltYm9sVGFibGUqPihjZWxsKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09IEpTU3RyaW5n
OjppbmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6U3RyaW5nOworICAg
ICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IGFzU3RyaW5nKGNlbGwpLT50cnlHZXRWYWx1ZSgp
LmltcGwoKTsKKyAgICAgICAgICAgIEFTU0VSVCghaW1wbCB8fCAhaW1wbC0+aXNTeW1ib2woKSk7
CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4oZW5j
b2RlciktPmVuY29kZShlbmNvZGVyLCAqaW1wbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09IEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpp
bmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVy
Zmx5OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5
PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkq
PihjZWxsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y2xhc3NJbmZvID09IFJlZ0V4cDo6aW5mbygpKSB7CisgICAgICAgICAgICB0eXBlID0gRW5jb2Rl
ZFR5cGU6OlJlZ0V4cDsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFJlZ0V4cD4o
ZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqanNDYXN0PFJlZ0V4cCo+KGNlbGwpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gSlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmluZm8oKSkgeworICAgICAgICAgICAgdHlwZSA9IEVu
Y29kZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7CisgICAgICAgICAgICB0aGlzLT5h
bGxvY2F0ZTxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KGVuY29kZXIpLT5lbmNvZGUo
ZW5jb2RlciwganNDYXN0PEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yKj4oY2VsbCktPmRlc2Ny
aXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y2xhc3NJbmZvID09IEpTQmlnSW50OjppbmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNv
ZGVkVHlwZTo6QmlnSW50OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkQmlnSW50
PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0
CisgICAgeworICAgICAgICBKU1ZhbHVlIHY7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVuY29kZWRUeXBlOjpKU1ZhbHVlOgorICAgICAgICAgICAgdiA9IEpTVmFsdWU6
OmRlY29kZSgqdGhpcy0+YnVmZmVyPEVuY29kZWRKU1ZhbHVlPigpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpTeW1ib2xUYWJsZToKKyAgICAgICAgICAg
IHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkU3ltYm9sVGFibGU+KCktPmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpTdHJpbmc6IHsK
KyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsID0gdGhpcy0+YnVmZmVyPENhY2hl
ZFVuaXF1ZWRTdHJpbmdJbXBsPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICB2ID0g
SlNTdHJpbmc6OmNyZWF0ZShkZWNvZGVyLnZtKCksIGFkb3B0UmVmKCppbXBsKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpJbW11dGFi
bGVCdXR0ZXJmbHk6CisgICAgICAgICAgICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZEltbXV0YWJs
ZUJ1dHRlcmZseT4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRW5jb2RlZFR5cGU6OlJlZ0V4cDoKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZm
ZXI8Q2FjaGVkUmVnRXhwPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOgorICAg
ICAgICAgICAgdiA9IEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUoZGVjb2Rlci52
bSgpLCB0aGlzLT5idWZmZXI8Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPigpLT5kZWNv
ZGUoZGVjb2RlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5
cGU6OkJpZ0ludDoKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkQmlnSW50Pigp
LT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICAgICAgdmFsdWUuc2V0KGRlY29kZXIudm0oKSwgb3duZXIsIHYpOworICAgIH0KK307CisKK3N0
cnVjdCBDYWNoZWRJbnN0cnVjdGlvblN0cmVhbSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SW5zdHJ1
Y3Rpb25TdHJlYW0sIENhY2hlZEluc3RydWN0aW9uU3RyZWFtPiB7CisgICAgQ2FjaGVkVmVjdG9y
PHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBpbnN0cnVjdGlvbnM7CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgc3Ry
ZWFtKQorICAgIHsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zLmVuY29kZShlbmNvZGVyLCBzdHJlYW0u
bV9pbnN0cnVjdGlvbnMpOworICAgIH0KKworICAgIEluc3RydWN0aW9uU3RyZWFtKiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90LCAw
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gaW5zdHJ1Y3Rpb25zVmVjdG9yOworICAgICAgICBpbnN0
cnVjdGlvbnMuZGVjb2RlKGRlY29kZXIsIGluc3RydWN0aW9uc1ZlY3Rvcik7CisgICAgICAgIHJl
dHVybiBuZXcgSW5zdHJ1Y3Rpb25TdHJlYW0oV1RGTW92ZShpbnN0cnVjdGlvbnNWZWN0b3IpKTsK
KyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkTWV0YWRhdGFUYWJsZSA6IHB1YmxpYyBDYWNoZWRP
YmplY3Q8VW5saW5rZWRNZXRhZGF0YVRhYmxlLCBDYWNoZWRNZXRhZGF0YVRhYmxlPiB7CisgICAg
Ym9vbCBoYXNNZXRhZGF0YTsKKyAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBVbmxpbmtlZE1ldGFk
YXRhVGFibGU6OnNfb2Zmc2V0VGFibGVFbnRyaWVzPiBtZXRhZGF0YTsKKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBjb25zdCBVbmxpbmtlZE1ldGFkYXRhVGFibGUmIG1ldGFkYXRhVGFibGUp
CisgICAgeworICAgICAgICBBU1NFUlQobWV0YWRhdGFUYWJsZS5tX2lzRmluYWxpemVkKTsKKyAg
ICAgICAgaGFzTWV0YWRhdGEgPSBtZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGE7CisgICAgICAg
IGlmICghaGFzTWV0YWRhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IFVubGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM7IGkt
LTspCisgICAgICAgICAgICBtZXRhZGF0YVtpXSA9IG1ldGFkYXRhVGFibGUuYnVmZmVyKClbaV07
CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYsIFVubGlua2VkTWV0YWRhdGFUYWJs
ZSYgbWV0YWRhdGFUYWJsZSkgY29uc3QKKyAgICB7CisgICAgICAgIG1ldGFkYXRhVGFibGUubV9p
c0ZpbmFsaXplZCA9IHRydWU7CisgICAgICAgIG1ldGFkYXRhVGFibGUubV9pc0xpbmtlZCA9IGZh
bHNlOworICAgICAgICBtZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGEgPSBoYXNNZXRhZGF0YTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNl
dFRhYmxlRW50cmllczsgaS0tOykKKyAgICAgICAgICAgIG1ldGFkYXRhVGFibGUuYnVmZmVyKClb
aV0gPSBtZXRhZGF0YVtpXTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU291cmNlT3JpZ2lu
IDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2VPcmlnaW4sIENhY2hlZFNvdXJjZU9yaWdpbj4g
eworICAgIENhY2hlZFN0cmluZyBzdHJpbmc7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKKyAgICB7CisgICAgICAg
IHN0cmluZy5lbmNvZGUoZW5jb2Rlciwgc291cmNlT3JpZ2luLnN0cmluZygpKTsKKyAgICB9CisK
KyAgICBTb3VyY2VPcmlnaW4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gU291cmNlT3JpZ2luIHsgc3RyaW5nLmRlY29kZShkZWNvZGVyKSB9Owor
ICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRUZXh0UG9zaXRpb24gOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFRleHRQb3NpdGlvbiwgQ2FjaGVkVGV4dFBvc2l0aW9uPiB7CisgICAgaW50IGxpbmU7Cisg
ICAgaW50IGNvbHVtbjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBUZXh0UG9zaXRpb24g
dGV4dFBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgbGluZSA9IHRleHRQb3NpdGlvbi5tX2xpbmUu
emVyb0Jhc2VkSW50KCk7CisgICAgICAgIGNvbHVtbiA9IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56
ZXJvQmFzZWRJbnQoKTsKKyAgICB9CisKKyAgICBUZXh0UG9zaXRpb24gZGVjb2RlKERlY29kZXIm
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbiB7IE9yZGluYWxOdW1i
ZXI6OmZyb21aZXJvQmFzZWRJbnQobGluZSksIE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJ
bnQoY29sdW1uKSB9OworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTVCwgdHlwZW5h
bWUgQ2FjaGVkVHlwZT4KK3N0cnVjdCBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlIDogcHVibGlj
IENhY2hlZE9iamVjdDxTVCwgQ2FjaGVkVHlwZT4geworICAgIGJvb2wgdmFsaWRhdGVkIDogMTsK
KyAgICBDYWNoZWRTb3VyY2VPcmlnaW4gc291cmNlT3JpZ2luOworICAgIENhY2hlZFN0cmluZyB1
cmw7CisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRTdHJp
bmcgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRUZXh0UG9zaXRpb24gc3Rh
cnRQb3NpdGlvbjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNv
dXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIHZhbGlkYXRlZCA9
IHNvdXJjZVByb3ZpZGVyLmlzVmFsaWQoKTsKKyAgICAgICAgc291cmNlT3JpZ2luLmVuY29kZShl
bmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3VyY2VPcmlnaW4oKSk7CisgICAgICAgIHVybC5lbmNv
ZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIudXJsKCkpOworICAgICAgICBzb3VyY2VVUkxEaXJl
Y3RpdmUuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZVVSTCgpKTsKKyAgICAg
ICAgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlk
ZXIuc291cmNlTWFwcGluZ1VSTCgpKTsKKyAgICAgICAgc3RhcnRQb3NpdGlvbi5lbmNvZGUoZW5j
b2Rlciwgc291cmNlUHJvdmlkZXIuc3RhcnRQb3NpdGlvbigpKTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAodmFsaWRhdGVkKQorICAgICAgICAgICAgc291cmNl
UHJvdmlkZXIuc2V0VmFsaWQoKTsKKyAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNlVVJM
RGlyZWN0aXZlKHNvdXJjZVVSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOworICAgICAgICBz
b3VyY2VQcm92aWRlci5zZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKHNvdXJjZU1hcHBpbmdV
UkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVk
U3RyaW5nU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxT
dHJpbmdTb3VyY2VQcm92aWRlciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+IHsKKyAgICB1
c2luZyBCYXNlID0gQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRl
ciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkU3RyaW5nIHNvdXJj
ZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ1NvdXJj
ZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShl
bmNvZGVyLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIHNvdXJjZS5lbmNvZGUoZW5jb2Rlciwg
c291cmNlUHJvdmlkZXIuc291cmNlKCkudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgU3RyaW5n
U291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlclNv
dXJjZVR5cGUgc291cmNlVHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBkZWNvZGVk
U291cmNlID0gc291cmNlLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgU291cmNlT3JpZ2luIGRl
Y29kZWRTb3VyY2VPcmlnaW4gPSBzb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOworICAgICAg
ICBTdHJpbmcgZGVjb2RlZFVSTCA9IHVybC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFRleHRQ
b3NpdGlvbiBkZWNvZGVkU3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24uZGVjb2RlKGRlY29k
ZXIpOworCisgICAgICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIg
PSBTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3Vy
Y2VPcmlnaW4sIFVSTChVUkwoKSwgZGVjb2RlZFVSTCksIGRlY29kZWRTdGFydFBvc2l0aW9uLCBz
b3VyY2VUeXBlKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVy
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuICZzb3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CisgICAg
fQorfTsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK3N0cnVjdCBDYWNoZWRXZWJBc3NlbWJs
eVNvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8V2ViQXNz
ZW1ibHlTb3VyY2VQcm92aWRlciwgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4gewor
ICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291
cmNlUHJvdmlkZXIsIENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+OworCisgICAgQ2Fj
aGVkVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAg
ICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlcik7CisgICAg
ICAgIGRhdGEuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLmRhdGEoKSk7CisgICAgfQor
CisgICAgV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIp
IGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGVjb2RlZERhdGE7CisgICAg
ICAgIFNvdXJjZU9yaWdpbiBkZWNvZGVkU291cmNlT3JpZ2luID0gc291cmNlT3JpZ2luLmRlY29k
ZShkZWNvZGVyKTsKKyAgICAgICAgU3RyaW5nIGRlY29kZWRVUkwgPSB1cmwuZGVjb2RlKGRlY29k
ZXIpOworCisgICAgICAgIGRhdGEuZGVjb2RlKGRlY29kZXIsIGRlY29kZWREYXRhKTsKKworICAg
ICAgICBSZWY8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBXZWJB
c3NlbWJseVNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkRGF0YSksIGRlY29k
ZWRTb3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVjb2RlZFVSTCkpOworICAgICAgICBCYXNlOjpk
ZWNvZGUoZGVjb2Rlciwgc291cmNlUHJvdmlkZXIuZ2V0KCkpOworCisgICAgICAgIHJldHVybiAm
c291cmNlUHJvdmlkZXIubGVha1JlZigpOworICAgIH0KK307CisjZW5kaWYKKworc3RydWN0IENh
Y2hlZFNvdXJjZVByb3ZpZGVyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZVBy
b3ZpZGVyLCBDYWNoZWRTb3VyY2VQcm92aWRlcj4geworICAgIFNvdXJjZVByb3ZpZGVyU291cmNl
VHlwZSBzb3VyY2VUeXBlOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgc291cmNl
VHlwZSA9IHNvdXJjZVByb3ZpZGVyLnNvdXJjZVR5cGUoKTsKKyAgICAgICAgc3dpdGNoIChzb3Vy
Y2VUeXBlKSB7CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFt
OgorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAg
ICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+KGVuY29kZXIp
LT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmdTb3VyY2VQcm92
aWRlciY+KHNvdXJjZVByb3ZpZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJB
c3NlbWJseToKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFdlYkFzc2VtYmx5U291
cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyJj4oc291cmNlUHJvdmlkZXIpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgU291cmNl
UHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
c3dpdGNoIChzb3VyY2VUeXBlKSB7CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VU
eXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9k
dWxlOgorICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRTdHJpbmdTb3VyY2VQ
cm92aWRlcj4oKS0+ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVR5cGUpOworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2Vt
Ymx5OgorICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRXZWJBc3NlbWJseVNv
dXJjZVByb3ZpZGVyPigpLT5kZWNvZGUoZGVjb2Rlcik7CisjZW5kaWYKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTVCwgdHlwZW5hbWUgQ2FjaGVUeXBlPgor
c3RydWN0IENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlIDogcHVibGljIENhY2hlZE9iamVj
dDxTVCwgIENhY2hlVHlwZT4geworICAgIENhY2hlZFB0cjxDYWNoZWRTb3VyY2VQcm92aWRlcj4g
cHJvdmlkZXI7CisgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgIGludCBlbmRPZmZzZXQ7CisKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUpCisgICAgeworICAgICAgICBwcm92aWRlci5lbmNvZGUoZW5jb2Rlciwgc291
cmNlQ29kZS5tX3Byb3ZpZGVyLmdldCgpKTsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBzb3VyY2VD
b2RlLnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIGVuZE9mZnNldCA9IHNvdXJjZUNvZGUuZW5kT2Zm
c2V0KCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVW5saW5r
ZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgc291cmNlQ29k
ZS5tX3Byb3ZpZGVyID0gcHJvdmlkZXIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBzb3VyY2VD
b2RlLm1fc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICAgICAgc291cmNlQ29kZS5tX2Vu
ZE9mZnNldCA9IGVuZE9mZnNldDsKKyAgICB9Cit9OworCisKK3N0cnVjdCBDYWNoZWRVbmxpbmtl
ZFNvdXJjZUNvZGUgOiBwdWJsaWMgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8VW5saW5r
ZWRTb3VyY2VDb2RlLCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGU+IHsgfTsKKworc3RydWN0IENh
Y2hlZFNvdXJjZUNvZGUgOiBwdWJsaWMgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8U291
cmNlQ29kZSwgQ2FjaGVkU291cmNlQ29kZT4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRVbmxp
bmtlZFNvdXJjZUNvZGVTaGFwZTxTb3VyY2VDb2RlLCBDYWNoZWRTb3VyY2VDb2RlPjsKKworICAg
IGludCBmaXJzdExpbmU7CisgICAgaW50IHN0YXJ0Q29sdW1uOworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkKKyAgICB7Cisg
ICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VDb2RlKTsKKyAgICAgICAgZmlyc3RM
aW5lID0gc291cmNlQ29kZS5maXJzdExpbmUoKS56ZXJvQmFzZWRJbnQoKTsKKyAgICAgICAgc3Rh
cnRDb2x1bW4gPSBzb3VyY2VDb2RlLnN0YXJ0Q29sdW1uKCkuemVyb0Jhc2VkSW50KCk7CisgICAg
fQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlQ29kZSYgc291cmNl
Q29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VD
b2RlKTsKKyAgICAgICAgc291cmNlQ29kZS5tX2ZpcnN0TGluZSA9IE9yZGluYWxOdW1iZXI6OmZy
b21aZXJvQmFzZWRJbnQoZmlyc3RMaW5lKTsKKyAgICAgICAgc291cmNlQ29kZS5tX3N0YXJ0Q29s
dW1uID0gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChzdGFydENvbHVtbik7CisgICAg
fQorfTsKKworc3RydWN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1YmxpYyBDYWNoZWRP
YmplY3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUsIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZT4geworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlJik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGRlY29kZShEZWNv
ZGVyJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBmaXJzdExpbmVPZmZzZXQ7CisgICAgdW5zaWdu
ZWQgbGluZUNvdW50OworICAgIHVuc2lnbmVkIHVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7Cisg
ICAgdW5zaWduZWQgdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47CisgICAgdW5zaWduZWQgdW5saW5r
ZWRCb2R5RW5kQ29sdW1uOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVk
IHNvdXJjZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAg
dW5zaWduZWQgdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIHR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQ7CisgICAgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQ7CisgICAgQ29kZUZl
YXR1cmVzIGZlYXR1cmVzOworICAgIFNvdXJjZVBhcnNlTW9kZSBzb3VyY2VQYXJzZU1vZGU7Cisg
ICAgdW5zaWduZWQgaXNJblN0cmljdENvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIGhhc0NhcHR1
cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25lZCBpc0J1aWx0aW5GdW5jdGlvbiA6IDE7Cisg
ICAgdW5zaWduZWQgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgOiAxOworICAgIHVu
c2lnbmVkIGNvbnN0cnVjdEFiaWxpdHk6IDE7CisgICAgdW5zaWduZWQgY29uc3RydWN0b3JLaW5k
IDogMjsKKyAgICB1bnNpZ25lZCBmdW5jdGlvbk1vZGUgOiAyOyAvLyBGdW5jdGlvbk1vZGUKKyAg
ICB1bnNpZ25lZCBzY3JpcHRNb2RlOiAxOyAvLyBKU1BhcnNlclNjcmlwdE1vZGUKKyAgICB1bnNp
Z25lZCBzdXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZTog
MjsKKworICAgIENhY2hlZFNvdXJjZUNvZGUgY2xhc3NTb3VyY2U7CisKKyAgICBDYWNoZWRJZGVu
dGlmaWVyIG5hbWU7CisgICAgQ2FjaGVkSWRlbnRpZmllciBlY21hTmFtZTsKKyAgICBDYWNoZWRJ
ZGVudGlmaWVyIGluZmVycmVkTmFtZTsKKworICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQg
cGFyZW50U2NvcGVURFpWYXJpYWJsZXM7CisKKyAgICBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVk
RnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IHVubGlua2VkQ29k
ZUJsb2NrRm9yQ2FsbDsKKyAgICBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2Rl
QmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IHVubGlua2VkQ29kZUJsb2NrRm9yQ29u
c3RydWN0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUg
Q2FjaGVkQ29kZUJsb2NrVHlwZT4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2sgOiBwdWJsaWMgQ2Fj
aGVkT2JqZWN0PENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+IHsKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2smKTsKKyAgICB2b2lkIGRl
Y29kZShEZWNvZGVyJiwgVW5saW5rZWRDb2RlQmxvY2smKSBjb25zdDsKKworICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXI7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyOworCisgICAgdW5zaWdu
ZWQgdXNlc0V2YWwgOiAxOworICAgIHVuc2lnbmVkIGlzU3RyaWN0TW9kZSA6IDE7CisgICAgdW5z
aWduZWQgaXNDb25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQgaGFzQ2FwdHVyZWRWYXJpYWJs
ZXMgOiAxOworICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICB1bnNpZ25l
ZCBzdXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVkIHNjcmlwdE1vZGU6IDE7CisgICAgdW5z
aWduZWQgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgaXNDbGFzc0Nv
bnRleHQgOiAxOworICAgIHVuc2lnbmVkIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMg
OiAxOworICAgIHVuc2lnbmVkIGNvbnN0cnVjdG9yS2luZCA6IDI7CisgICAgdW5zaWduZWQgZGVy
aXZlZENvbnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUgOiAyOwor
ICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscyA6IDE7CisKKyAgICB1bnNpZ25lZCBsaW5lQ291bnQ7
CisgICAgdW5zaWduZWQgZW5kQ29sdW1uOworCisgICAgaW50IG51bVZhcnM7CisgICAgaW50IG51
bUNhbGxlZUxvY2FsczsKKyAgICBpbnQgbnVtUGFyYW1ldGVyczsKKworICAgIENvZGVGZWF0dXJl
cyBmZWF0dXJlczsKKyAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlOworICAgIENvZGVUeXBl
IGNvZGVUeXBlOworCisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGlua1RpbWVDb25zdGFudENv
dW50PiBsaW5rVGltZUNvbnN0YW50czsKKyAgICBDYWNoZWRNZXRhZGF0YVRhYmxlIG1ldGFkYXRh
OworCisgICAgQ2FjaGVkT3B0aW9uYWw8Q2FjaGVkUmFyZURhdGE+IHJhcmVEYXRhOworCisgICAg
Q2FjaGVkU3RyaW5nIHNvdXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRTdHJpbmcgc291cmNl
TWFwcGluZ1VSTERpcmVjdGl2ZTsKKworICAgIENhY2hlZFB0cjxDYWNoZWRJbnN0cnVjdGlvblN0
cmVhbT4gaW5zdHJ1Y3Rpb25zOworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0PiBqdW1wVGFyZ2V0czsKKyAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldD4gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisgICAgQ2FjaGVkVmVjdG9yPENh
Y2hlZEpTVmFsdWU+IGNvbnN0YW50UmVnaXN0ZXJzOworICAgIENhY2hlZFZlY3RvcjxTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24+IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKKyAg
ICBDYWNoZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gZXhwcmVzc2lvbkluZm87CisgICAg
Q2FjaGVkSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+IG91dE9mTGluZUp1
bXBUYXJnZXRzOworCisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZENvbnN0YW50SWRlbnRpZmllclNl
dEVudHJ5PiBjb25zdGFudElkZW50aWZpZXJTZXRzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJ
ZGVudGlmaWVyPiBpZGVudGlmaWVyczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkQml0VmVjdG9y
PiBiaXRWZWN0b3JzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlPj4gZnVuY3Rpb25EZWNsczsKKyAgICBDYWNoZWRWZWN0b3I8Q2Fj
aGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IGZ1bmN0aW9uRXhwcnM7
Cit9OworCitzdHJ1Y3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2Rl
QmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrPiB7
CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2ssIENhY2hlZFByb2dyYW1Db2RlQmxvY2s+OworICAgIHVzaW5nIEJhc2U6OmVuY29kZTsKKwor
ICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyRGVjbGFyYXRpb25zOworICAgIENhY2hl
ZFZhcmlhYmxlRW52aXJvbm1lbnQgbGV4aWNhbERlY2xhcmF0aW9uczsKKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayYgY29k
ZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7
CisgICAgICAgIHZhckRlY2xhcmF0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fdmFy
RGVjbGFyYXRpb25zKTsKKyAgICAgICAgbGV4aWNhbERlY2xhcmF0aW9ucy5lbmNvZGUoZW5jb2Rl
ciwgY29kZUJsb2NrLm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7CisgICAgfQorCisgICAgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7
CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCku
aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAg
IGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6
ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICB2YXJEZWNsYXJhdGlvbnMuZGVj
b2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV92YXJEZWNsYXJhdGlvbnMpOworICAgICAgICBsZXhp
Y2FsRGVjbGFyYXRpb25zLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fbGV4aWNhbERlY2xh
cmF0aW9ucyk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorfTsKKworc3RydWN0
IENhY2hlZE1vZHVsZUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrLCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s+IHsKKyAgICB1c2lu
ZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaywg
Q2FjaGVkTW9kdWxlQ29kZUJsb2NrPjsKKyAgICB1c2luZyBCYXNlOjplbmNvZGU7CisKKyAgICBp
bnQgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2spOworICAgICAgICBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
Q29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IGNvZGVCbG9jay5tX21vZHVsZUVudmlyb25tZW50U3lt
Ym9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OworICAgIH0KKworICAgIFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4o
ZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soZGVjb2Rl
ciwgKnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0o
KSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAg
Y29kZUJsb2NrLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVy
T2Zmc2V0ID0gbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZz
ZXQ7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorfTsKKworc3RydWN0IENhY2hl
ZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVC
bG9jaywgQ2FjaGVkRXZhbENvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2Rl
QmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrLCBDYWNoZWRFdmFsQ29kZUJsb2NrPjsKKyAgICB1
c2luZyBCYXNlOjplbmNvZGU7CisKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSWRlbnRpZmllciwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IHZhcmlhYmxlczsKKyAgICBDYWNoZWRWZWN0b3I8Q2Fj
aGVkSWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGZ1bmN0aW9uSG9pc3RpbmdD
YW5kaWRhdGVzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNv
ZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKKyAgICAgICAgdmFyaWFibGVzLmVuY29kZShlbmNvZGVy
LCBjb2RlQmxvY2subV92YXJpYWJsZXMpOworICAgICAgICBmdW5jdGlvbkhvaXN0aW5nQ2FuZGlk
YXRlcy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0
ZXMpOworICAgIH0KKworICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRXZhbENvZGVCbG9j
az4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxvY2soZGVjb2RlciwgKnRo
aXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7Cisg
ICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgdmFyaWFi
bGVzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFyaWFibGVzKTsKKyAgICAgICAgZnVu
Y3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV9mdW5j
dGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAg
fQorfTsKKworc3RydWN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENv
ZGVCbG9jazxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9j
az4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jaywgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s+OworCisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayYgY29kZUJsb2Nr
KQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAg
fQorCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soZGVjb2Rl
ciwgKnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0o
KSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAg
cmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9OworCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYgZGVjb2Rl
ciwgY29uc3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6
IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDsKKwordGVtcGxhdGU8Pgorc3RydWN0
IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4geworICAg
IHVzaW5nIHR5cGUgPSBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOworfTsKKwordGVtcGxhdGU8Pgor
c3RydWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jaz4geworICAgIHVzaW5nIHR5cGUgPSBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7Cit9OworCit0
ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRFdmFsQ29k
ZUJsb2NrPiB7CisgICAgdXNpbmcgdHlwZSA9IENhY2hlZEV2YWxDb2RlQmxvY2s7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgQ2FjaGVkQ29kZUJsb2NrVHlwZSA9IHR5cGVuYW1l
IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFQ+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElO
RSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2Rlciwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBl
LCBDYWNoZWRDb2RlQmxvY2tUeXBlPiYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNv
ZGVyLnZtKCksIHN0cnVjdHVyZSkKKyAgICAsIG1faW5zdHJ1Y3Rpb25zKGNhY2hlZENvZGVCbG9j
ay5pbnN0cnVjdGlvbnMuZGVjb2RlKGRlY29kZXIpKQorICAgICwgbV9saXZlbmVzcyhudWxscHRy
KQorICAgICwgbV90aGlzUmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnRoaXNSZWdpc3RlcikKKyAg
ICAsIG1fc2NvcGVSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2suc2NvcGVSZWdpc3RlcikKKyAgICAs
IG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLmdsb2JhbE9iamVjdFJlZ2lz
dGVyKQorCisgICAgLCBtX3NvdXJjZVVSTERpcmVjdGl2ZShjYWNoZWRDb2RlQmxvY2suc291cmNl
VVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKSkKKyAgICAsIG1fc291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZShjYWNoZWRDb2RlQmxvY2suc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5kZWNvZGUo
ZGVjb2RlcikpCisKKyAgICAsIG1fdXNlc0V2YWwoY2FjaGVkQ29kZUJsb2NrLnVzZXNFdmFsKQor
ICAgICwgbV9pc1N0cmljdE1vZGUoY2FjaGVkQ29kZUJsb2NrLmlzU3RyaWN0TW9kZSkKKyAgICAs
IG1faXNDb25zdHJ1Y3RvcihjYWNoZWRDb2RlQmxvY2suaXNDb25zdHJ1Y3RvcikKKyAgICAsIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXMoY2FjaGVkQ29kZUJsb2NrLmhhc0NhcHR1cmVkVmFyaWFibGVz
KQorICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihjYWNoZWRDb2RlQmxvY2suaXNCdWlsdGluRnVu
Y3Rpb24pCisgICAgLCBtX3N1cGVyQmluZGluZyhjYWNoZWRDb2RlQmxvY2suc3VwZXJCaW5kaW5n
KQorICAgICwgbV9zY3JpcHRNb2RlKGNhY2hlZENvZGVCbG9jay5zY3JpcHRNb2RlKQorICAgICwg
bV9pc0Fycm93RnVuY3Rpb25Db250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0Fycm93RnVuY3Rpb25D
b250ZXh0KQorICAgICwgbV9pc0NsYXNzQ29udGV4dChjYWNoZWRDb2RlQmxvY2suaXNDbGFzc0Nv
bnRleHQpCisgICAgLCBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoY2FjaGVkQ29k
ZUJsb2NrLndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMpCisgICAgLCBtX2NvbnN0cnVj
dG9yS2luZChjYWNoZWRDb2RlQmxvY2suY29uc3RydWN0b3JLaW5kKQorICAgICwgbV9kZXJpdmVk
Q29udGV4dFR5cGUoY2FjaGVkQ29kZUJsb2NrLmRlcml2ZWRDb250ZXh0VHlwZSkKKyAgICAsIG1f
ZXZhbENvbnRleHRUeXBlKGNhY2hlZENvZGVCbG9jay5ldmFsQ29udGV4dFR5cGUpCisgICAgLCBt
X2hhc1RhaWxDYWxscyhjYWNoZWRDb2RlQmxvY2suaGFzVGFpbENhbGxzKQorICAgICwgbV9saW5l
Q291bnQoY2FjaGVkQ29kZUJsb2NrLmxpbmVDb3VudCkKKyAgICAsIG1fZW5kQ29sdW1uKGNhY2hl
ZENvZGVCbG9jay5lbmRDb2x1bW4pCisgICAgLCBtX251bVZhcnMoY2FjaGVkQ29kZUJsb2NrLm51
bVZhcnMpCisgICAgLCBtX251bUNhbGxlZUxvY2FscyhjYWNoZWRDb2RlQmxvY2subnVtQ2FsbGVl
TG9jYWxzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGNhY2hlZENvZGVCbG9jay5udW1QYXJhbWV0
ZXJzKQorICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMpCisgICAgLCBt
X3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKQorICAgICwgbV9jb2RlVHlwZShj
YWNoZWRDb2RlQmxvY2suY29kZVR5cGUpCisgICAgLCBtX3JhcmVEYXRhKGNhY2hlZENvZGVCbG9j
ay5yYXJlRGF0YS5kZWNvZGVBc1B0cihkZWNvZGVyKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2Nr
VHlwZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZENvZGVCbG9jayYgY29kZUJs
b2NrKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IExpbmtUaW1lQ29uc3RhbnRDb3Vu
dDsgaS0tOykKKyAgICAgICAgY29kZUJsb2NrLm1fbGlua1RpbWVDb25zdGFudHNbaV0gPSBsaW5r
VGltZUNvbnN0YW50c1tpXTsKKworICAgIG1ldGFkYXRhLmRlY29kZShkZWNvZGVyLCBjb2RlQmxv
Y2subV9tZXRhZGF0YSk7CisgICAgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuZGVjb2RlKGRl
Y29kZXIsIGNvZGVCbG9jay5tX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTsKKyAgICBjb25z
dGFudFJlZ2lzdGVycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRSZWdpc3Rl
cnMsICZjb2RlQmxvY2spOworICAgIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5k
ZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKTsKKyAgICBleHByZXNzaW9uSW5mby5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZXhw
cmVzc2lvbkluZm8pOworICAgIG91dE9mTGluZUp1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBj
b2RlQmxvY2subV9vdXRPZkxpbmVKdW1wVGFyZ2V0cyk7CisgICAganVtcFRhcmdldHMuZGVjb2Rl
KGRlY29kZXIsIGNvZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBjb25zdGFudElkZW50aWZp
ZXJTZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudElkZW50aWZpZXJTZXRz
KTsKKyAgICBpZGVudGlmaWVycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1faWRlbnRpZmll
cnMpOworICAgIGJpdFZlY3RvcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2JpdFZlY3Rv
cnMpOworICAgIGZ1bmN0aW9uRGVjbHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0
aW9uRGVjbHMsICZjb2RlQmxvY2spOworICAgIGZ1bmN0aW9uRXhwcnMuZGVjb2RlKGRlY29kZXIs
IGNvZGVCbG9jay5tX2Z1bmN0aW9uRXhwcnMsICZjb2RlQmxvY2spOworfQorCitBTFdBWVNfSU5M
SU5FIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKERl
Y29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hlZFByb2dyYW1Db2RlQmxvY2smIGNhY2hlZENvZGVC
bG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNf
SU5MSU5FIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hlZE1vZHVsZUNvZGVCbG9j
ayYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxv
Y2spCit7Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpVbmxpbmtl
ZEV2YWxDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkRXZhbENvZGVCbG9j
ayYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5s
aW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSYgZXhlY3V0
YWJsZSkKK3sKKyAgICBmaXJzdExpbmVPZmZzZXQgPSBleGVjdXRhYmxlLm1fZmlyc3RMaW5lT2Zm
c2V0OworICAgIGxpbmVDb3VudCA9IGV4ZWN1dGFibGUubV9saW5lQ291bnQ7CisgICAgdW5saW5r
ZWRGdW5jdGlvbk5hbWVTdGFydCA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0
YXJ0OworICAgIHVubGlua2VkQm9keVN0YXJ0Q29sdW1uID0gZXhlY3V0YWJsZS5tX3VubGlua2Vk
Qm9keVN0YXJ0Q29sdW1uOworICAgIHVubGlua2VkQm9keUVuZENvbHVtbiA9IGV4ZWN1dGFibGUu
bV91bmxpbmtlZEJvZHlFbmRDb2x1bW47CisgICAgc3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1f
c3RhcnRPZmZzZXQ7CisgICAgc291cmNlTGVuZ3RoID0gZXhlY3V0YWJsZS5tX3NvdXJjZUxlbmd0
aDsKKyAgICBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fcGFyYW1ldGVyc1N0
YXJ0T2Zmc2V0OworICAgIHR5cGVQcm9maWxpbmdTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUubV90
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgdHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IGV4
ZWN1dGFibGUubV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OworICAgIHBhcmFtZXRlckNvdW50ID0g
ZXhlY3V0YWJsZS5tX3BhcmFtZXRlckNvdW50OworCisgICAgZmVhdHVyZXMgPSBleGVjdXRhYmxl
Lm1fZmVhdHVyZXM7CisgICAgc291cmNlUGFyc2VNb2RlID0gZXhlY3V0YWJsZS5tX3NvdXJjZVBh
cnNlTW9kZTsKKworICAgIGlzSW5TdHJpY3RDb250ZXh0ID0gZXhlY3V0YWJsZS5tX2lzSW5TdHJp
Y3RDb250ZXh0OworICAgIGhhc0NhcHR1cmVkVmFyaWFibGVzID0gZXhlY3V0YWJsZS5tX2hhc0Nh
cHR1cmVkVmFyaWFibGVzOworICAgIGlzQnVpbHRpbkZ1bmN0aW9uID0gZXhlY3V0YWJsZS5tX2lz
QnVpbHRpbkZ1bmN0aW9uOworICAgIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID0g
ZXhlY3V0YWJsZS5tX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yOworICAgIGNvbnN0
cnVjdEFiaWxpdHkgPSBleGVjdXRhYmxlLm1fY29uc3RydWN0QWJpbGl0eTsKKyAgICBjb25zdHJ1
Y3RvcktpbmQgPSBleGVjdXRhYmxlLm1fY29uc3RydWN0b3JLaW5kOworICAgIGZ1bmN0aW9uTW9k
ZSA9IGV4ZWN1dGFibGUubV9mdW5jdGlvbk1vZGU7CisgICAgc2NyaXB0TW9kZSA9IGV4ZWN1dGFi
bGUubV9zY3JpcHRNb2RlOworICAgIHN1cGVyQmluZGluZyA9IGV4ZWN1dGFibGUubV9zdXBlckJp
bmRpbmc7CisgICAgZGVyaXZlZENvbnRleHRUeXBlID0gZXhlY3V0YWJsZS5tX2Rlcml2ZWRDb250
ZXh0VHlwZTsKKworICAgIGNsYXNzU291cmNlLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1f
Y2xhc3NTb3VyY2UpOworCisgICAgbmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5uYW1l
KCkpOworICAgIGVjbWFOYW1lLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmVjbWFOYW1lKCkp
OworICAgIGluZmVycmVkTmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5pbmZlcnJlZE5h
bWUoKSk7CisKKyAgICBwYXJlbnRTY29wZVREWlZhcmlhYmxlcy5lbmNvZGUoZW5jb2RlciwgZXhl
Y3V0YWJsZS5wYXJlbnRTY29wZVREWlZhcmlhYmxlcygpKTsKKworICAgIHVubGlua2VkQ29kZUJs
b2NrRm9yQ2FsbC5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2Nr
Rm9yQ2FsbCk7CisgICAgdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZW5jb2RlKGVuY29k
ZXIsIGV4ZWN1dGFibGUubV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cit7CisgICAgVmFyaWFibGVF
bnZpcm9ubWVudCBlbnY7CisgICAgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZGVjb2RlKGRlY29k
ZXIsIGVudik7CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihk
ZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKGRlY29kZXIsIGVu
diwgKnRoaXMpOworICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7
CisKKyAgICBjbGFzc1NvdXJjZS5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV9jbGFzc1Nv
dXJjZSk7CisgICAgdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmRlY29kZShkZWNvZGVyLCBleGVj
dXRhYmxlLT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCwgZXhlY3V0YWJsZSk7CisgICAgdW5s
aW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1f
dW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIGV4ZWN1dGFibGUpOworCisgICAgcmV0dXJu
IGV4ZWN1dGFibGU7Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxl
RW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBjb25zdCBDYWNoZWRGdW5jdGlv
bkV4ZWN1dGFibGUmIGNhY2hlZEV4ZWN1dGFibGUpCisgICAgOiBCYXNlKGRlY29kZXIudm0oKSwg
ZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpKQor
ICAgICwgbV9maXJzdExpbmVPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5maXJzdExpbmVPZmZzZXQp
CisgICAgLCBtX2xpbmVDb3VudChjYWNoZWRFeGVjdXRhYmxlLmxpbmVDb3VudCkKKyAgICAsIG1f
dW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydChjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkRnVuY3Rp
b25OYW1lU3RhcnQpCisgICAgLCBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uKGNhY2hlZEV4ZWN1
dGFibGUudW5saW5rZWRCb2R5U3RhcnRDb2x1bW4pCisgICAgLCBtX3VubGlua2VkQm9keUVuZENv
bHVtbihjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQm9keUVuZENvbHVtbikKKyAgICAsIG1fc3Rh
cnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5zdGFydE9mZnNldCkKKyAgICAsIG1fc291cmNlTGVu
Z3RoKGNhY2hlZEV4ZWN1dGFibGUuc291cmNlTGVuZ3RoKQorICAgICwgbV9wYXJhbWV0ZXJzU3Rh
cnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQpCisgICAgLCBt
X3R5cGVQcm9maWxpbmdTdGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnR5cGVQcm9maWxpbmdT
dGFydE9mZnNldCkKKyAgICAsIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldChjYWNoZWRFeGVjdXRh
YmxlLnR5cGVQcm9maWxpbmdFbmRPZmZzZXQpCisgICAgLCBtX3BhcmFtZXRlckNvdW50KGNhY2hl
ZEV4ZWN1dGFibGUucGFyYW1ldGVyQ291bnQpCisgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZEV4ZWN1
dGFibGUuZmVhdHVyZXMpCisgICAgLCBtX3NvdXJjZVBhcnNlTW9kZShjYWNoZWRFeGVjdXRhYmxl
LnNvdXJjZVBhcnNlTW9kZSkKKyAgICAsIG1faXNJblN0cmljdENvbnRleHQoY2FjaGVkRXhlY3V0
YWJsZS5pc0luU3RyaWN0Q29udGV4dCkKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoY2Fj
aGVkRXhlY3V0YWJsZS5oYXNDYXB0dXJlZFZhcmlhYmxlcykKKyAgICAsIG1faXNCdWlsdGluRnVu
Y3Rpb24oY2FjaGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5GdW5jdGlvbikKKyAgICAsIG1faXNCdWls
dGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IoY2FjaGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5EZWZh
dWx0Q2xhc3NDb25zdHJ1Y3RvcikKKyAgICAsIG1fY29uc3RydWN0QWJpbGl0eShjYWNoZWRFeGVj
dXRhYmxlLmNvbnN0cnVjdEFiaWxpdHkpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZChjYWNoZWRF
eGVjdXRhYmxlLmNvbnN0cnVjdG9yS2luZCkKKyAgICAsIG1fZnVuY3Rpb25Nb2RlKGNhY2hlZEV4
ZWN1dGFibGUuZnVuY3Rpb25Nb2RlKQorICAgICwgbV9zY3JpcHRNb2RlKGNhY2hlZEV4ZWN1dGFi
bGUuc2NyaXB0TW9kZSkKKyAgICAsIG1fc3VwZXJCaW5kaW5nKGNhY2hlZEV4ZWN1dGFibGUuc3Vw
ZXJCaW5kaW5nKQorICAgICwgbV9kZXJpdmVkQ29udGV4dFR5cGUoY2FjaGVkRXhlY3V0YWJsZS5k
ZXJpdmVkQ29udGV4dFR5cGUpCisKKyAgICAsIG1fbmFtZShjYWNoZWRFeGVjdXRhYmxlLm5hbWUu
ZGVjb2RlKGRlY29kZXIpKQorICAgICwgbV9lY21hTmFtZShjYWNoZWRFeGVjdXRhYmxlLmVjbWFO
YW1lLmRlY29kZShkZWNvZGVyKSkKKyAgICAsIG1faW5mZXJyZWROYW1lKGNhY2hlZEV4ZWN1dGFi
bGUuaW5mZXJyZWROYW1lLmRlY29kZShkZWNvZGVyKSkKKworICAgICwgbV9wYXJlbnRTY29wZVRE
WlZhcmlhYmxlcyhkZWNvZGVyLnZtKCkubV9jb21wYWN0VmFyaWFibGVNYXAtPmdldChwYXJlbnRT
Y29wZVREWlZhcmlhYmxlcykpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgQ2Fj
aGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2smIGNvZGVCbG9jaykKK3sK
KyAgICB0aGlzUmVnaXN0ZXIgPSBjb2RlQmxvY2subV90aGlzUmVnaXN0ZXI7CisgICAgc2NvcGVS
ZWdpc3RlciA9IGNvZGVCbG9jay5tX3Njb3BlUmVnaXN0ZXI7CisgICAgZ2xvYmFsT2JqZWN0UmVn
aXN0ZXIgPSBjb2RlQmxvY2subV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKyAgICB1c2VzRXZhbCA9
IGNvZGVCbG9jay5tX3VzZXNFdmFsOworICAgIGlzU3RyaWN0TW9kZSA9IGNvZGVCbG9jay5tX2lz
U3RyaWN0TW9kZTsKKyAgICBpc0NvbnN0cnVjdG9yID0gY29kZUJsb2NrLm1faXNDb25zdHJ1Y3Rv
cjsKKyAgICBoYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGNvZGVCbG9jay5tX2hhc0NhcHR1cmVkVmFy
aWFibGVzOworICAgIGlzQnVpbHRpbkZ1bmN0aW9uID0gY29kZUJsb2NrLm1faXNCdWlsdGluRnVu
Y3Rpb247CisgICAgc3VwZXJCaW5kaW5nID0gY29kZUJsb2NrLm1fc3VwZXJCaW5kaW5nOworICAg
IHNjcmlwdE1vZGUgPSBjb2RlQmxvY2subV9zY3JpcHRNb2RlOworICAgIGlzQXJyb3dGdW5jdGlv
bkNvbnRleHQgPSBjb2RlQmxvY2subV9pc0Fycm93RnVuY3Rpb25Db250ZXh0OworICAgIGlzQ2xh
c3NDb250ZXh0ID0gY29kZUJsb2NrLm1faXNDbGFzc0NvbnRleHQ7CisgICAgd2FzQ29tcGlsZWRX
aXRoRGVidWdnaW5nT3Bjb2RlcyA9IGNvZGVCbG9jay5tX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2lu
Z09wY29kZXM7CisgICAgY29uc3RydWN0b3JLaW5kID0gY29kZUJsb2NrLm1fY29uc3RydWN0b3JL
aW5kOworICAgIGRlcml2ZWRDb250ZXh0VHlwZSA9IGNvZGVCbG9jay5tX2Rlcml2ZWRDb250ZXh0
VHlwZTsKKyAgICBldmFsQ29udGV4dFR5cGUgPSBjb2RlQmxvY2subV9ldmFsQ29udGV4dFR5cGU7
CisgICAgaGFzVGFpbENhbGxzID0gY29kZUJsb2NrLm1faGFzVGFpbENhbGxzOworICAgIGxpbmVD
b3VudCA9IGNvZGVCbG9jay5tX2xpbmVDb3VudDsKKyAgICBlbmRDb2x1bW4gPSBjb2RlQmxvY2su
bV9lbmRDb2x1bW47CisgICAgbnVtVmFycyA9IGNvZGVCbG9jay5tX251bVZhcnM7CisgICAgbnVt
Q2FsbGVlTG9jYWxzID0gY29kZUJsb2NrLm1fbnVtQ2FsbGVlTG9jYWxzOworICAgIG51bVBhcmFt
ZXRlcnMgPSBjb2RlQmxvY2subV9udW1QYXJhbWV0ZXJzOworICAgIGZlYXR1cmVzID0gY29kZUJs
b2NrLm1fZmVhdHVyZXM7CisgICAgcGFyc2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOwor
ICAgIGNvZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5cGU7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGktLTspCisgICAgICAgIGxpbmtUaW1lQ29uc3Rh
bnRzW2ldID0gY29kZUJsb2NrLm1fbGlua1RpbWVDb25zdGFudHNbaV07CisKKyAgICBtZXRhZGF0
YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEpOworICAgIHJhcmVEYXRhLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YSk7CisKKyAgICBzb3VyY2VVUkxEaXJl
Y3RpdmUuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3NvdXJjZVVSTERpcmVjdGl2ZS5pbXBs
KCkpOworICAgIHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIGNvZGVC
bG9jay5tX3NvdXJjZVVSTERpcmVjdGl2ZS5pbXBsKCkpOworCisgICAgaW5zdHJ1Y3Rpb25zLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9pbnN0cnVjdGlvbnMuZ2V0KCkpOworICAgIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucyk7CisgICAgY29uc3RhbnRSZWdpc3RlcnMuZW5jb2RlKGVuY29k
ZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50UmVnaXN0ZXJzKTsKKyAgICBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24uZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgZXhwcmVzc2lvbkluZm8uZW5jb2RlKGVuY29k
ZXIsIGNvZGVCbG9jay5tX2V4cHJlc3Npb25JbmZvKTsKKyAgICBqdW1wVGFyZ2V0cy5lbmNvZGUo
ZW5jb2RlciwgY29kZUJsb2NrLm1fanVtcFRhcmdldHMpOworICAgIG91dE9mTGluZUp1bXBUYXJn
ZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9vdXRPZkxpbmVKdW1wVGFyZ2V0cyk7CisK
KyAgICBjb25zdGFudElkZW50aWZpZXJTZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9j
b25zdGFudElkZW50aWZpZXJTZXRzKTsKKyAgICBpZGVudGlmaWVycy5lbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrLm1faWRlbnRpZmllcnMpOworICAgIGJpdFZlY3RvcnMuZW5jb2RlKGVuY29kZXIs
IGNvZGVCbG9jay5tX2JpdFZlY3RvcnMpOworICAgIGZ1bmN0aW9uRGVjbHMuZW5jb2RlKGVuY29k
ZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRGVjbHMpOworICAgIGZ1bmN0aW9uRXhwcnMuZW5jb2Rl
KGVuY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRXhwcnMpOworfQorCitzdHJ1Y3QgQ2FjaGVk
U291cmNlQ29kZUtleSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlQ29kZUtleSwgQ2FjaGVk
U291cmNlQ29kZUtleT4geworICAgIENhY2hlZFVubGlua2VkU291cmNlQ29kZSBzb3VyY2VDb2Rl
OworICAgIENhY2hlZFN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGZsYWdzOworICAgIHVuc2ln
bmVkIGhhc2g7CisgICAgaW50IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b247CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2Rl
S2V5JiBrZXkpCisgICAgeworICAgICAgICBzb3VyY2VDb2RlLmVuY29kZShlbmNvZGVyLCBrZXku
bV9zb3VyY2VDb2RlKTsKKyAgICAgICAgbmFtZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fbmFtZSk7
CisgICAgICAgIGZsYWdzID0ga2V5Lm1fZmxhZ3MubV9mbGFnczsKKyAgICAgICAgaGFzaCA9IGtl
eS5oYXNoKCk7CisgICAgICAgIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b24gPSBrZXkubV9mdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAg
IH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGVLZXkmIGtl
eSkgY29uc3QKKyAgICB7CisgICAgICAgIHNvdXJjZUNvZGUuZGVjb2RlKGRlY29kZXIsIGtleS5t
X3NvdXJjZUNvZGUpOworICAgICAgICBuYW1lLmRlY29kZShkZWNvZGVyLCBrZXkubV9uYW1lKTsK
KyAgICAgICAga2V5Lm1fZmxhZ3MubV9mbGFncyA9IGZsYWdzOworICAgICAgICBrZXkubV9oYXNo
ID0gaGFzaDsKKyAgICAgICAga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQ
b3NpdGlvbiA9IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb247CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorc3RydWN0
IENhY2hlRW50cnkgeworICAgIENhY2hlZFNvdXJjZUNvZGVLZXkga2V5OworICAgIENhY2hlZFB0
cjxDYWNoZWRDb2RlQmxvY2tUeXBlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4+IGNvZGVCbG9jazsK
KworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VDb2Rl
S2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBwYWlyKQorICAgIHsKKyAgICAgICAg
a2V5LmVuY29kZShlbmNvZGVyLCBwYWlyLmZpcnN0KTsKKyAgICAgICAgY29kZUJsb2NrLmVuY29k
ZShlbmNvZGVyLCBwYWlyLnNlY29uZCk7CisgICAgfQorCisgICAgc3RkOjpwYWlyPFNvdXJjZUNv
ZGVLZXksIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgU291cmNlQ29kZUtleSBkZWNvZGVkS2V5OworICAgICAgICBr
ZXkuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRLZXkpOworICAgICAgICByZXR1cm4geyBXVEZNb3Zl
KGRlY29kZWRLZXkpLCBjb2RlQmxvY2suZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSB2
b2lkIGVuY29kZUNvZGVCbG9jayhFbmNvZGVyJiBlbmNvZGVyLCBTb3VyY2VDb2RlS2V5IGtleSwg
Y29uc3QgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBhdXRvKiBlbnRyeSA9
IGVuY29kZXIudGVtcGxhdGUgbWFsbG9jPENhY2hlRW50cnk8VW5saW5rZWRDb2RlQmxvY2tUeXBl
Pj4oKTsKKyAgICBlbnRyeS0+ZW5jb2RlKGVuY29kZXIsICB7IGtleSwganNDYXN0PGNvbnN0IFVu
bGlua2VkQ29kZUJsb2NrVHlwZSo+KGNvZGVCbG9jaykgfSk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBlbmNvZGVDb2RlQmxvY2soRW5jb2RlciYgZW5jb2RlciwgU291cmNlQ29kZUtleSBrZXks
IGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8gPSBjb2RlQmxvY2stPmNsYXNzSW5mbyhlbmNvZGVyLnZtKCkpOworCisg
ICAgaWYgKGNsYXNzSW5mbyA9PSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkgewor
ICAgICAgICBlbmNvZGVDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVy
LCBrZXksIGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY2xh
c3NJbmZvID09IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKSB7CisgICAg
ICAgIGVuY29kZUNvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KGVuY29k
ZXIsIGtleSwgY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VChjbGFzc0luZm8gPT0gVW5saW5rZWRFdmFsQ29kZUJsb2NrOjppbmZvKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUu
Y3BwCmluZGV4IDQ2MDE3OTIxYTQ2ZWZjNjQxNzI1ZDBhMjM1MjUyOTAzNWFmNWYzYWQuLmMzMmQy
MDRiNmNkODk2ODE4MWNiMGQxZGYwZWFiODNlYzExODE5ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcApAQCAtNDMsNiArNDMsOSBAQCB2b2lkIENvZGVD
YWNoZU1hcDo6cHJ1bmVTbG93Q2FzZSgpCiAKICAgICB3aGlsZSAobV9zaXplID4gbV9jYXBhY2l0
eSB8fCAhY2FuUHJ1bmVRdWlja2x5KCkpIHsKICAgICAgICAgTWFwVHlwZTo6aXRlcmF0b3IgaXQg
PSBtX21hcC5iZWdpbigpOworCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKCppdC0+dmFsdWUuY2Vs
bC0+dm0oKSwgaXQtPmtleSwgaXQtPnZhbHVlKTsKKwogICAgICAgICBtX3NpemUgLT0gaXQtPmtl
eS5sZW5ndGgoKTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKICAgICB9CkBAIC01OSw5ICs2
Miw4IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUCiAgICAgICAgIHZtLnR5cGVQcm9maWxlcigp
ID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAog
ICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5h
YmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAgICBXVEY6
Om51bGxvcHQpOwotICAgIFNvdXJjZUNvZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmlu
ZENhY2hlQW5kVXBkYXRlQWdlKGtleSk7Ci0gICAgaWYgKGNhY2hlICYmIE9wdGlvbnM6OnVzZUNv
ZGVDYWNoZSgpKSB7Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2Rl
QmxvY2sgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY2FjaGUtPmNlbGwuZ2V0KCkp
OworICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3NvdXJj
ZUNvZGUuZmluZENhY2hlQW5kVXBkYXRlQWdlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtl
eSk7CisgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5saW5l
Q291bnQoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZENvZGVCbG9j
ay0+c3RhcnRDb2x1bW4oKSArIHNvdXJjZS5zdGFydENvbHVtbigpLm9uZUJhc2VkSW50KCk7CiAg
ICAgICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9ICFsaW5lQ291bnQ7CkBAIC03MSw5
ICs3Myw5IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEds
b2JhbENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUCiAgICAgICAgIHNvdXJjZS5wcm92aWRl
cigpLT5zZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKHVubGlua2VkQ29kZUJsb2NrLT5zb3Vy
Y2VNYXBwaW5nVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxv
Y2s7CiAgICAgfQotICAgIAorCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJsZXNVbmRl
clREWjsKLSAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZ2Vu
ZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4ZWN1dGFibGVU
eXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1
Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7Cisg
ICAgdW5saW5rZWRDb2RlQmxvY2sgPSBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2Vk
Q29kZUJsb2NrVHlwZSwgRXhlY3V0YWJsZVR5cGU+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0
cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlw
ZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKIAogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jayAmJiBP
cHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgbV9zb3VyY2VDb2RlLmFkZENhY2hlKGtl
eSwgU291cmNlQ29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgbV9zb3VyY2VDb2RlLmFn
ZSgpKSk7CkBAIC0xMTAsOSArMTEyLDggQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENv
ZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHYKICAgICAg
ICAgdm0udHlwZVByb2ZpbGVyKCkgPyBUeXBlUHJvZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJv
ZmlsZXJFbmFibGVkOjpObywgCiAgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENv
bnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxl
ZDo6Tm8sCiAgICAgICAgIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24p
OwotICAgIFNvdXJjZUNvZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5k
VXBkYXRlQWdlKGtleSk7Ci0gICAgaWYgKGNhY2hlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgp
KSB7Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganND
YXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FjaGUtPmNlbGwuZ2V0KCkpOworICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV9zb3VyY2VDb2RlLmZp
bmRDYWNoZUFuZFVwZGF0ZUFnZTxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGtleSk7
CisgICAgaWYgKGV4ZWN1dGFibGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpIHsKICAgICAg
ICAgc291cmNlLnByb3ZpZGVyKCktPnNldFNvdXJjZVVSTERpcmVjdGl2ZShleGVjdXRhYmxlLT5z
b3VyY2VVUkxEaXJlY3RpdmUoKSk7CiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3Vy
Y2VNYXBwaW5nVVJMRGlyZWN0aXZlKGV4ZWN1dGFibGUtPnNvdXJjZU1hcHBpbmdVUkxEaXJlY3Rp
dmUoKSk7CiAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwpAQCAtMTU1LDQgKzE1NiwxMCBAQCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1
bmN0aW9uRXhlY3V0YWJsZShWTSYgdgogICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7CiB9
CiAKK3ZvaWQgQ29kZUNhY2hlOjp3cml0ZShWTSYgdm0pCit7CisgICAgZm9yIChjb25zdCBhdXRv
JiBpdCA6IG1fc291cmNlQ29kZSkKKyAgICAgICAgd3JpdGVDb2RlQmxvY2sodm0sIGl0LmtleSwg
aXQudmFsdWUpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNo
ZS5oCmluZGV4IDhhNDQxOWY5NmNhOGZhNGE2MjliZTBlOWE3ODI3Y2JhZjY4Y2ZmODYuLmY4YTU3
ZDI2YTFmZjg3ZmZkNDkwZWNiMmMwNWQ3ZTQyYTEyY2NhNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQ2FjaGVkVHlwZXMu
aCIKICNpbmNsdWRlICJFeGVjdXRhYmxlSW5mby5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJQYXJzZXIuaCIKQEAgLTM3LDYgKzM4LDcgQEAKICNpbmNsdWRlICJVbmxpbmtl
ZEV2YWxDb2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaCIKICNpbmNsdWRlICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlIDxz
eXMvc3RhdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKQEAgLTg5LDEzICs5MSw4MiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
IAotICAgIFNvdXJjZUNvZGVWYWx1ZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKGNvbnN0IFNvdXJj
ZUNvZGVLZXkmIGtleSkKKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJlZ2lu
KCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorICAgIFVubGlua2VkQ29k
ZUJsb2NrVHlwZSogZmV0Y2hGcm9tRGlza0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5
JiBrZXkpCisgICAgeworI2lmIE9TKERBUldJTikKKyAgICAgICAgY29uc3QgY2hhciogY2FjaGVQ
YXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOworICAgICAgICBpZiAoIWNhY2hlUGF0aCkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBr
ZXkuaGFzaCgpOworICAgICAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisgICAgICAgIGludCBjb3Vu
dCA9IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFz
aCk7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05M
WSk7CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX1NIIHwgTE9DS19OQik7CisgICAgICAg
IGlmIChyYykgeworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICAgICAgaW50
IHJlcyA9IGZzdGF0KGZkLCAmc2IpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0
PHNpemVfdD4oc2Iuc3Rfc2l6ZSk7CisgICAgICAgIGlmIChyZXMgfHwgIXNpemUpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIgPSBtbWFw
KG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAgICAg
Y29uc3QgYXV0byogY2FjaGVkQ29kZUJsb2NrID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDYWNo
ZUVudHJ5PFVubGlua2VkQ29kZUJsb2NrVHlwZT4qPihidWZmZXIpOworICAgICAgICBEZWNvZGVy
IGRlY29kZXIodm0sIGNhY2hlZENvZGVCbG9jaywgc2l6ZSk7CisgICAgICAgIHN0ZDo6cGFpcjxT
b3VyY2VDb2RlS2V5LCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBlbnRyeTsKKyAgICAgICAgewor
ICAgICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICAgICAgZW50cnkg
PSBjYWNoZWRDb2RlQmxvY2stPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChlbnRyeS5maXJzdCAhPSBrZXkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICBhZGRDYWNoZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2bSwgZW50cnkuc2Vjb25kLCBt
X2FnZSkpOworICAgICAgICByZXR1cm4gZW50cnkuc2Vjb25kOworI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHZtKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworI2VuZGlmCisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlPgorICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPFVu
bGlua2VkQ29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp2YWx1ZSAmJiAhc3RkOjpp
c19zYW1lPFVubGlua2VkQ29kZUJsb2NrVHlwZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFs
dWUsIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+CisgICAgZmV0Y2hGcm9tRGlzayhWTSYgdm0sIGNv
bnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKKyAgICB7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrID0gZmV0Y2hGcm9tRGlza0ltcGw8VW5saW5rZWRDb2RlQmxvY2tUeXBl
Pih2bSwga2V5KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlRGlza0NhY2hl
KCkpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIGNvZGVCbG9jazsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVCbG9jaywgVD46OnZh
bHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s+Ojp2YWx1ZSwgVCo+
CisgICAgZmV0Y2hGcm9tRGlzayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmKSB7IHJldHVybiBu
dWxscHRyOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+
CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBmaW5kQ2FjaGVBbmRVcGRhdGVBZ2UoVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCiAgICAgewogICAgICAgICBwcnVuZSgpOwogCiAg
ICAgICAgIGl0ZXJhdG9yIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAgIGlm
IChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICByZXR1cm4gZmV0Y2hGcm9tRGlzazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+
KHZtLCBrZXkpOwogCiAgICAgICAgIGludDY0X3QgYWdlID0gbV9hZ2UgLSBmaW5kUmVzdWx0LT52
YWx1ZS5hZ2U7CiAgICAgICAgIGlmIChhZ2UgPiBtX2NhcGFjaXR5KSB7CkBAIC0xMTUsNyArMTg2
LDcgQEAgcHVibGljOgogICAgICAgICBmaW5kUmVzdWx0LT52YWx1ZS5hZ2UgPSBtX2FnZTsKICAg
ICAgICAgbV9hZ2UgKz0ga2V5Lmxlbmd0aCgpOwogCi0gICAgICAgIHJldHVybiAmZmluZFJlc3Vs
dC0+dmFsdWU7CisgICAgICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4o
ZmluZFJlc3VsdC0+dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAgfQogCiAgICAgQWRkUmVzdWx0IGFk
ZENhY2hlKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNlQ29kZVZhbHVlJiB2
YWx1ZSkKQEAgLTE5Nyw2ICsyNjgsNyBAQCBwdWJsaWM6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFNvdXJjZUNvZGUmLCBEZWJ1Z2dlck1vZGUsIE9wdGlvbmFsPGlu
dD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgUGFyc2VyRXJyb3Im
KTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fc291cmNlQ29kZS5jbGVhcigpOyB9CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZShWTSYpOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRl
IDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBlPiAKQEAg
LTI1Niw0ICszMjgsMzcgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZW5lcmF0ZVVubGlua2Vk
Q29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGEKICAgICByZXR1cm4gdW5s
aW5rZWRDb2RlQmxvY2s7CiB9CiAKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgd3JpdGVDb2Rl
QmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVW
YWx1ZSYgdmFsdWUpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0
aCA9IE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0g
anNEeW5hbWljQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsK
KyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgaGFz
aCA9IGtleS5oYXNoKCk7CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGludCBjb3VudCA9
IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7
CisgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgRW5jb2RlciBlbmNvZGVyKHZtKTsKKyAgICBlbmNvZGVDb2RlQmxvY2soZW5jb2Rlciwga2V5
LCBjb2RlQmxvY2spOworCisgICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9f
V1JPTkxZLCAwNjY2KTsKKyAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIp
OworICAgIGlmICghcmMpCisgICAgICAgIDo6d3JpdGUoZmQsIGVuY29kZXIuYnVmZmVyKCksIGVu
Y29kZXIuc2l6ZSgpKTsKKyAgICBjbG9zZShmZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2
bSk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNl
bmRpZgorfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IGNhNTMxNjM2Yjc4MWU4NjllYTc4Zjc2ZDI1YjVlNGFl
YWQ0MTYxODUuLjJiY2FhOWI2NzYyZDI1MmYwYjMxZWUxYTg5NDljZGQ4Mzc0NjgwMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKQEAgLTE2ODgsMTEgKzE2
ODgsNiBAQCBib29sIEpTQmlnSW50OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiBleGVj
LCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdQogICAgIHJldHVybiB0cnVlOwogfQogCi1p
bmxpbmUgc2l6ZV90IEpTQmlnSW50OjpvZmZzZXRPZkRhdGEoKQotewotICAgIHJldHVybiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpTQmlnSW50KSk7Ci19
Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEpTQmlnSW50KiBKU0JpZ0ludDo6cGFy
c2VJbnQoRXhlY1N0YXRlKiBleGVjLCBDaGFyVHlwZSogIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwg
RXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUpCiB7CkBAIC0xNzk1LDExICsxNzkwLDYgQEAg
SlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgQ2hh
clR5cGUqIGRhdGEsIHVuc2lnbmVkIGwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotaW5saW5l
IEpTQmlnSW50OjpEaWdpdCogSlNCaWdJbnQ6OmRhdGFTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZEYXRhKCkpOwotfQotCiBpbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0IEpTQmlnSW50Ojpk
aWdpdCh1bnNpZ25lZCBuKQogewogICAgIEFTU0VSVChuIDwgbGVuZ3RoKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5kZXggMmIzYmY5MzA3ZDhkYmJiMTEwNzUz
M2VkODMwMzQ3YmNkZDRhNjEwYi4uZTJhNjU3ODEwNzE3Mjk0YTk0ZjgxNzg0YTJlNzFjNDhhOGFk
NWIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCkBAIC0zOCw2
ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJ
bW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZEJpZ0lu
dDsKIAogcHVibGljOgogCkBAIC0yMjgsOCArMjI5LDE1IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpTQmlnSW50KiB4KTsKIAogICAgIHN0YXRp
YyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mRGF0YSgpOwotICAgIERpZ2l0KiBkYXRhU3RvcmFnZSgpOworICAgIGlubGlu
ZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+KHNpemVvZihKU0JpZ0ludCkpOwor
ICAgIH0KKworICAgIGlubGluZSBEaWdpdCogZGF0YVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RGlnaXQqPihyZWludGVycHJldF9jYXN0PGNoYXIqPih0
aGlzKSArIG9mZnNldE9mRGF0YSgpKTsKKyAgICB9CiAKICAgICBEaWdpdCBkaWdpdCh1bnNpZ25l
ZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1bnNpZ25lZCwgRGlnaXQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCA2NmNlYzNhZjc5ZjZhODEzZDk4YjMwNjc4
ZTdkNGZkZjg2ZWM2MTI2Li45NjJkODdlOTkyNmRhY2UzNzY2ZjU5NzNkMDk2ZDg4MjI3ZTFkZTcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTE3LDYg
KzUxNywxMiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0
aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKICNlbmRpZgorCisgICAgaWYgKCFPcHRp
b25zOjp1c2VDb2RlQ2FjaGUoKSkKKyAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0g
bnVsbHB0cjsKKworICAgIGlmICghT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpKQorICAgICAgICBP
cHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CiB9CiAKIHZvaWQgT3B0aW9uczo6aW5p
dGlhbGl6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggZTY3
ZDkzOTNlMGMyNjhmODkxN2M5ODIyOWMxYWYzNDhhZTIxZjM2MS4uNDhmNmU2MmE3YTAyYjk0MWE5
YzMxZTg4MWNhNmNiMWYyOWQyMjRiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaApAQCAtNTA4LDYgKzUwOCw4IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2Vt
Ymx5U3RyZWFtaW5nQXBpID0gZmFsc2U7CiAgICAgdihib29sLCB0cmFjZUxMSW50RXhlY3V0aW9u
LCBmYWxzZSwgQ29uZmlndXJhYmxlLCBudWxscHRyKSBcCiAgICAgdihib29sLCB0cmFjZUxMSW50
U2xvd1BhdGgsIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHRy
YWNlQmFzZWxpbmVKSVRFeGVjdXRpb24sIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2
KG9wdGlvblN0cmluZywgZGlza0NhY2hlUGF0aCwgbnVsbHB0ciwgUmVzdHJpY3RlZCwgIiIpIFwK
KyAgICB2KGJvb2wsIGZvcmNlRGlza0NhY2hlLCBmYWxzZSwgUmVzdHJpY3RlZCwgIiIpIFwKIAog
CiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwLmgKaW5kZXggODNhYWQzNTYwMzhlYjJlYzc2ZTZiOGJkMzdjNzQ3NmNlYzkxMzUyZS4uODkz
MDQ1NGE0YzIzYmE4OTg2OWVkNDY0Zjc0M2IyOWIzMmU5MDI5YSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgVk07CiBKU19FWFBP
UlRfUFJJVkFURSBSZWdFeHBGbGFncyByZWdFeHBGbGFncyhjb25zdCBTdHJpbmcmKTsKIAogY2xh
c3MgUmVnRXhwIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5kIHN0cnVjdCBDYWNo
ZWRSZWdFeHA7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCmluZGV4IDQwZTdjN2VjMmZkNjBiNTg0MmE1NzI4
NWFjOTdiMGY2YTk1OTM5NWQuLjVmNTAzNDRhMzA1Y2Q4ZjA3NzAxMzA3NGZkZTBmZGQyZWMzM2Fk
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50c1RhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzVGFibGUuaApAQCAtMzksNiArMzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIG1ha2Vz
IHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25zIGFyZSBzbyB1bmNvbW1vbi4gWW91J2Qg
aGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQogLy8gImRlbGV0ZSBhcmd1bWVudHNbaV0i
IG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9wZXJ0eS4KIGNsYXNzIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5kIHN0cnVjdCBDYWNo
ZWRTY29wZWRBcmd1bWVudHNUYWJsZTsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJh
c2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKaW5kZXggOTE1N2Q1YjgyOTIwMGZiNmE5NjVlYTNiYzc4
Njk2ZTUzMmE5MmI5NS4uMjIwZjAzN2JiMWUwMWE4MDlhMWQ3YWViMTk5MjBlZjdhYjM1YzI1NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCkBAIC03Myw2
ICs3Myw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkg
eyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+CiAvLyBjb3B5OiAgICAgU3ltYm9sVGFi
bGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsK
KyAgICBmcmllbmQgc3RydWN0IENhY2hlZFN5bWJvbFRhYmxlRW50cnk7CisKIHByaXZhdGU6CiAg
ICAgc3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQogICAg
IHsKQEAgLTQzNiw2ICs0MzgsOCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHMg
OiBIYXNoVHJhaXRzPFN5bWJvbFRhYmxlRW50cnk+IHsKIH07CiAKIGNsYXNzIFN5bWJvbFRhYmxl
IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRTeW1ib2xU
YWJsZTsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAppbmRleCA3NTVjZDdhOWFhNTc2YzZmN2E0ZGIx
NGMwZDllMzAyYzc4ZGI1MTc4Li40MWQ5NzIyZTVmMzc0MDQ5YzI0OGM1Y2ViYjgyNjc4YTA1MzRj
YTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9CaXRWZWN0b3IuaApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKK25hbWVzcGFjZSBK
U0Mgeworc3RydWN0IENhY2hlZEJpdFZlY3RvcjsKK30KKwogbmFtZXNwYWNlIFdURiB7CiAKIC8v
IFRoaXMgaXMgYSBzcGFjZS1lZmZpY2llbnQsIHJlc2l6ZWFibGUgYml0dmVjdG9yIGNsYXNzLiBJ
biB0aGUgY29tbW9uIGNhc2UgaXQKQEAgLTMzOCw2ICszNDIsOCBAQCBwdWJsaWM6CiAgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KICAg
ICAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpDYWNoZWRCaXRWZWN0b3I7
CisKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigpCiAgICAgewogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKHZvaWQqKSA8PCAzOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ5MGEwZWE4NmU0ZDhiZWU0NGRmYzgwYmZhMDRhZmJiYWQw
NzYxYzguLjI4Nzg5NzA1OGY5MGFmOGYzMmJjM2E3NWU3YzI5NmQwNWI1MDRlYzggMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBA
QAorMjAxOC0xMi0yNyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBDYWNoZSBieXRlY29kZSB0byBkaXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MDg0
OTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCB0ZXN0IGhlbHBlciB0byBleGVjdXRlIGJ5dGVjb2RlLWNhY2hlIHRlc3RzOiBpdCBleGVjdXRl
cyBlYWNoIHRlc3QKKyAgICAgICAgdHdpY2UsIHRoZSBmaXJzdCB3aXRoIEpTQ19kaXNrQ2FjaGVQ
YXRoIHNldCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICAgICAgYW5kIHNlY29uZCB3aXRo
IEpTQ19mb3JjZURpc2tDYWNoZT10cnVlIChpbiBhZGRpdGlvbiB0byB0aGUgY2FjaGUgcGF0aCkK
KyAgICAgICAgdG8gZ3VhcmFudGVlIHRoYXQgb25seSB0aGUgZGlzayBjYWNoZSBpcyBiZWluZyB1
c2VkIGFuZCBubyBuZXcKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tzIGFyZSBiZWluZyBjcmVh
dGVkLgorCisgICAgICAgICogU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29k
ZS1jYWNoZS10ZXN0LWhlbHBlcjogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0czoKKwogMjAxOS0wMS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhvbW9ncmFwaCB3aXRoIExBVElOIFNNQUxMIExFVFRF
UiBSIFdJVEggRklTSEhPT0sKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvanNjLXN0cmVzcy10
ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIgYi9Ub29scy9TY3JpcHRzL2pz
Yy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM4YzkyOTIxZGI4ZDRkZDI1MDI3NDQwYzZjZjRmZDFmOWZhZjdlODgKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNh
Y2hlLXRlc3QtaGVscGVyCkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKwor
IyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICdydWJ5Z2VtcycKK3JlcXVp
cmUgJ2ZpbGV1dGlscycKK3JlcXVpcmUgJ2pzb24nCityZXF1aXJlICdzaGVsbHdvcmRzJworcmVx
dWlyZSAndG1wZGlyJworCitkZWYgbXlzeXMoKmNtZCkKKyAgICByYWlzZSAiQ29tbWFuZCAje2Nt
ZC5pbnNwZWN0fSBmYWlsZWQ6ICN7JD8uaW5zcGVjdH0iIHVubGVzcyBzeXN0ZW0oKmNtZCkKK2Vu
ZAorCitwYXRoVG9WTSA9IEFSR1ZbMF0KK2lucHV0RmlsZSA9IEFSR1ZbMV0KK2V4dHJhT3B0aW9u
cyA9IEFSR1ZbMi4uLTFdCitkaXNrQ2FjaGVQYXRoID0gRGlyLm1rdG1wZGlyIFtpbnB1dEZpbGUs
ICdieXRlY29kZS1jYWNoZSddCisKK2JlZ2luCisgICAgRU5WWyJKU0NfZGlza0NhY2hlUGF0aCJd
ID0gZGlza0NhY2hlUGF0aAorICAgIG15c3lzKHBhdGhUb1ZNLCBpbnB1dEZpbGUsICpleHRyYU9w
dGlvbnMpCisgICAgRU5WWyJKU0NfZm9yY2VEaXNrQ2FjaGUiXSA9ICJ0cnVlIgorICAgIG15c3lz
KHBhdGhUb1ZNLCBpbnB1dEZpbGUsICpleHRyYU9wdGlvbnMpCitlbnN1cmUKKyAgICBGaWxlVXRp
bHMucm1fcmYoZGlza0NhY2hlUGF0aCkKK2VuZApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMK
aW5kZXggMzVhOWViMWM1NWUxMDJiNTJkZDQ1NTcwMjNkOTJkMTYwM2UwYzVhMS4uM2FmNGU4YzU4
ZWM4ZmQyNGU1NTMzMGIxNGU0ZjNmMzA1NmMyYTM5YiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCkBAIC02NTUsNiArNjU1LDE1IEBAIGRlZiBydW5EZWZhdWx0KCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCiAgICAgcnVuKCJkZWZhdWx0IiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAorZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKKyAgICB1bmxlc3MgJGhvc3RPUyA9PSAiZGFyd2lu
IgorICAgICAgICBza2lwCisgICAgICAgIHJldHVybgorICAgIGVuZAorICAgIG9wdGlvbnMgPSBC
QVNFX09QVElPTlMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zICsgRlRMX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMKKyAgICBhZGRSdW5Db21tYW5kKCJieXRlY29k
ZS1jYWNoZSIsIFsicnVieSIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3Qt
aGVscGVyIikudG9fcywgcGF0aFRvVk0udG9fcywgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMs
IHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlcikKK2VuZAorCiBkZWYgcnVu
QmlnSW50RW5hYmxlZCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgICMgRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS80MDMzMTEyMT4KICAgICBpZiAkcmVtb3RlIG9yICgkYXJjaGl0ZWN0
dXJlICF+IC94ODYvaSBhbmQgJGhvc3RPUyA9PSAiZGFyd2luIikKQEAgLTc1MSw2ICs3NjAsNyBA
QCBkZWYgZGVmYXVsdFJ1bgogICAgICAgICBkZWZhdWx0UXVpY2tSdW4KICAgICBlbHNlCiAgICAg
ICAgIHJ1bkRlZmF1bHQKKyAgICAgICAgcnVuQnl0ZWNvZGVDYWNoZQogICAgICAgICBpZiAkaml0
VGVzdHMKICAgICAgICAgICAgIHJ1bk5vTExJbnQKICAgICAgICAgICAgIHJ1bk5vQ0pJVFZhbGlk
YXRlUGhhc2VzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358507</attachid>
            <date>2019-01-07 10:16:12 -0800</date>
            <delta_ts>2019-01-08 08:30:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190107191604.patch</filename>
            <type>text/plain</type>
            <size>124004</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5Njc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZjQ2MDg5YTg1MGJkYzJhNDIwNmI1NTNkMGI1MjJlNWIxNmQ1ZWQ3Li5hNGVhZWI4YTFlMDdlYTIz
NjNhYTAwODQ1ODdkNWU5ZWMyN2JhNzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTkgQEAKKzIwMTktMDEtMDcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLiBBbHNvLCBkdXJpbmcgZGVjb2RpbmcsIHRoZSBjYWNoZWQgb2JqZWN0cworICAg
ICAgICBhcmUgbW1hcCdkIGZyb20gZGlzaywgYnV0IG9ubHkgdXNlZCBmb3IgY3JlYXRpbmcgaW5z
dGFuY2VzIG9mIHRoZSByZXNwZWN0aXZlCisgICAgICAgIGluLW1lbW9yeSB2ZXJzaW9uIG9mIGVh
Y2ggb2JqZWN0LiBJZGVhbGx5LCB0aGUgbW1hcCdkIG9iamVjdHMgc2hvdWxkIGJlIHVzZWQKKyAg
ICAgICAgYXQgcnVudGltZSBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMuY3BwOgorICAgICAgICAoSlNDOjpCdWlsdGlu
TmFtZXM6OkJ1aWx0aW5OYW1lcyk6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAg
ICAgIChKU0M6OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlckluZm8pOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmg6CisgICAgICAgICogYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFk
ZFNldENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50
SWRlbnRpZmllclNldHMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9j
ay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAq
IGJ5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAg
ICAocnVuSlNDKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZS5oOgorICAgICAgICAqIHBh
cnNlci9Tb3VyY2VDb2RlS2V5Lmg6CisgICAgICAgIChKU0M6OlNvdXJjZUNvZGVLZXk6Om9wZXJh
dG9yIT0gY29uc3QpOgorICAgICAgICAqIHBhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoKKyAg
ICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6RW5jb2Rlcik6
CisgICAgICAgIChKU0M6OkVuY29kZXI6On5FbmNvZGVyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rl
cjo6dm0pOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjptYWxsb2NPZmZzZXQpOgorICAgICAgICAo
SlNDOjpFbmNvZGVyOjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZzZXRPZik6
CisgICAgICAgIChKU0M6OkVuY29kZXI6OmNhY2hlUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rl
cjo6b2Zmc2V0Rm9yUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6OkRlY29kZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjp+RGVj
b2Rlcik6CisgICAgICAgIChKU0M6OkRlY29kZXI6OnZtKToKKyAgICAgICAgKEpTQzo6RGVjb2Rl
cjo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpjYWNoZU9mZnNldCk6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6OmFkZEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OmRlY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE9iamVjdDo6c2l6
ZU9mKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkT2JqZWN0OjpjYXN0KToKKyAgICAgICAgKEpTQzo6
VmFyaWFibGVMZW5ndGhPYmplY3Q6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgIChKU0M6OlZhcmlh
YmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9i
amVjdDo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFB0cjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UHRyOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpvcGVyYXRvci0+IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjplbmNvZGUpOgorICAgICAgICAoSlND
OjpDYWNoZWRSZWZQdHI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFdyaXRl
QmFycmllcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkV3JpdGVCYXJyaWVyOjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmVuY29kZSk6CisgICAgICAg
IChKU0M6OkNhY2hlZFZlY3Rvcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UGFpcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUGFpcjo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaE1hcDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkSGFzaE1hcDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5pcXVlZFN0
cmluZ0ltcGw6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBs
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdJbXBsOjplbmNvZGUp
OgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdJbXBsOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRTdHJpbmc6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmlu
Zzo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSWRlbnRpZmllcjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSWRlbnRpZmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkT3B0aW9uYWw6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE9w
dGlvbmFsOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVj
b2RlQXNQdHIgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFibGU6OmVu
Y29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNpbXBsZUp1bXBUYWJsZTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRTdHJpbmdKdW1wVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZFJhcmVEYXRhOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRSYXJlRGF0
YTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQml0VmVjdG9yOjplbmNvZGUp
OgorICAgICAgICAoSlNDOjpDYWNoZWRCaXRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZEhhc2hTZXQ6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hT
ZXQ6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmll
clNldEVudHJ5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb25zdGFudElkZW50aWZp
ZXJTZXRFbnRyeTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmFyaWFibGVF
bnZpcm9ubWVudDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmFyaWFibGVFbnZpcm9u
bWVudDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQXJyYXk6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZEFycmF5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU2NvcGVkQXJndW1lbnRzVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZFN5bWJvbFRhYmxlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN5bWJv
bFRhYmxlRW50cnk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN5bWJvbFRh
YmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZTo6ZGVjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5OjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHk6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UmVnRXhwOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3I6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFRlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQmlnSW50Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZEpTVmFsdWU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEpT
VmFsdWU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEluc3RydWN0aW9uU3Ry
ZWFtOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZGVj
b2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkTWV0YWRhdGFUYWJsZTo6ZW5jb2RlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkTWV0YWRhdGFUYWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRTb3VyY2VPcmlnaW46OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFRleHRQ
b3NpdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVGV4dFBvc2l0aW9uOjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlOjplbmNv
ZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI6OmRlY29kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRlcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU6OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRT
b3VyY2VDb2RlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29k
ZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOjpk
ZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRNb2R1bGVDb2RlQmxvY2s6OmVuY29k
ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1vZHVsZUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkRXZhbENvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkRXZhbENvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkRnVuY3Rpb25Db2RlQmxvY2s6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0
aW9uQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrOjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrVHlwZT46OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2Vk
RXZhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2tUeXBl
Pjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZUtleTo6ZW5jb2RlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZUtleTo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVFbnRyeTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVFbnRyeTo6
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6ZW5jb2RlQ29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlQ29kZUJsb2NrSW1wbCk6CisgICAgICAgICog
cnVudGltZS9DYWNoZWRUeXBlcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaC4KKyAgICAgICAgKEpTQzo6ZGVjb2Rl
Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVDYWNoZU1hcDo6cHJ1bmVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVDYWNo
ZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUNhY2hlOjp3cml0ZSk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuaDoKKyAgICAgICAg
KEpTQzo6Q29kZUNhY2hlTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6
ZW5kKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlTWFwOjpmZXRjaEZyb21EaXNrSW1wbCk6Cisg
ICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmluZENhY2hlQW5kVXBkYXRlQWdlKToKKyAgICAg
ICAgKEpTQzo6d3JpdGVDb2RlQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3Bw
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6b2Zmc2V0T2ZEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6OmRhdGFTdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1Nj
b3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmg6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9T
eW1ib2xUYWJsZS5oOgorCiAyMDE5LTAxLTA0ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEJhc2VsaW5lIHZlcnNpb24gb2YgZ2V0X2J5X2lkIG1heSBjb3Jy
dXB0IG1ldGFkYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDlkZTBjNmIxMjFjODQxMjJkMmZlM2MwZGJjYjcxNTQyYjc5ZTBi
YTguLjRhNzgzNWRmZDcxZDRlZjQyNmM4YmIzOGE5NWQwM2JhNjQ4MDI2ZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTktMDEtMDcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBCaXRWZWN0b3JzIGhhdmUgdG8gYmUgZnJpZW5kcyB3aXRoIEpTQzo6Q2FjaGVCaXRWZWN0
b3IgdG8gYWxsb3cKKyAgICAgICAgc2VyaWFsaXppbmcgaXRzIGJ1ZmZlciBhcyBwYXJ0IG9mIHRo
ZSBieXRlY29kZSBjYWNoZSBlbmNvZGluZy4KKworICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoK
KwogMjAxOS0wMS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEhvbW9ncmFwaCB3aXRoIExBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRklT
SEhPT0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDJjMzUyZjEwYTI3MDgyZjU4
ZTMzOGQ5NmU1YjJlYzU1ZTcwOWY2Ni4uZTdhNDA3OWIxYTc0MDI1ODk5YTgwNWQ0YzkzOTI4ZDEz
YjAyOWZmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMxNDAsNiArMzE0MCw3
IEBACiAJCTE0Mzg2QTczMURENjk4OTUwMDg2NTJDNCAvKiBEaXJlY3RFdmFsRXhlY3V0YWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RFdmFsRXhlY3V0YWJsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NjFERDY5ODlDMDA4NjUyQzQg
LyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQzODZBNzcxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kaXJlY3RFdmFsRXhl
Y3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDNCRTI2NTIxQzg1Nzc3
MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MDA1MUYw
QTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTm9kZS5oOyBwYXRoID0gdGVzdHMvTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDQwMDUyMDBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5jICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmM7IG5hbWUgPSBOb2RlLmM7IHBhdGggPSB0ZXN0cy9Ob2RlLmM7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNzQ4MEE1MzZDQzIwMDA1RjA2MSAvKiBOb2RlTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlTGlzdC5oOyBwYXRoID0gdGVz
dHMvTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyNTQsNiArMzI1
NSw3IEBACiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9IEFQSS90
ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RTBE
OTlGRDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTREQTgxOEYwRDk5RkQyMDAwQjBBNEZCIC8qIEpTTGV4aWNhbEVudmly
b25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTGV4aWNh
bEVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREQUZBNDUy
MUUzQjg3MTAwNEI2OEY3IC8qIENhY2hlZFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENhY2hlZFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0EyIC8qIEpTR2xvYmFsT2JqZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBKU0dsb2Jh
bE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0
aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcuY3BwOyB9OwogCQkxNERGMDREOTE2QjM5OTZEMDAx
NkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0Jsb2NrLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1ODMsNiArNjU4NSw4IEBACiAJCQkJOUU3Mjk0MDkxOTBG
MDMwNjAwMUE5MUI1IC8qIEJ1bmRsZVBhdGgubW0gKi8sCiAJCQkJMEZCN0YzOEIxNUVEOEUzODAw
RjE2N0IyIC8qIEJ1dHRlcmZseS5oICovLAogCQkJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAv
KiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCisJCQkJMTREQUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8q
IENhY2hlZFR5cGVzLmNwcCAqLywKKwkJCQkxNDNCRTI2NTIxQzg1Nzc3MDAyMENEMTcgLyogQ2Fj
aGVkVHlwZXMuaCAqLywKIAkJCQkwRkVDM0M1RjFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggKi8sCiAJCQkJQkNBNjJERkUwRTI4MjYyMzAwMDRGMzBEIC8qIENhbGxEYXRhLmNw
cCAqLywKIAkJCQkxNDVDNTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBjYmE0YzRiYTYwMDRmOTMwZDVjYTg1NjMzMTBh
NjI0M2UzNjQ0OWU1Li41ZTNlNzk3M2FjODA1YzBiYzIzZTI5YmM5ZjJjODZmNjYwMWM2YzJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC03MTAsNiArNzEwLDcgQEAgcnVudGltZS9C
b29sZWFuQ29uc3RydWN0b3IuY3BwCiBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwCiBydW50aW1l
L0Jvb2xlYW5Qcm90b3R5cGUuY3BwCiBydW50aW1lL0NhbGxEYXRhLmNwcAorcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAKIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKIHJ1bnRpbWUvQ2xhc3NJbmZvLmNw
cAogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDQ1ZGU4MmU3Y2I1OGEyODNiMjBmY2Fl
NTk4MmJiYjVjMDRkYTkxNzUuLmEwZjg1M2E2ZTA1ZGM0NjE4ZmYwNGRlNTkwMTliMWVhMTNkNmIz
N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMu
Y3BwCkBAIC02Myw2ICs2Myw3IEBAIEJ1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZNKiB2bSwg
Q29tbW9uSWRlbnRpZmllcnMqIGNvbW1vbklkZW50aWZpZXJzKQogICAgIEpTQ19DT01NT05fUFJJ
VkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QUklWQVRFX1RP
X1BVQkxJQ19FTlRSWSkKICAgICBKU0NfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoSU5J
VElBTElaRV9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVf
SURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFVCTElDX1RPX1BSSVZB
VEVfRU5UUlkpCisgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfV0VMTF9L
Tk9XTl9TWU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFJJVkFURV9UT19QVUJMSUNfRU5UUlkpCiAg
ICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9TWU1CT0wo
SU5JVElBTElaRV9TWU1CT0xfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgbV9wcml2YXRl
VG9QdWJsaWNNYXAuYWRkKG1fZG9sbGFyVk1Qcml2YXRlTmFtZS5pbXBsKCksICZtX2RvbGxhclZN
TmFtZSk7CiAgICAgbV9wdWJsaWNUb1ByaXZhdGVNYXAuYWRkKG1fZG9sbGFyVk1OYW1lLmltcGwo
KSwgJm1fZG9sbGFyVk1Qcml2YXRlTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVp
bHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggZjY2YjhjYjUxZWI0MDJkODczNmZkN2RkMGQyZDBl
N2EyOTJmNDUxMi4uODUzMWRiMjYwYmQwNzAxYjM3MTkwMWI2NzRiZmY1ZGYwYmZiZDg3NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaApAQCAtMjEz
LDYgKzIxMyw3IEBAIGV4dGVybiBTeW1ib2xJbXBsOjpTdGF0aWNTeW1ib2xJbXBsIHBvbHlQcm90
b1ByaXZhdGVOYW1lOwogLy8gV2UgY29tbWFuZGVlciB0aGUgcHVibGljVG9Qcml2YXRlTWFwIHRv
IGFsbG93IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1ib2wgbmFtZXMgaW50byB0aGUgYXBwcm9w
cmlhdGUgc3ltYm9sLgogLy8gZS5nLiBAaXRlcmF0b3JTeW1ib2wgcG9pbnRzIHRvIFN5bWJvbC5p
dGVyYXRvciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0byBhIGFuIGFjdHVhbCBwcml2YXRlIG5h
bWUuCiAvLyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhhY2sgYW5kIHdlIHNob3VsZG4ndCBuZWVk
IHRvIGRvIHRoaXMuCisjZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9fUFVCTElD
X0VOVFJZKG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sLmlt
cGwoKSwgJm1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllcik7CiAjZGVmaW5lIElOSVRJ
QUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKG5hbWUpIG1fcHVibGljVG9Qcml2
YXRlTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIuaW1wbCgpLCAmbV8j
I25hbWUjI1N5bWJvbCk7CiAKIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDg2ZGI4NjkzZjYwZTc3M2I2MWJh
MzczNThjYTNlZTkzN2RjMGYzNWQuLjNiMDNiNGZiNTBjMDQxOWRkNzk2Y2U4ZTI1MDBiYzFkODhh
NzFjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CkBAIC04NjQsNyArODY0LDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0
UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRy
eT4mIGNvbnN0YW50cykKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRS
ZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+
JiBjb25zdGFudHMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA2Yzc2
NmE4YWIyMjlkYjBmNjgzZTY2YzA2YjdkNWM1MGI4ZTgxMjE3Li5iNzlmOTBmNGI3YmUzMGJhYmVj
OWE5ODcxOGZkZDc0MDJhYzM3YWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCkBAIC04ODYsNyArODg2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBk
YXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVO
b25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2Zp
bGVzKTsKIAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwg
Y29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7Cisg
ICAgdm9pZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBWZWN0
b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwogCiAgICAgdm9pZCBz
ZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSGFuZGxlckluZm8uaAppbmRleCA2NmMzYjc2ODc3NTYyMDc3NmQyNjNmZjA5OGRl
NmY0NmI2NmU3NzgzLi43ZjQ2NWQyYWU5Mzc5OWI5MWRmNzg3MTQxOTRmY2EzNGJkMmExYTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaApAQCAtODks
NiArODksMTAgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiB9OwogCiBzdHJ1Y3QgVW5saW5r
ZWRIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIFVubGlua2VkSGFu
ZGxlckluZm8oKQorICAgIHsKKyAgICB9CisKICAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKHVpbnQz
Ml90IHN0YXJ0LCB1aW50MzJfdCBlbmQsIHVpbnQzMl90IHRhcmdldCwgSGFuZGxlclR5cGUgaGFu
ZGxlclR5cGUpCiAgICAgewogICAgICAgICB0aGlzLT5zdGFydCA9IHN0YXJ0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAppbmRleCA3
MGVkZTNlNDFjNWQ1YzQ4OWQ3OTZmY2ZjMGMxY2NkOTk4ZDI5ZWQ1Li5kOTMxNTRiYzZiNWMzNmQ0
YTg0OTcxMjUyZDA2MzJlNDQwZDRhZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBJ
bnN0cnVjdGlvblN0cmVhbSB7CiAgICAgdXNpbmcgSW5zdHJ1Y3Rpb25CdWZmZXIgPSBWZWN0b3I8
dWludDhfdCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+OwogCiAgICAgZnJpZW5kIGNsYXNzIElu
c3RydWN0aW9uU3RyZWFtV3JpdGVyOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkSW5zdHJ1Y3Rp
b25TdHJlYW07CiBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgK
aW5kZXggZjBlOWQ2NGM4NTRhM2Y1MzY3NTJkNDg3NDY5MmQyNzg3N2Q2NzA0OS4uMGIyMzZhMDJk
NTlkYzI1OGU5MDg5MGM5MjVhM2M4OGIwNWM1MDdmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTY1LDEyICs2NSwxNSBA
QCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitzdHJ1Y3QgQ2Fj
aGVkQ29kZUJsb2NrOworCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxlOwog
dHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQg
VW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtl
ZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50
Q2FsbExpbmtJbmZvOwotdXNpbmcgQ29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpw
YWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50SWRlbnRpZmllclNl
dEVudHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKIAogc3RydWN0IFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpAQCAt
MTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25z
dGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5k
KFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwot
ICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SW5kZW50aWZp
ZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNl
dHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7CiAgICAg
fQogCiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcikKQEAgLTIwMiw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XTsKICAgICB9CiAgICAgY29uc3QgVmVjdG9yPFdyaXRl
QmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50
cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZp
ZXJTZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYg
Y29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0
czsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3Rlcihp
bnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRD
b25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5k
ZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KQEAgLTM2Nyw2ICszNzAs
MTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBT
dHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUp
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVk
Q29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3RydWN0dXJl
KiwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5
cGU+Jik7CisKICAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQpAQCAtMzc4LDYgKzM4NSw5IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEJ5dGVjb2RlUmV3cml0ZXI7CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9y
OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVk
Q29kZUJsb2NrVHlwZT4KKyAgICBmcmllbmQgc3RydWN0IENhY2hlZENvZGVCbG9jazsKKwogICAg
IHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYsIEluc3RydWN0aW9uU3Ry
ZWFtV3JpdGVyJik7CiAKICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQpAQCAt
NDQ0LDcgKzQ1NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRp
ZmllcnM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwogICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7Ci0gICAgVmVjdG9yPENv
bnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAg
IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJT
ZXRzOwogICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKICAg
ICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCmlu
ZGV4IDk5ODdiNDMxMzM0M2I2Y2I3NTJhNDIwYjM1OGQ5YTM2MDMxNzJmMjYuLjJhYzc0YWU5OGI1
MGNmMjI2MTdiYzk0Mjk0NWUwMjM4NGQxMmNmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKQEAgLTI5LDYgKzI5
LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBDYWNoZWRFdmFsQ29kZUJsb2NrOwor
CiBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxv
Y2sgQmFzZTsKQEAgLTU5LDExICs2MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZnVuY3Rpb25I
b2lzdGluZ0NhbmRpZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsK
ICAgICB9CiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiAgICAg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAg
ICB7CiAgICAgfQogCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBD
YWNoZWRFdmFsQ29kZUJsb2NrJik7CisKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrLmgKaW5kZXggYjU0ODJiNjVjOGI4ZWZiM2FhMzA2YTQxM2JkNTQ2MDM0OTFh
OTAxMy4uNmEzMGFhM2QxZTUyZWU5Njk2Y2U3OTYzMjVjNTA1OWJmYmY5MjJjZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1
Y3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5
cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKQEAgLTQ0LDEwICs0NiwxNCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAgICBmcmll
bmQgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAg
ICAgewogICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYsIGNv
bnN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrJik7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90bykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggNTI2ODk4
Yzk1MWQ4MjE3NTk3OTg4MTEwMmY5ZGM3ZDYxNWIwMTUyMi4uMzc1ZjQ3ODk3ZGNkNWIwNjk1NzYy
NTVlYzNjN2FlMWM3Y2Q0NTdkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTM5LDExICsz
OSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKIGNsYXNzIEZ1bmN0
aW9uTWV0YWRhdGFOb2RlOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgUGFyc2Vy
RXJyb3I7CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s7CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiBlbnVtIFVubGlua2Vk
RnVuY3Rpb25LaW5kIHsKICAgICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLApAQCAtNTQsNiArNTYs
NyBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CiAgICAgZnJpZW5kIGNs
YXNzIFZNOworICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAKICAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKQEAgLTE0Nyw2
ICsxNTAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0
YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJT
Y3JpcHRNb2RlLCBWYXJpYWJsZUVudmlyb25tZW50JiwgIEpTQzo6RGVyaXZlZENvbnRleHRUeXBl
LCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKKyAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIGNvbnN0IENh
Y2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAgdW5zaWduZWQgbV9maXJzdExpbmVPZmZz
ZXQ7CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCmluZGV4IDM0Mzg2
MmU2NDcwZmUxYjFhNDI0ODVkODc2OWUyNzdkNzJjMTUwOGUuLjg2OTk2MTU4N2NkZDUxNzE3ZmY2
M2MxNjdkYmYyNDliZDYwZTM4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCkBAIC0zOCw2ICszOCwxMiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5m
bywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorICAgIFVubGlua2Vk
R2xvYmFsQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT4m
IGNhY2hlZENvZGVCbG9jaykKKyAgICAgICAgOiBCYXNlKGRlY29kZXIsIHN0cnVjdHVyZSwgY2Fj
aGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKaW5kZXggM2Uz
ZThkZmI0ZDViYmM0NjRmNWU2YTIzNDRjYWFjYTk5NDk0OWVmMS4uZDk5MGNkNzhjM2VkMWE2Mzlm
NjQxMDQ2OGRmYTNhZWJiMDY2ZDY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaApAQCAtMzUsNiArMzUsNyBAQCBj
bGFzcyBNZXRhZGF0YVRhYmxlOwogY2xhc3MgVW5saW5rZWRNZXRhZGF0YVRhYmxlIHsKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNZXRh
ZGF0YVRhYmxlOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkTWV0YWRhdGFUYWJsZTsKIAogcHVi
bGljOgogICAgIHN0cnVjdCBMaW5raW5nRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
LmgKaW5kZXggMGU5YzVmNWJkZGU2Yzc1NjJiNjZhMDNiYzBhOThjODdhZGJkOTMwMi4uZTY0ZGNl
NjEyNTQ3N2RkNWM1NDEyY2VkOTJiZTI1NjA0YjVmMzg0NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2suaApAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
RGVjb2RlcjsKK3N0cnVjdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVC
bG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNl
OwpAQCAtNzQsMTEgKzc3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIE1vZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQog
CisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNo
ZWRNb2R1bGVDb2RlQmxvY2smKTsKKwogICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9s
VGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwogCiBwdWJsaWM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrLmgKaW5kZXggYWZlMjZhZWQxYTUwM2FiMjNmZDhmNDQ3ZjlkZWMyZGMwNmNhNTgyNi4uOWQ3
ZTQzNWFmZDhjYTVmYjBhNzRlOTU1ZDM2MjU5MTFhNjI4YWExNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2su
aApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IENhY2hlZFBy
b2dyYW1Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6
IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAtNTAsMTEgKzUyLDE1IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVjbGFyYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGlu
Zm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlLCBHbG9iYWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KIAorICAg
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkUHJvZ3JhbUNv
ZGVCbG9jayYpOworCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsK
ICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXgg
YWQ2NTM2MThiNDI4ZmNhMDZiZTA0ZGRiNjZjMGYzZDMxZDJiMjY0Yy4uOGU4MjU2MDI4YjEwMzdk
YjJiMzA3YWNkMTdkMDViN2YzNThmNDdkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJEaXJlY3RB
cmd1bWVudHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKaW5kZXggZjk0NWUxNzhlNThjNTNmMWZjMzkyNzAwZTI2NTUwOGI4ZmNk
MmYyZS4uYmU5NTc1MWY3NTk3NTUyZmMyNDU4NGI2ZWI3ODlhY2RiN2NmZjJmYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJD
b25maWdGaWxlLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCkBAIC0xOTg1LDggKzE5ODYs
MTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29k
ZUJsb2NrKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVp
dChFeGVjU3RhdGUqKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgdm0uY29k
ZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNTKTsKIAogI2lm
IENPTVBJTEVSKE1TVkMpCkBAIC0yODQ5LDYgKzI4NTMsOCBAQCBpbnQgcnVuSlNDKGNvbnN0IENv
bW1hbmRMaW5lJiBvcHRpb25zLCBib29sIGlzV29ya2VyLCBjb25zdCBGdW5jJiBmdW5jKQogI2Vu
ZGlmCiAgICAgfQogCisgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAgIGlmIChp
c1dvcmtlcikgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgLy8g
VGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSB3b3JrZXIncyBtYWluCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCmluZGV4IDMxM2NmYTQ1YWFm
OTIyYjA3YjA0NWJiZWUwMzYzODU5Y2JkNGMwOWIuLjAxMzQ5NTVkZWZkYWYxNzIxNWRiNWE5NjMz
ZTYwMjIzNTdiOTY3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U291cmNlQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29k
ZS5oCkBAIC0zMyw2ICszMyw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFNvdXJj
ZUNvZGUgOiBwdWJsaWMgVW5saW5rZWRTb3VyY2VDb2RlIHsKKyAgICAgICAgZnJpZW5kIHN0cnVj
dCBDYWNoZWRTb3VyY2VDb2RlOworCiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VDb2RlKCkK
ICAgICAgICAgICAgIDogVW5saW5rZWRTb3VyY2VDb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKaW5kZXggYThlNjAzYzI2YTBiNjAzNjJhMDJkZWFj
MDUxNjE2OWQ1NzU1ODAyMS4uMzg0ODEyMTdiYWYzOTM1ZDUwMWFjMjUxNTU5YjBkNDI2OGI0ZGI4
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKQEAg
LTM3LDYgKzM3LDggQEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJFbmFibGVkIHsgTm8sIFllcyB9
OwogZW51bSBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMgfTsKIAog
Y2xhc3MgU291cmNlQ29kZUZsYWdzIHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFNvdXJjZUNv
ZGVLZXk7CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2RlRmxhZ3MoKSA9IGRlZmF1bHQ7CiAKQEAg
LTcwLDYgKzcyLDggQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVLZXkgeworICAg
IGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkU291cmNlQ29kZUtleTsKKwogcHVibGljOgogICAgIFNvdXJj
ZUNvZGVLZXkoKQogICAgIHsKQEAgLTExNCw2ICsxMTgsMTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgJiYgc3RyaW5nKCkgPT0gb3RoZXIuc3RyaW5nKCk7CiAgICAgfQogCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFNvdXJjZUNvZGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKwogICAgIHN0cnVjdCBIYXNoIHsKICAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU291cmNlQ29kZUtleSYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNvdXJj
ZUNvZGVLZXkmIGEsIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNv
ZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgK
aW5kZXggNmVjNTkwYjUzZTZjOWMzMjdlNDI0NGQwYjExOWIzNmQwOTZmYzgxZS4uNDkwYTg4YWE4
MzFkMWNiN2FmNWZmMWE2YTcxY2UwY2E5MjY3YWYxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCkBAIC0zNSw2ICszNSw5IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFVubGlua2VkU291cmNlQ29kZSB7CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIENhY2hlVHlwZT4KKyAgICAg
ICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTsKKwogICAgIHB1
YmxpYzoKICAgICAgICAgVW5saW5rZWRTb3VyY2VDb2RlKCkKICAgICAgICAgICAgIDogbV9wcm92
aWRlcigwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJs
ZUVudmlyb25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52
aXJvbm1lbnQuaAppbmRleCAxMjliNWVhNmJkOWI3MjZhMWQ5YTQwMTFlZjk2OTBmOGNjNmIwZGQz
Li4zNmY5ZGRmODE3NzZjY2IwYTc2ZmVlMDhhMGE1OGMzODA3YTkzNWM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaApAQCAtMTE2
LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsgfQogCiBwcml2YXRlOgorICAgIGZy
aWVuZCBzdHJ1Y3QgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudDsKKwogICAgIE1hcCBtX21hcDsK
ICAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDFj
ZDlkMmRiMjAxYTUxMWM3NWY3OWM5MTFiNjVkOWVhNjg1MWJmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0wLDAgKzEs
MTgzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgorCisjaW5jbHVkZSAi
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiSlNDYXN0LmgiCisjaW5jbHVk
ZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJKU1RlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvci5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCisjaW5jbHVkZSAi
U291cmNlQ29kZUtleS5oIgorI2luY2x1ZGUgIlVubGlua2VkRXZhbENvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZE1l
dGFkYXRhVGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZv
aWQ+CitzdHJ1Y3QgU291cmNlVHlwZUltcGwgeworICAgIHVzaW5nIHR5cGUgPSBUOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTb3VyY2VUeXBlSW1wbDxULCBzdGQ6OmVuYWJs
ZV9pZl90PCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPHR5
cGVuYW1lIFQ6OlNvdXJjZVR5cGVfLCB2b2lkPjo6dmFsdWU+PiB7CisgICAgdXNpbmcgdHlwZSA9
IHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfOworCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dXNpbmcgU291cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJjZVR5cGVJbXBsPFQ+Ojp0eXBlOworCitj
bGFzcyBFbmNvZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbmNvZGVyKTsKKworcHVi
bGljOgorICAgIEVuY29kZXIoVk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisgICAgICAgICwg
bV9vZmZzZXQoMCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyID0gKHVpbnQ4X3QqKWZhc3RaZXJv
ZWRNYWxsb2Moc19tYXhTaXplKTsKKyAgICB9CisKKyAgICB+RW5jb2RlcigpCisgICAgeworICAg
ICAgICBpZiAobV9idWZmZXIpCisgICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAg
fQorCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorCisgICAgcHRyZGlmZl90IG1hbGxv
Y09mZnNldCh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXQgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc2l6ZW9mKHZvaWQqKSwgbV9vZmZzZXQpOworICAgICAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX29mZnNldCArIHNpemUpIDwgc19tYXhTaXplKTsKKyAg
ICAgICAgcHRyZGlmZl90IHJlc3VsdCA9IG1fb2Zmc2V0OworICAgICAgICBtX29mZnNldCArPSBz
aXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVpbnQ4X3QqIG1hbGxv
Yyh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IG1hbGxv
Y09mZnNldChzaXplKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyICsgb2Zmc2V0OworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogbWFsbG9jKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihtYWxsb2Moc2l6ZW9mKFQpKSk7CisgICAg
fQorCisgICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZvaWQqIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGFkZHJlc3MpOworICAgICAgICBBU1NFUlQoYWRkciA+PSBtX2J1ZmZlciAmJiBhZGRyIDwgbV9i
dWZmZXIgKyBtX29mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRyIC0gbV9idWZmZXI7CisgICAg
fQorCisgICAgdm9pZCBjYWNoZVB0cihjb25zdCB2b2lkKiBwdHIsIHB0cmRpZmZfdCBvZmZzZXQp
CisgICAgeworICAgICAgICBtX3B0clRvT2Zmc2V0TWFwLmFkZChwdHIsIG9mZnNldCk7CisgICAg
fQorCisgICAgV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNldEZvclB0cihjb25zdCB2b2lk
KiBwdHIpCisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9wdHJUb09mZnNldE1hcC5maW5kKHB0
cik7CisgICAgICAgIGlmIChpdCA9PSBtX3B0clRvT2Zmc2V0TWFwLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVlIH07Cisg
ICAgfQorCisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZWxlYXNl
KCkKKyAgICB7CisgICAgICAgIE1hbGxvY1B0cjx1aW50OF90PiBidWZmZXIgPSBhZG9wdE1hbGxv
Y1B0cihtX2J1ZmZlcik7CisgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHsgV1RGTW92ZShidWZmZXIpLCBtX29mZnNldCB9OworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBzX21heFNpemUgPSAxMCAqIE1COworCisgICAgVk0mIG1fdm07CisgICAgdWlu
dDhfdCogbV9idWZmZXI7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworICAgIEhhc2hNYXA8Y29u
c3Qgdm9pZCosIHB0cmRpZmZfdD4gbV9wdHJUb09mZnNldE1hcDsKK307CisKK2NsYXNzIERlY29k
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlY29kZXIpOworCitwdWJsaWM6CisgICAg
RGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXplX3Qgc2l6ZSkKKyAg
ICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oYmFzZUFkZHJlc3MpKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
LCBtX3NpemUoc2l6ZSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNpemUp
OworICAgIH0KKworICAgIH5EZWNvZGVyKCkKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgcGFp
ciA6IG1fZmluYWxpemVycykKKyAgICAgICAgICAgIHBhaXIudmFsdWUoKTsKKyAgICB9CisKKyAg
ICBWTSYgdm0oKSB7IHJldHVybiBtX3ZtOyB9CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29u
c3Qgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogYWRkciA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdHIpOworICAgICAgICBBU1NFUlQoYWRkciA+PSBtX2Jh
c2VBZGRyZXNzICYmIGFkZHIgPCBtX2Jhc2VBZGRyZXNzICsgbV9zaXplKTsKKyAgICAgICAgcmV0
dXJuIGFkZHIgLSBtX2Jhc2VBZGRyZXNzOworICAgIH0KKworICAgIHZvaWQgY2FjaGVPZmZzZXQo
cHRyZGlmZl90IG9mZnNldCwgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRUb1B0
ck1hcC5hZGQob2Zmc2V0LCBwdHIpOworICAgIH0KKworICAgIFdURjo6T3B0aW9uYWw8dm9pZCo+
IHB0ckZvck9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgYXV0byBpdCA9
IG1fb2Zmc2V0VG9QdHJNYXAuZmluZChvZmZzZXQpOworICAgICAgICBpZiAoaXQgPT0gbV9vZmZz
ZXRUb1B0ck1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBhZGRGaW5hbGl6ZXIocHRyZGlmZl90IG9mZnNldCwgY29uc3Qg
RnVuY3RvciYgZm4pCisgICAgeworICAgICAgICBtX2ZpbmFsaXplcnMuYWRkKG9mZnNldCwgZm4p
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBWTSYgbV92bTsKKyAgICBjb25zdCB1aW50OF90KiBt
X2Jhc2VBZGRyZXNzOworI2lmbmRlZiBOREVCVUcKKyAgICBzaXplX3QgbV9zaXplOworI2VuZGlm
CisgICAgSGFzaE1hcDxwdHJkaWZmX3QsIHZvaWQqPiBtX29mZnNldFRvUHRyTWFwOworICAgIEhh
c2hNYXA8cHRyZGlmZl90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fZmluYWxpemVyczsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYsIFQmIGRzdCwg
Y29uc3QgU291cmNlVHlwZTxUPiYgc3JjKQoreworICAgIGRzdCA9IHNyYzsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwg
U291cmNlVHlwZTxUPj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCYgZHN0LCBj
b25zdCBTb3VyY2VUeXBlPFQ+JiBzcmMpCit7CisgICAgZHN0LmVuY29kZShlbmNvZGVyLCBzcmMp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorc3RhdGljIHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVj
b2RlKERlY29kZXImLCBjb25zdCBUJiBzcmMsIFNvdXJjZVR5cGU8VD4mIGRzdCwgQXJncy4uLikK
K3sKKyAgICBkc3QgPSBzcmM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4u
IEFyZ3M+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5
cGU8VD4+Ojp2YWx1ZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIsIGNvbnN0IFQmIHNyYywgU291
cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uIGFyZ3MpCit7CisgICAgc3JjLmRlY29kZShkZWNvZGVy
LCBkc3QsIGFyZ3MuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwgVD4gZGVj
b2RlKERlY29kZXImLCBUIHNyYykKK3sKKyAgICByZXR1cm4gc3JjOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3Vy
Y2VUeXBlPFQ+Pjo6dmFsdWUsIFNvdXJjZVR5cGU8VD4+JiYgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIGNvbnN0IFQmIHNyYykKK3sKKyAgICByZXR1cm4gc3JjLmRlY29kZShkZWNvZGVyKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBEc3Q+CitzdHJ1Y3QgQ2FjaGVk
T2JqZWN0IHsKKyAgICB1c2luZyBTb3VyY2VUeXBlXyA9IFNvdXJjZTsKKworICAgIHN0YXRpYyB1
bnNpZ25lZCBzaXplT2YoY29uc3QgU291cmNlJiBzb3VyY2UpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBzaXplID0gMDsKKyAgICAgICAgY29tcHV0ZU91dE9mTGluZVNpemUoc2l6ZSwgc291cmNl
KTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBzdGF0aWMgVCYgY2FzdChUKiBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4g
KnNvdXJjZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+PgorICAgIHN0YXRpYyBU
JiBjYXN0KFQmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgY29uc3QgVCYgY2FzdChjb25z
dCBUKiBjb25zdCBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gKnNvdXJjZTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
IXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+PgorICAgIHN0YXRpYyBjb25zdCBUJiBjYXN0KGNv
bnN0IFQmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBEc3Q+CitzdHJ1Y3QgVmFyaWFi
bGVMZW5ndGhPYmplY3QgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZSwgRHN0PiB7Citwcml2
YXRlOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9IFBU
UkRJRkZfTUFYOworcHVibGljOgorICAgIHB0cmRpZmZfdCBvZmZzZXQgeyBzX2ludmFsaWRPZmZz
ZXQgfTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQob2Zmc2V0ICE9IHNfaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih0aGlzKSArIG9mZnNldDsKKyAgICB9CisKKyAg
ICB1aW50OF90KiBidWZmZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCAhPSBzX2lu
dmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
dGhpcykgKyBvZmZzZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBj
b25zdCBUKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIFQqIGJ1ZmZlcigpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxUKj4oYnVmZmVyKCkpOworICAgIH0KKworICAgIHVpbnQ4X3QqIGFsbG9jYXRlKEVuY29k
ZXImIGVuY29kZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNl
dE9mZnNldCA9IGVuY29kZXIub2Zmc2V0T2YoJm9mZnNldCk7CisgICAgICAgIHB0cmRpZmZfdCBh
bGxvY2F0aW9uT2Zmc2V0ID0gZW5jb2Rlci5tYWxsb2NPZmZzZXQoc2l6ZSk7CisgICAgICAgIG9m
ZnNldCA9IGFsbG9jYXRpb25PZmZzZXQgLSBvZmZzZXRPZmZzZXQ7CisgICAgICAgIHJldHVybiBi
dWZmZXIoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFsbG9j
YXRlKEVuY29kZXImIGVuY29kZXIsIHVuc2lnbmVkIHNpemUgPSAxKQorICAgIHsKKyAgICAgICAg
YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZW9mKFQpICogc2l6ZSk7CisgICAgICAgIHJldHVybiBidWZm
ZXI8VD4oKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTVCA9
IFNvdXJjZVR5cGU8VD4+CitzdHJ1Y3QgQ2FjaGVkUHRyIDogcHVibGljIFZhcmlhYmxlTGVuZ3Ro
T2JqZWN0PFNUKiwgQ2FjaGVkUHRyPFQ+PiB7CisgICAgYm9vbCBpc0VtcHR5OworCisgICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU1QqIHNyYykKKyAgICB7CisgICAgICAg
IGlzRW1wdHkgPSAhc3JjOworICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAoV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNldCA9IGVuY29k
ZXIub2Zmc2V0Rm9yUHRyKHNyYykpIHsKKyAgICAgICAgICAgIHRoaXMtPm9mZnNldCA9ICpvZmZz
ZXQgLSBlbmNvZGVyLm9mZnNldE9mKCZ0aGlzLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgVCogY2FjaGVkT2JqZWN0ID0gdGhpcy0+dGVtcGxhdGUg
YWxsb2NhdGU8VD4oZW5jb2Rlcik7CisgICAgICAgIGNhY2hlZE9iamVjdC0+ZW5jb2RlKGVuY29k
ZXIsICpzcmMpOworICAgICAgICBlbmNvZGVyLmNhY2hlUHRyKHNyYywgZW5jb2Rlci5vZmZzZXRP
ZihjYWNoZWRPYmplY3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz
PgorICAgIFNUKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQXJncy4uLiBhcmdzKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBwdHJkaWZmX3QgYnVmZmVyT2Zmc2V0ID0gZGVjb2Rlci5vZmZzZXRPZih0aGlz
LT5idWZmZXIoKSk7CisgICAgICAgIGlmIChXVEY6Ok9wdGlvbmFsPHZvaWQqPiBwdHIgPSBkZWNv
ZGVyLnB0ckZvck9mZnNldChidWZmZXJPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8U1QqPigqcHRyKTsKKworICAgICAgICBTVCogcHRyID0gb3BlcmF0b3ItPigp
LT5kZWNvZGUoZGVjb2RlciwgYXJncy4uLik7CisgICAgICAgIGRlY29kZXIuY2FjaGVPZmZzZXQo
YnVmZmVyT2Zmc2V0LCBwdHIpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIFQq
IG9wZXJhdG9yLT4oKQorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigp
OworICAgIH0KKworICAgIGNvbnN0IFQqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFNUID0gU291cmNlVHlwZTxUPj4KK3N0cnVjdCBDYWNoZWRSZWZQ
dHIgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFJlZlB0cjxTVD4sIENhY2hlZFJlZlB0cjxUPj4gewor
ICAgIENhY2hlZFB0cjxULCBTVD4gcHRyOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU1QqIHNyYykKKyAgICB7CisgICAgICAgIHB0ci5lbmNvZGUoZW5jb2Rlciwg
c3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBS
ZWZQdHI8U1Q+IHNyYykKKyAgICB7CisgICAgICAgIGVuY29kZShlbmNvZGVyLCBzcmMuZ2V0KCkp
OworICAgIH0KKworICAgIFJlZlB0cjxTVD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0
CisgICAgeworICAgICAgICBTVCogZGVjb2RlZFB0ciA9IHB0ci5kZWNvZGUoZGVjb2Rlcik7Cisg
ICAgICAgIGRlY29kZXIuYWRkRmluYWxpemVyKGRlY29kZXIub2Zmc2V0T2YocHRyLmJ1ZmZlcigp
KSwgWz1dIHsgZGVyZWZJZk5vdE51bGwoZGVjb2RlZFB0cik7IH0pOworICAgICAgICByZWZJZk5v
dE51bGwoZGVjb2RlZFB0cik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihkZWNvZGVkUHRyKTsK
KyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWZQdHI8U1Q+JiBz
cmMpIGNvbnN0CisgICAgeworICAgICAgICBzcmMgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU1QgPSBTb3VyY2VUeXBlPFQ+Pgor
c3RydWN0IENhY2hlZFdyaXRlQmFycmllciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8V3JpdGVCYXJy
aWVyPFNUPiwgQ2FjaGVkV3JpdGVCYXJyaWVyPFQ+PiB7CisgICAgQ2FjaGVkUHRyPFQsIFNUPiBw
dHI7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJp
ZXI8U1Q+IHNyYykKKyAgICB7CisgICAgICAgIHB0ci5lbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgp
KTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJp
ZXI8U1Q+JiBzcmMsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0CisgICAgeworICAgICAgICBT
VCogZGVjb2RlZFB0ciA9IHB0ci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChkZWNvZGVk
UHRyKQorICAgICAgICAgICAgc3JjLnNldChkZWNvZGVyLnZtKCksIG93bmVyLCBkZWNvZGVkUHRy
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgSUMgPSAwLCB0eXBl
bmFtZSBPSCA9IENyYXNoT25PdmVyZmxvdz4KK3N0cnVjdCBDYWNoZWRWZWN0b3IgOiBwdWJsaWMg
VmFyaWFibGVMZW5ndGhPYmplY3Q8VmVjdG9yPFNvdXJjZVR5cGU8VD4sIElDLCBPSD4sIENhY2hl
ZFZlY3RvcjxULCBJQywgT0g+PiB7CisgICAgdW5zaWduZWQgc2l6ZTsKKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJQywgT0g+
JiB2ZWN0b3IpCisgICAgeworICAgICAgICBzaXplID0gdmVjdG9yLnNpemUoKTsKKyAgICAgICAg
VCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6
OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ldKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJQywgT0g+JiB2ZWN0b3IsIEFyZ3MuLi4gYXJn
cykgY29uc3QKKyAgICB7CisgICAgICAgIHZlY3Rvci5yZXNpemVUb0ZpdChzaXplKTsKKyAgICAg
ICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6
ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ldLCBhcmdzLi4uKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGc3QsIHR5cGVuYW1lIFNuZD4KK3N0cnVjdCBDYWNoZWRQ
YWlyIDogcHVibGljIENhY2hlZE9iamVjdDxzdGQ6OnBhaXI8U291cmNlVHlwZTxGc3Q+LCBTb3Vy
Y2VUeXBlPFNuZD4+LCBDYWNoZWRQYWlyPEZzdCwgU25kPj4geworICAgIEZzdCBmc3Q7CisgICAg
U25kIHNuZDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6
cGFpcjxTb3VyY2VUeXBlPEZzdD4sIFNvdXJjZVR5cGU8U25kPj4mIHBhaXIpCisgICAgeworICAg
ICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGZzdCwgc3RkOjpnZXQ8MD4ocGFpcikpOworICAg
ICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIHNuZCwgc3RkOjpnZXQ8MT4ocGFpcikpOworICAg
IH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VU
eXBlPEZzdD4sIFNvdXJjZVR5cGU8U25kPj4mIHBhaXIpIGNvbnN0CisgICAgeworICAgICAgICA6
OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGZzdCwgc3RkOjpnZXQ8MD4ocGFpcikpOworICAgICAgICA6
OkpTQzo6ZGVjb2RlKGRlY29kZXIsIHNuZCwgc3RkOjpnZXQ8MT4ocGFpcikpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hB
cmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxTb3VyY2VUeXBlPEtleT4+OjpIYXNoLCB0eXBlbmFt
ZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFNvdXJjZVR5cGU8S2V5Pj4sIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlwZTxWYWx1ZT4+Pgorc3RydWN0IENh
Y2hlZEhhc2hNYXAgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SGFzaE1hcDxTb3VyY2VU
eXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZz4sIENhY2hlZEhhc2hNYXA8S2V5LCBWYWx1ZSwgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7CisKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkUGFpcjxL
ZXksIFZhbHVlPj4gZW50cmllczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1l
IFY+CisgICAgdXNpbmcgTWFwID0gSGFzaE1hcDxLLCBWLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZz47CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPj4mIG1hcCkKKyAgICB7
CisgICAgICAgIGVudHJpZXMuc2l6ZSA9IG1hcC5zaXplKCk7CisgICAgICAgIFNvdXJjZVR5cGU8
ZGVjbHR5cGUoZW50cmllcyk+IGVudHJpZXNWZWN0b3IobWFwLnNpemUoKSk7CisgICAgICAgIHVu
c2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogbWFwKQorICAgICAg
ICAgICAgZW50cmllc1ZlY3RvcltpKytdID0geyBpdC5rZXksIGl0LnZhbHVlIH07CisgICAgICAg
IGVudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0b3IpOworICAgIH0KKworICAgIHZv
aWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5
cGU8VmFsdWU+PiYgbWFwKSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlw
ZShlbnRyaWVzKT4gZGVjb2RlZEVudHJpZXM7CisgICAgICAgIGVudHJpZXMuZGVjb2RlKGRlY29k
ZXIsIGRlY29kZWRFbnRyaWVzKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogZGVj
b2RlZEVudHJpZXMpCisgICAgICAgICAgICBtYXAuc2V0KHN0ZDo6Z2V0PDA+KHBhaXIpLCBzdGQ6
OmdldDwxPihwYWlyKSk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFVuaXF1ZWRTdHJpbmdJ
bXBsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFVuaXF1ZWRTdHJpbmdJbXBsLCBDYWNo
ZWRVbmlxdWVkU3RyaW5nSW1wbD4geworICAgIGJvb2wgaXM4Qml0IDogMTsKKyAgICBib29sIGlz
U3ltYm9sIDogMTsKKyAgICBib29sIGlzQXRvbWljIDogMTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7
CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmdJbXBsJiBz
dHJpbmcpCisgICAgeworICAgICAgICBpc0F0b21pYyA9IHN0cmluZy5pc0F0b21pYygpOworICAg
ICAgICBpc1N5bWJvbCA9IHN0cmluZy5pc1N5bWJvbCgpOworICAgICAgICBTdHJpbmdJbXBsKiBp
bXBsID0gY29uc3RfY2FzdDxTdHJpbmdJbXBsKj4oJnN0cmluZyk7CisgICAgICAgIGlmIChpc1N5
bWJvbCkgeworICAgICAgICAgICAgU3ltYm9sSW1wbCogc3ltYm9sID0gc3RhdGljX2Nhc3Q8U3lt
Ym9sSW1wbCo+KGltcGwpOworICAgICAgICAgICAgaWYgKCFzeW1ib2wtPmlzTnVsbFN5bWJvbCgp
KSB7CisgICAgICAgICAgICAgICAgSWRlbnRpZmllciB1aWQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KCZlbmNvZGVyLnZtKCksIHN5bWJvbCk7CisgICAgICAgICAgICAgICAgaW1wbCA9IGVuY29kZXIu
dm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQdWJsaWNOYW1lKHVpZCkuc3RyaW5nKCkuaW1wbCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaXM4Qml0ID0gaW1wbC0+aXM4
Qml0KCk7CisgICAgICAgIGxlbmd0aCA9IGltcGwtPmxlbmd0aCgpOworCisgICAgICAgIGlmICgh
bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBs
ZW5ndGg7CisgICAgICAgIGNvbnN0IHZvaWQqIHBheWxvYWQ7CisgICAgICAgIGlmIChpczhCaXQp
CisgICAgICAgICAgICBwYXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBwYXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAg
ICAgICBzaXplICo9IDI7CisgICAgICAgIH0KKworICAgICAgICB1aW50OF90KiBidWZmZXIgPSB0
aGlzLT5hbGxvY2F0ZShlbmNvZGVyLCBzaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgcGF5
bG9hZCwgc2l6ZSk7CisgICAgfQorCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBjcmVhdGUgPSBbJl0oY29u
c3QgYXV0byogYnVmZmVyKSAtPiBVbmlxdWVkU3RyaW5nSW1wbCogeworICAgICAgICAgICAgaWYg
KCFpc1N5bWJvbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nSW1wbDo6YWRk
KGJ1ZmZlciwgbGVuZ3RoKS5sZWFrUmVmKCk7CisKKyAgICAgICAgICAgIGlmICghbGVuZ3RoKQor
ICAgICAgICAgICAgICAgIHJldHVybiAmU3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5bWJvbCgpLmxl
YWtSZWYoKTsKKworICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJmRlY29kZXIudm0oKSwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgU3Ry
aW5nIHN0ciA9IGRlY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShp
ZGVudCktPnN0cmluZygpOworICAgICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0ci5yZWxl
YXNlSW1wbCgpLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKGltcGwtPmlzU3ltYm9sKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oaW1wbCk7
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGUodGhpcy0+YnVmZmVyPExDaGFyPigpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh0aGlz
LT5idWZmZXI8VUNoYXI+KCkpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTdHJpbmdJbXBs
IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFN0cmluZ0ltcGwsIENhY2hlZFN0cmluZ0lt
cGw+IHsKKyAgICBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCB1bmlxdWVkU3RyaW5nSW1wbDsKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ0ltcGwmIGltcGwp
CisgICAgeworICAgICAgICB1bmlxdWVkU3RyaW5nSW1wbC5lbmNvZGUoZW5jb2RlciwgaW1wbCk7
CisgICAgfQorCisgICAgU3RyaW5nSW1wbCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdW5pcXVlZFN0cmluZ0ltcGwuZGVjb2RlKGRlY29kZXIp
OworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTdHJpbmcgOiBwdWJsaWMgVmFyaWFibGVMZW5n
dGhPYmplY3Q8U3RyaW5nLCBDYWNoZWRTdHJpbmc+IHsKKyAgICBDYWNoZWRSZWZQdHI8Q2FjaGVk
VW5pcXVlZFN0cmluZ0ltcGw+IGltcGw7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIGltcGwuZW5jb2RlKGVu
Y29kZXIsIHN0YXRpY19jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oc3RyaW5nLmltcGwoKSkpOwor
ICAgIH0KKworICAgIFN0cmluZyBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJpbmcoKFJlZlB0cjxTdHJpbmdJbXBsPilpbXBsLmRlY29kZShk
ZWNvZGVyKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU3Ry
aW5nJiBkc3QpIGNvbnN0CisgICAgeworICAgICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rlcik7Cisg
ICAgfQorfTsKKworc3RydWN0IENhY2hlZElkZW50aWZpZXIgOiBwdWJsaWMgVmFyaWFibGVMZW5n
dGhPYmplY3Q8SWRlbnRpZmllciwgQ2FjaGVkSWRlbnRpZmllcj4geworICAgIENhY2hlZFN0cmlu
ZyBzdHJpbmc7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgc3RyaW5nLmVuY29kZShlbmNvZGVy
LCBpZGVudGlmaWVyLnN0cmluZygpKTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IHN0cmlu
Zy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gSWRlbnRpZmllcigpOworCisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9t
VWlkKCZkZWNvZGVyLnZtKCksIChVbmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7CisgICAg
fQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQp
IGNvbnN0CisgICAgeworICAgICAgICBpZGVudCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IENhY2hlZE9wdGlvbmFsIDogcHVibGlj
IFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4sIENhY2hl
ZE9wdGlvbmFsPFQ+PiB7CisgICAgYm9vbCBpc0VtcHR5OworCisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiYgc291cmNl
KQorICAgIHsKKyAgICAgICAgaXNFbXB0eSA9ICFzb3VyY2U7CisKKyAgICAgICAgaWYgKGlzRW1w
dHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy0+dGVtcGxhdGUgYWxsb2Nh
dGU8VD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc291cmNlKTsKKyAgICB9CisKKyAgICBX
VEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIHJldHVybiB7IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpLT5k
ZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+JiBkc3QpIGNvbnN0CisgICAgeworICAg
ICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZVR5cGU8VD4+JiBzb3Vy
Y2UpCisgICAgeworICAgICAgICBpZiAoIXNvdXJjZSkKKyAgICAgICAgICAgIGVuY29kZShlbmNv
ZGVyLCBXVEY6Om51bGxvcHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmNvZGUoZW5j
b2RlciwgeyAqc291cmNlIH0pOworICAgIH0KKworICAgIFNvdXJjZVR5cGU8VD4qIGRlY29kZUFz
UHRyKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHJldHVybiB0aGlzLT50ZW1w
bGF0ZSBidWZmZXI8VD4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAgIH0KK307CisKK3N0cnVjdCBD
YWNoZWRTaW1wbGVKdW1wVGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlLCBDYWNoZWRTaW1wbGVKdW1wVGFibGU+IHsKKyAgICBpbnQzMl90IG1pbjsKKyAg
ICBDYWNoZWRWZWN0b3I8aW50MzJfdD4gYnJhbmNoT2Zmc2V0czsKKworICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFi
bGUpCisgICAgeworICAgICAgICBtaW4gPSBqdW1wVGFibGUubWluOworICAgICAgICBicmFuY2hP
ZmZzZXRzLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAgfQor
CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIGp1bXBUYWJsZSkgY29uc3QKKyAgICB7CisgICAgICAgIGp1bXBUYWJsZS5taW4gPSBtaW47
CisgICAgICAgIGJyYW5jaE9mZnNldHMuZGVjb2RlKGRlY29kZXIsIGp1bXBUYWJsZS5icmFuY2hP
ZmZzZXRzKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nSnVtcFRhYmxlIDogcHVi
bGljIENhY2hlZE9iamVjdDxVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSwgQ2FjaGVkU3RyaW5nSnVt
cFRhYmxlPiB7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkU3RyaW5nSW1w
bD4sIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjogT2Zmc2V0TG9jYXRpb24+IG9mZnNldFRhYmxl
OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTdHJp
bmdKdW1wVGFibGUmIGp1bXBUYWJsZSkKKyAgICB7CisgICAgICAgIG9mZnNldFRhYmxlLmVuY29k
ZShlbmNvZGVyLCBqdW1wVGFibGUub2Zmc2V0VGFibGUpOworICAgIH0KKworICAgIHZvaWQgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUp
IGNvbnN0CisgICAgeworICAgICAgICBvZmZzZXRUYWJsZS5kZWNvZGUoZGVjb2RlciwganVtcFRh
YmxlLm9mZnNldFRhYmxlKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkUmFyZURhdGEgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSwgQ2FjaGVkUmFy
ZURhdGE+IHsKKyAgICBDYWNoZWRWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gZXhjZXB0aW9u
SGFuZGxlcnM7CisKKyAgICAvLyBKdW1wIFRhYmxlcworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRT
aW1wbGVKdW1wVGFibGU+IHN3aXRjaEp1bXBUYWJsZXM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hl
ZFN0cmluZ0p1bXBUYWJsZT4gc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgIENhY2hlZFZl
Y3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gZXhwcmVzc2lvbkluZm9GYXRQ
b3NpdGlvbnM7CisKKyAgICBDYWNoZWRIYXNoTWFwPHVuc2lnbmVkLCBVbmxpbmtlZENvZGVCbG9j
azo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gdHlwZVByb2ZpbGVySW5m
b01hcDsKKyAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gb3BQcm9m
aWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CisKKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSYgcmFyZURhdGEp
CisgICAgeworICAgICAgICBleGNlcHRpb25IYW5kbGVycy5lbmNvZGUoZW5jb2RlciwgcmFyZURh
dGEubV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgICAgIHN3aXRjaEp1bXBUYWJsZXMuZW5jb2Rl
KGVuY29kZXIsIHJhcmVEYXRhLm1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIHN0cmluZ1N3
aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcyk7CisgICAgICAgIGV4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmVuY29kZShlbmNv
ZGVyLCByYXJlRGF0YS5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zKTsKKyAgICAgICAgdHlw
ZVByb2ZpbGVySW5mb01hcC5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV90eXBlUHJvZmlsZXJJ
bmZvTWFwKTsKKyAgICAgICAgb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZW5j
b2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNl
dHMpOworICAgIH0KKworICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9jazo6
UmFyZURhdGEqIHJhcmVEYXRhID0gbmV3IFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSB7IH07
CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVycyk7CisgICAgICAgIHN3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29k
ZXIsIHJhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBzdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKTsKKyAgICAgICAgZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuZGVjb2RlKGRlY29kZXIs
IHJhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zKTsKKyAgICAgICAgdHlwZVBy
b2ZpbGVySW5mb01hcC5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5m
b01hcCk7CisgICAgICAgIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmRlY29k
ZShkZWNvZGVyLCByYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0
cyk7CisgICAgICAgIHJldHVybiByYXJlRGF0YTsKKyAgICB9CisKK307CisKK3N0cnVjdCBDYWNo
ZWRCaXRWZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8Qml0VmVjdG9yLCBDYWNo
ZWRCaXRWZWN0b3I+IHsKKyAgICB1bnNpZ25lZCBzaXplOworCisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3IpCisgICAgeworICAgICAg
ICBzaXplID0gYml0VmVjdG9yLnNpemUoKTsKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhp
cy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGJpdFZl
Y3Rvci5iaXRzKCksIHNpemUpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBC
aXRWZWN0b3ImIGJpdFZlY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGJpdFZlY3Rvci5lbnN1
cmVTaXplKHNpemUpOworICAgICAgICBtZW1jcHkoYml0VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVm
ZmVyKCksIHNpemUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxUPjo6SGFzaD4KK3N0cnVjdCBDYWNoZWRI
YXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hB
cmc+LCBDYWNoZWRIYXNoU2V0PFQsIEhhc2hBcmc+PiB7CisgICAgQ2FjaGVkVmVjdG9yPFQ+IGVu
dHJpZXM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0
PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+JiBzZXQpCisgICAgeworICAgICAgICBTb3VyY2VUeXBl
PGRlY2x0eXBlKGVudHJpZXMpPiBlbnRyaWVzVmVjdG9yKHNldC5zaXplKCkpOworICAgICAgICB1
bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogc2V0KQorICAg
ICAgICAgICAgZW50cmllc1ZlY3RvcltpKytdID0gaXRlbTsKKyAgICAgICAgZW50cmllcy5lbmNv
ZGUoZW5jb2RlciwgZW50cmllc1ZlY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgSGFzaFNldDxTb3VyY2VUeXBlPFQ+LCBIYXNoQXJnPiYgc2V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShlbnRyaWVzKT4gZW50cmllc1Zl
Y3RvcjsKKyAgICAgICAgZW50cmllcy5kZWNvZGUoZGVjb2RlciwgZW50cmllc1ZlY3Rvcik7Cisg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGVudHJpZXNWZWN0b3IpCisgICAgICAgICAg
ICBzZXQuYWRkKGl0ZW0pOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRDb25zdGFudElkZW50
aWZpZXJTZXRFbnRyeSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxDb25zdGFudElkZW50
aWZpZXJTZXRFbnRyeSwgQ2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IHsKKyAgICB1
bnNpZ25lZCBjb25zdGFudDsKKyAgICBDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPiBzZXQ7CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSYg
ZW50cnkpCisgICAgeworICAgICAgICBjb25zdGFudCA9IHN0ZDo6Z2V0PDE+KGVudHJ5KTsKKyAg
ICAgICAgc2V0LmVuY29kZShlbmNvZGVyLCBzdGQ6OmdldDwwPihlbnRyeSkpOworICAgIH0KKwor
ICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5JiBlbnRyeSkgY29uc3QKKyAgICB7CisgICAgICAgIHN0ZDo6Z2V0PDE+KGVudHJ5KSA9IGNv
bnN0YW50OworICAgICAgICBzZXQuZGVjb2RlKGRlY29kZXIsIHN0ZDo6Z2V0PDA+KGVudHJ5KSk7
CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgOiBwdWJsaWMg
Q2FjaGVkT2JqZWN0PFZhcmlhYmxlRW52aXJvbm1lbnQsIENhY2hlZFZhcmlhYmxlRW52aXJvbm1l
bnQ+IHsKKworICAgIGJvb2wgaXNFdmVyeXRoaW5nQ2FwdHVyZWQ7CisgICAgQ2FjaGVkSGFzaE1h
cDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+LCBWYXJpYWJsZUVudmlyb25t
ZW50RW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxVbmlxdWVkU3Ry
aW5nSW1wbD4+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnlIYXNoVHJhaXRzPiBtYXA7CisKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50
JiBlbnYpCisgICAgeworICAgICAgICBpc0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IGVudi5tX2lzRXZl
cnl0aGluZ0NhcHR1cmVkOworICAgICAgICBtYXAuZW5jb2RlKGVuY29kZXIsIGVudi5tX21hcCk7
CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmFyaWFibGVFbnZp
cm9ubWVudCYgZW52KSBjb25zdAorICAgIHsKKyAgICAgICAgZW52Lm1faXNFdmVyeXRoaW5nQ2Fw
dHVyZWQgPSBpc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKKyAgICAgICAgbWFwLmRlY29kZShkZWNvZGVy
LCBlbnYubV9tYXApOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFNUID0gU291cmNlVHlwZTxUPj4KK3N0cnVjdCBDYWNoZWRBcnJheSA6IHB1YmxpYyBWYXJpYWJs
ZUxlbmd0aE9iamVjdDxTVCosIENhY2hlZEFycmF5PFQsIFNUPj4geworICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNUKiBhcnJheSwgdW5zaWduZWQgc2l6ZSkKKyAgICB7
CisgICAgICAgIFQqIGRzdCA9IHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIsIHNp
emUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBkc3RbaV0sIGFycmF5W2ldKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFNUKiBhcnJheSwgdW5zaWduZWQgc2l6ZSwgQXJncy4uLiBhcmdzKSBjb25zdAor
ICAgIHsKKyAgICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAg
ICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgYXJyYXlbaV0sIGFyZ3MuLi4p
OworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZSA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8U2NvcGVkQXJndW1lbnRzVGFibGUsIENhY2hlZFNjb3BlZEFyZ3VtZW50
c1RhYmxlPiB7CisgICAgdWludDMyX3QgbGVuZ3RoOworICAgIENhY2hlZEFycmF5PFNjb3BlT2Zm
c2V0PiBhcmd1bWVudHM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBTY29wZWRBcmd1bWVudHNUYWJsZSYgc2NvcGVkQXJndW1lbnRzVGFibGUpCisgICAgeworICAg
ICAgICBsZW5ndGggPSBzY29wZWRBcmd1bWVudHNUYWJsZS5tX2xlbmd0aDsKKyAgICAgICAgYXJn
dW1lbnRzLmVuY29kZShlbmNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5n
ZXQoKSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTY29wZWRBcmd1bWVudHNU
YWJsZSogc2NvcGVkQXJndW1lbnRzVGFibGUgPSBTY29wZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRl
KGRlY29kZXIudm0oKSwgbGVuZ3RoKTsKKyAgICAgICAgYXJndW1lbnRzLmRlY29kZShkZWNvZGVy
LCBzY29wZWRBcmd1bWVudHNUYWJsZS0+bV9hcmd1bWVudHMuZ2V0KCksIGxlbmd0aCk7CisgICAg
ICAgIHJldHVybiBzY29wZWRBcmd1bWVudHNUYWJsZTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2Fj
aGVkU3ltYm9sVGFibGVFbnRyeSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U3ltYm9sVGFibGVFbnRy
eSwgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeT4geworICAgIGludHB0cl90IGJpdHM7CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgc3ltYm9sVGFibGVF
bnRyeSkKKyAgICB7CisgICAgICAgIGJpdHMgPSBzeW1ib2xUYWJsZUVudHJ5Lm1fYml0cyB8IFN5
bWJvbFRhYmxlRW50cnk6OlNsaW1GbGFnOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29k
ZXImLCBTeW1ib2xUYWJsZUVudHJ5JiBzeW1ib2xUYWJsZUVudHJ5KSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMgPSBiaXRzOworICAgIH0KK307CisKK3N0cnVj
dCBDYWNoZWRTeW1ib2xUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U3ltYm9sVGFibGUsIENh
Y2hlZFN5bWJvbFRhYmxlPiB7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVk
VW5pcXVlZFN0cmluZ0ltcGw+LCBDYWNoZWRTeW1ib2xUYWJsZUVudHJ5LCBJZGVudGlmaWVyUmVw
SGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiwgU3ltYm9sVGFibGVJ
bmRleEhhc2hUcmFpdHM+IG1hcDsKKyAgICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldDsKKyAg
ICB1bnNpZ25lZCB1c2VzTm9uU3RyaWN0RXZhbCA6IDE7CisgICAgdW5zaWduZWQgbmVzdGVkTGV4
aWNhbFNjb3BlIDogMTsKKyAgICB1bnNpZ25lZCBzY29wZVR5cGUgOiAzOworICAgIC8vIEZJWE1F
OiBkbyB3ZSBuZWVkIHRvIGNhY2hlZCB0aGlzIGV2ZW50dWFsbHk/CisgICAgLy8gQ2FjaGVkUHRy
PFN5bWJvbFRhYmxlUmFyZURhdGE+IHJhcmVEYXRhOworICAgIENhY2hlZFB0cjxDYWNoZWRTY29w
ZWRBcmd1bWVudHNUYWJsZT4gYXJndW1lbnRzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFzeW1ib2xUYWJsZS5tX3JhcmVEYXRhKTsKKyAgICAgICAgbWFwLmVuY29kZShlbmNv
ZGVyLCBzeW1ib2xUYWJsZS5tX21hcCk7CisgICAgICAgIG1heFNjb3BlT2Zmc2V0ID0gc3ltYm9s
VGFibGUubV9tYXhTY29wZU9mZnNldDsKKyAgICAgICAgdXNlc05vblN0cmljdEV2YWwgPSBzeW1i
b2xUYWJsZS5tX3VzZXNOb25TdHJpY3RFdmFsOworICAgICAgICBuZXN0ZWRMZXhpY2FsU2NvcGUg
PSBzeW1ib2xUYWJsZS5tX25lc3RlZExleGljYWxTY29wZTsKKyAgICAgICAgc2NvcGVUeXBlID0g
c3ltYm9sVGFibGUubV9zY29wZVR5cGU7CisgICAgICAgIGFyZ3VtZW50cy5lbmNvZGUoZW5jb2Rl
ciwgc3ltYm9sVGFibGUubV9hcmd1bWVudHMuZ2V0KCkpOworICAgIH0KKworICAgIFN5bWJvbFRh
YmxlKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUoZGVjb2Rlci52bSgpKTsK
KyAgICAgICAgbWFwLmRlY29kZShkZWNvZGVyLCBzeW1ib2xUYWJsZS0+bV9tYXApOworICAgICAg
ICBzeW1ib2xUYWJsZS0+bV9tYXhTY29wZU9mZnNldCA9IG1heFNjb3BlT2Zmc2V0OworICAgICAg
ICBzeW1ib2xUYWJsZS0+bV91c2VzTm9uU3RyaWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOwor
ICAgICAgICBzeW1ib2xUYWJsZS0+bV9uZXN0ZWRMZXhpY2FsU2NvcGUgPSBuZXN0ZWRMZXhpY2Fs
U2NvcGU7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX3Njb3BlVHlwZSA9IHNjb3BlVHlwZTsKKyAg
ICAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNjb3BlZEFyZ3VtZW50c1RhYmxlID0gYXJndW1l
bnRzLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKHNjb3BlZEFyZ3VtZW50c1RhYmxlKQor
ICAgICAgICAgICAgc3ltYm9sVGFibGUtPm1fYXJndW1lbnRzLnNldChkZWNvZGVyLnZtKCksIHN5
bWJvbFRhYmxlLCBzY29wZWRBcmd1bWVudHNUYWJsZSk7CisgICAgICAgIHJldHVybiBzeW1ib2xU
YWJsZTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkSlNWYWx1ZTsKK3N0cnVjdCBDYWNoZWRJ
bW11dGFibGVCdXR0ZXJmbHkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVy
Zmx5LCBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHk+IHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICB1bmlvbiB7CisgICAgICAgIENhY2hl
ZEFycmF5PGRvdWJsZT4gY2FjaGVkRG91YmxlczsKKyAgICAgICAgQ2FjaGVkQXJyYXk8Q2FjaGVk
SlNWYWx1ZSwgV3JpdGVCYXJyaWVyPFVua25vd24+PiBjYWNoZWRWYWx1ZXM7CisgICAgfTsKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIEpTSW1tdXRhYmxlQnV0dGVyZmx5JiBp
bW11dGFibGVCdXR0ZXJmbHkpCisgICAgeworICAgICAgICBsZW5ndGggPSBpbW11dGFibGVCdXR0
ZXJmbHkubGVuZ3RoKCk7CisgICAgICAgIGluZGV4aW5nVHlwZSA9IGltbXV0YWJsZUJ1dHRlcmZs
eS5pbmRleGluZ01vZGUoKTsgLy8gdGhpcyBpcyBjb25mdXNpbmcsIG5vdCBzdXJlIHdoeSB3ZSBo
YXZlIHRvIHVzZSBpbmRleGluZ01vZGUgdnMgaW5kZXhpbmdUeXBlCisgICAgICAgIGlmIChoYXNE
b3VibGUoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgICAgIGNhY2hlZERvdWJsZXMuZW5jb2RlKGVu
Y29kZXIsIGltbXV0YWJsZUJ1dHRlcmZseS50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzRG91Ymxl
KCkuZGF0YSgpLCBsZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWNoZWRWYWx1
ZXMuZW5jb2RlKGVuY29kZXIsIGltbXV0YWJsZUJ1dHRlcmZseS50b0J1dHRlcmZseSgpLT5jb250
aWd1b3VzKCkuZGF0YSgpLCBsZW5ndGgpOworICAgIH0KKworICAgIEpTSW1tdXRhYmxlQnV0dGVy
Zmx5KiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIEpTSW1t
dXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBKU0ltbXV0YWJsZUJ1dHRlcmZs
eTo6Y3JlYXRlKGRlY29kZXIudm0oKSwgaW5kZXhpbmdUeXBlLCBsZW5ndGgpOworICAgICAgICBp
ZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBjYWNoZWREb3VibGVzLmRl
Y29kZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKS5kYXRhKCksIGxlbmd0aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY2FjaGVkVmFsdWVzLmRlY29kZShkZWNvZGVyLCBpbW11dGFibGVC
dXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGxlbmd0aCwgaW1t
dXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuIGltbXV0YWJsZUJ1dHRlcmZseTsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkUmVnRXhwIDogcHVibGljIENhY2hlZE9iamVjdDxSZWdF
eHAsIENhY2hlZFJlZ0V4cD4geworICAgIENhY2hlZFN0cmluZyBwYXR0ZXJuU3RyaW5nOworICAg
IFJlZ0V4cEZsYWdzIGZsYWdzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgUmVnRXhwJiByZWdFeHApCisgICAgeworICAgICAgICBwYXR0ZXJuU3RyaW5nLmVuY29k
ZShlbmNvZGVyLCByZWdFeHAubV9wYXR0ZXJuU3RyaW5nKTsKKyAgICAgICAgZmxhZ3MgPSByZWdF
eHAubV9mbGFnczsKKyAgICB9CisKKyAgICBSZWdFeHAqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4geyBwYXR0ZXJuU3RyaW5nLmRl
Y29kZShkZWNvZGVyKSB9OworICAgICAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZGVjb2Rlci52
bSgpLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFRlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VGVtcGxhdGVPYmplY3REZXNj
cmlwdG9yLCBDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+IHsKKyAgICBDYWNoZWRWZWN0
b3I8Q2FjaGVkU3RyaW5nLCA0PiByYXdTdHJpbmdzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRP
cHRpb25hbDxDYWNoZWRTdHJpbmc+LCA0PiBjb29rZWRTdHJpbmdzOworCisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yJiB0ZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3IpCisgICAgeworICAgICAgICByYXdTdHJpbmdzLmVuY29kZShl
bmNvZGVyLCB0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IucmF3U3RyaW5ncygpKTsKKyAgICAgICAg
Y29va2VkU3RyaW5ncy5lbmNvZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNv
b2tlZFN0cmluZ3MoKSk7CisgICAgfQorCisgICAgUmVmPFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
cj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I6OlN0cmluZ1ZlY3RvciBkZWNvZGVkUmF3U3RyaW5nczsKKyAgICAg
ICAgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpPcHRpb25hbFN0cmluZ1ZlY3RvciBkZWNvZGVk
Q29va2VkU3RyaW5nczsKKyAgICAgICAgcmF3U3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2Rl
ZFJhd1N0cmluZ3MpOworICAgICAgICBjb29rZWRTdHJpbmdzLmRlY29kZShkZWNvZGVyLCBkZWNv
ZGVkQ29va2VkU3RyaW5ncyk7CisgICAgICAgIHJldHVybiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3I6OmNyZWF0ZShXVEZNb3ZlKGRlY29kZWRSYXdTdHJpbmdzKSwgV1RGTW92ZShkZWNvZGVkQ29v
a2VkU3RyaW5ncykpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRCaWdJbnQgOiBwdWJsaWMg
VmFyaWFibGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQsIENhY2hlZEJpZ0ludD4geworICAgIHVuc2ln
bmVkIGxlbmd0aDsKKyAgICBib29sIHNpZ247CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBKU0JpZ0ludCYgYmlnSW50KQorICAgIHsKKyAgICAgICAgbGVuZ3RoID0gYmlnSW50
Lmxlbmd0aCgpOworICAgICAgICBzaWduID0gYmlnSW50LnNpZ24oKTsKKworICAgICAgICBpZiAo
IWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBzaXplID0g
c2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBsZW5ndGg7CisgICAgICAgIHRoaXMtPmFsbG9jYXRl
KGVuY29kZXIsIHNpemUpOworICAgICAgICBtZW1jcHkodGhpcy0+YnVmZmVyKCksIGJpZ0ludC5k
YXRhU3RvcmFnZSgpLCBzaXplKTsKKyAgICB9CisKKyAgICBKU0JpZ0ludCogZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNC
aWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoZGVjb2Rlci52bSgpLCBsZW5ndGgpOwor
ICAgICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7CisgICAgICAgIG1lbWNweShiaWdJbnQtPmRh
dGFTdG9yYWdlKCksIHRoaXMtPmJ1ZmZlcigpLCBzaXplb2YoSlNCaWdJbnQ6OkRpZ2l0KSAqIGxl
bmd0aCk7CisgICAgICAgIHJldHVybiBiaWdJbnQ7CisgICAgfQorfTsKKworc3RydWN0IENhY2hl
ZEpTVmFsdWUgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8V3JpdGVCYXJyaWVyPFVua25v
d24+LCBDYWNoZWRKU1ZhbHVlPiB7CisgICAgZW51bSBjbGFzcyBFbmNvZGVkVHlwZSA6IHVpbnQ4
X3QgeworICAgICAgICBKU1ZhbHVlLAorICAgICAgICBTeW1ib2xUYWJsZSwKKyAgICAgICAgU3Ry
aW5nLAorICAgICAgICBJbW11dGFibGVCdXR0ZXJmbHksCisgICAgICAgIFJlZ0V4cCwKKyAgICAg
ICAgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLAorICAgICAgICBCaWdJbnQsCisgICAgfTsKKwor
ICAgIEVuY29kZWRUeXBlIHR5cGU7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4gdmFsdWUpCisgICAgeworICAgICAgICBKU1Zh
bHVlIHYgPSB2YWx1ZS5nZXQoKTsKKworICAgICAgICBpZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6SlNWYWx1ZTsKKyAgICAg
ICAgICAgICp0aGlzLT5hbGxvY2F0ZTxFbmNvZGVkSlNWYWx1ZT4oZW5jb2RlcikgPSBKU1ZhbHVl
OjplbmNvZGUodik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBK
U0NlbGwqIGNlbGwgPSB2LmFzQ2VsbCgpOworICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbyA9IGNlbGwtPmNsYXNzSW5mbyhlbmNvZGVyLnZtKCkpOworCisgICAgICAgIGlmIChjbGFz
c0luZm8gPT0gU3ltYm9sVGFibGU6OmluZm8oKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29k
ZWRUeXBlOjpTeW1ib2xUYWJsZTsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFN5
bWJvbFRhYmxlPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8U3ltYm9sVGFibGUq
PihjZWxsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y2xhc3NJbmZvID09IEpTU3RyaW5nOjppbmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNv
ZGVkVHlwZTo6U3RyaW5nOworICAgICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IGFzU3RyaW5n
KGNlbGwpLT50cnlHZXRWYWx1ZSgpLmltcGwoKTsKKyAgICAgICAgICAgIEFTU0VSVCghaW1wbCB8
fCAhaW1wbC0+aXNTeW1ib2woKSk7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqaW1wbCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09IEpT
SW1tdXRhYmxlQnV0dGVyZmx5OjppbmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVk
VHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2Fj
aGVkSW1tdXRhYmxlQnV0dGVyZmx5PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8
SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09IFJlZ0V4cDo6aW5mbygpKSB7CisgICAg
ICAgICAgICB0eXBlID0gRW5jb2RlZFR5cGU6OlJlZ0V4cDsKKyAgICAgICAgICAgIHRoaXMtPmFs
bG9jYXRlPENhY2hlZFJlZ0V4cD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqanNDYXN0PFJl
Z0V4cCo+KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjbGFzc0luZm8gPT0gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmluZm8oKSkgewor
ICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7
CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3I+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwganNDYXN0PEpTVGVtcGxhdGVPYmplY3REZXNj
cmlwdG9yKj4oY2VsbCktPmRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09IEpTQmlnSW50OjppbmZvKCkpIHsKKyAg
ICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6QmlnSW50OworICAgICAgICAgICAgdGhpcy0+
YWxsb2NhdGU8Q2FjaGVkQmlnSW50PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8
SlNCaWdJbnQqPihjZWxsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUsIGNvbnN0
IEpTQ2VsbCogb3duZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU1ZhbHVlIHY7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpKU1ZhbHVlOgorICAg
ICAgICAgICAgdiA9IEpTVmFsdWU6OmRlY29kZSgqdGhpcy0+YnVmZmVyPEVuY29kZWRKU1ZhbHVl
PigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpTeW1i
b2xUYWJsZToKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkU3ltYm9sVGFibGU+
KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVu
Y29kZWRUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBs
ID0gdGhpcy0+YnVmZmVyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPigpLT5kZWNvZGUoZGVjb2Rl
cik7CisgICAgICAgICAgICB2ID0gSlNTdHJpbmc6OmNyZWF0ZShkZWNvZGVyLnZtKCksIGFkb3B0
UmVmKCppbXBsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEVuY29kZWRUeXBlOjpJbW11dGFibGVCdXR0ZXJmbHk6CisgICAgICAgICAgICB2ID0gdGhpcy0+
YnVmZmVyPENhY2hlZEltbXV0YWJsZUJ1dHRlcmZseT4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlJlZ0V4cDoKKyAgICAg
ICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkUmVnRXhwPigpLT5kZWNvZGUoZGVjb2Rlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6VGVtcGxhdGVP
YmplY3REZXNjcmlwdG9yOgorICAgICAgICAgICAgdiA9IEpTVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yOjpjcmVhdGUoZGVjb2Rlci52bSgpLCB0aGlzLT5idWZmZXI8Q2FjaGVkVGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yPigpLT5kZWNvZGUoZGVjb2RlcikpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkJpZ0ludDoKKyAgICAgICAgICAgIHYgPSB0aGlzLT5i
dWZmZXI8Q2FjaGVkQmlnSW50PigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUuc2V0KGRlY29kZXIudm0oKSwgb3duZXIs
IHYpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRJbnN0cnVjdGlvblN0cmVhbSA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8SW5zdHJ1Y3Rpb25TdHJlYW0sIENhY2hlZEluc3RydWN0aW9uU3RyZWFt
PiB7CisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBp
bnN0cnVjdGlvbnM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYgc3RyZWFtKQorICAgIHsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zLmVu
Y29kZShlbmNvZGVyLCBzdHJlYW0ubV9pbnN0cnVjdGlvbnMpOworICAgIH0KKworICAgIEluc3Ry
dWN0aW9uU3RyZWFtKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gaW5zdHJ1Y3Rpb25z
VmVjdG9yOworICAgICAgICBpbnN0cnVjdGlvbnMuZGVjb2RlKGRlY29kZXIsIGluc3RydWN0aW9u
c1ZlY3Rvcik7CisgICAgICAgIHJldHVybiBuZXcgSW5zdHJ1Y3Rpb25TdHJlYW0oV1RGTW92ZShp
bnN0cnVjdGlvbnNWZWN0b3IpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkTWV0YWRhdGFU
YWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRNZXRhZGF0YVRhYmxlLCBDYWNoZWRN
ZXRhZGF0YVRhYmxlPiB7CisgICAgYm9vbCBoYXNNZXRhZGF0YTsKKyAgICBzdGQ6OmFycmF5PHVu
c2lnbmVkLCBVbmxpbmtlZE1ldGFkYXRhVGFibGU6OnNfb2Zmc2V0VGFibGVFbnRyaWVzPiBtZXRh
ZGF0YTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBVbmxpbmtlZE1ldGFkYXRh
VGFibGUmIG1ldGFkYXRhVGFibGUpCisgICAgeworICAgICAgICBBU1NFUlQobWV0YWRhdGFUYWJs
ZS5tX2lzRmluYWxpemVkKTsKKyAgICAgICAgaGFzTWV0YWRhdGEgPSBtZXRhZGF0YVRhYmxlLm1f
aGFzTWV0YWRhdGE7CisgICAgICAgIGlmICghaGFzTWV0YWRhdGEpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IFVubGlua2VkTWV0YWRhdGFUYWJsZTo6c19v
ZmZzZXRUYWJsZUVudHJpZXM7IGktLTspCisgICAgICAgICAgICBtZXRhZGF0YVtpXSA9IG1ldGFk
YXRhVGFibGUuYnVmZmVyKClbaV07CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYs
IFVubGlua2VkTWV0YWRhdGFUYWJsZSYgbWV0YWRhdGFUYWJsZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIG1ldGFkYXRhVGFibGUubV9pc0ZpbmFsaXplZCA9IHRydWU7CisgICAgICAgIG1ldGFkYXRh
VGFibGUubV9pc0xpbmtlZCA9IGZhbHNlOworICAgICAgICBtZXRhZGF0YVRhYmxlLm1faGFzTWV0
YWRhdGEgPSBoYXNNZXRhZGF0YTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRN
ZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllczsgaS0tOykKKyAgICAgICAgICAgIG1l
dGFkYXRhVGFibGUuYnVmZmVyKClbaV0gPSBtZXRhZGF0YVtpXTsKKyAgICB9Cit9OworCitzdHJ1
Y3QgQ2FjaGVkU291cmNlT3JpZ2luIDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2VPcmlnaW4s
IENhY2hlZFNvdXJjZU9yaWdpbj4geworICAgIENhY2hlZFN0cmluZyBzdHJpbmc7CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9y
aWdpbikKKyAgICB7CisgICAgICAgIHN0cmluZy5lbmNvZGUoZW5jb2Rlciwgc291cmNlT3JpZ2lu
LnN0cmluZygpKTsKKyAgICB9CisKKyAgICBTb3VyY2VPcmlnaW4gZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU291cmNlT3JpZ2luIHsgc3RyaW5n
LmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRUZXh0UG9zaXRp
b24gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFRleHRQb3NpdGlvbiwgQ2FjaGVkVGV4dFBvc2l0aW9u
PiB7CisgICAgaW50IGxpbmU7CisgICAgaW50IGNvbHVtbjsKKworICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImLCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgbGluZSA9
IHRleHRQb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CisgICAgICAgIGNvbHVtbiA9IHRl
eHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKKyAgICB9CisKKyAgICBUZXh0UG9z
aXRpb24gZGVjb2RlKERlY29kZXImKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFRleHRQ
b3NpdGlvbiB7IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobGluZSksIE9yZGluYWxO
dW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29sdW1uKSB9OworICAgIH0KK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBTVCwgdHlwZW5hbWUgQ2FjaGVkVHlwZT4KK3N0cnVjdCBDYWNoZWRTb3VyY2VQ
cm92aWRlclNoYXBlIDogcHVibGljIENhY2hlZE9iamVjdDxTVCwgQ2FjaGVkVHlwZT4geworICAg
IGJvb2wgdmFsaWRhdGVkIDogMTsKKyAgICBDYWNoZWRTb3VyY2VPcmlnaW4gc291cmNlT3JpZ2lu
OworICAgIENhY2hlZFN0cmluZyB1cmw7CisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZVVSTERpcmVj
dGl2ZTsKKyAgICBDYWNoZWRTdHJpbmcgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKKyAgICBD
YWNoZWRUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7
CisgICAgICAgIHZhbGlkYXRlZCA9IHNvdXJjZVByb3ZpZGVyLmlzVmFsaWQoKTsKKyAgICAgICAg
c291cmNlT3JpZ2luLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3VyY2VPcmlnaW4o
KSk7CisgICAgICAgIHVybC5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIudXJsKCkpOwor
ICAgICAgICBzb3VyY2VVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVy
LnNvdXJjZVVSTCgpKTsKKyAgICAgICAgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUo
ZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlTWFwcGluZ1VSTCgpKTsKKyAgICAgICAgc3Rh
cnRQb3NpdGlvbi5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc3RhcnRQb3NpdGlvbigp
KTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92
aWRlciYgc291cmNlUHJvdmlkZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAodmFsaWRhdGVk
KQorICAgICAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0VmFsaWQoKTsKKyAgICAgICAgc291cmNl
UHJvdmlkZXIuc2V0U291cmNlVVJMRGlyZWN0aXZlKHNvdXJjZVVSTERpcmVjdGl2ZS5kZWNvZGUo
ZGVjb2RlcikpOworICAgICAgICBzb3VyY2VQcm92aWRlci5zZXRTb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlKHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKTsKKyAgICB9
Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgQ2FjaGVk
U291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRlciwgQ2FjaGVkU3RyaW5nU291
cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFw
ZTxTdHJpbmdTb3VyY2VQcm92aWRlciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+OworCisg
ICAgQ2FjaGVkU3RyaW5nIHNvdXJjZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7Cisg
ICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIHNv
dXJjZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlKCkudG9TdHJpbmcoKSk7
CisgICAgfQorCisgICAgU3RyaW5nU291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGUgc291cmNlVHlwZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFN0cmluZyBkZWNvZGVkU291cmNlID0gc291cmNlLmRlY29kZShkZWNvZGVyKTsKKyAg
ICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRTb3VyY2VPcmlnaW4gPSBzb3VyY2VPcmlnaW4uZGVj
b2RlKGRlY29kZXIpOworICAgICAgICBTdHJpbmcgZGVjb2RlZFVSTCA9IHVybC5kZWNvZGUoZGVj
b2Rlcik7CisgICAgICAgIFRleHRQb3NpdGlvbiBkZWNvZGVkU3RhcnRQb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb24uZGVjb2RlKGRlY29kZXIpOworCisgICAgICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGRlY29k
ZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVjb2RlZFVSTCksIGRl
Y29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRl
Y29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKyAgICAgICAgcmV0dXJuICZzb3VyY2VQcm92
aWRlci5sZWFrUmVmKCk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK3N0
cnVjdCBDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJj
ZVByb3ZpZGVyU2hhcGU8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciwgQ2FjaGVkV2ViQXNzZW1i
bHlTb3VyY2VQcm92aWRlcj4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRTb3VyY2VQcm92aWRl
clNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENhY2hlZFdlYkFzc2VtYmx5U291cmNl
UHJvdmlkZXI+OworCisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVy
JiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBz
b3VyY2VQcm92aWRlcik7CisgICAgICAgIGRhdGEuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3Zp
ZGVyLmRhdGEoKSk7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciogZGVj
b2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8dWludDhf
dD4gZGVjb2RlZERhdGE7CisgICAgICAgIFNvdXJjZU9yaWdpbiBkZWNvZGVkU291cmNlT3JpZ2lu
ID0gc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgU3RyaW5nIGRlY29kZWRV
UkwgPSB1cmwuZGVjb2RlKGRlY29kZXIpOworCisgICAgICAgIGRhdGEuZGVjb2RlKGRlY29kZXIs
IGRlY29kZWREYXRhKTsKKworICAgICAgICBSZWY8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIgPSBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoV1RGTW92
ZShkZWNvZGVkRGF0YSksIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVjb2RlZFVS
TCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlUHJvdmlkZXIuZ2V0KCkp
OworCisgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIubGVha1JlZigpOworICAgIH0KK307
CisjZW5kaWYKKworc3RydWN0IENhY2hlZFNvdXJjZVByb3ZpZGVyIDogcHVibGljIFZhcmlhYmxl
TGVuZ3RoT2JqZWN0PFNvdXJjZVByb3ZpZGVyLCBDYWNoZWRTb3VyY2VQcm92aWRlcj4geworICAg
IFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlOworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKQor
ICAgIHsKKyAgICAgICAgc291cmNlVHlwZSA9IHNvdXJjZVByb3ZpZGVyLnNvdXJjZVR5cGUoKTsK
KyAgICAgICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlk
ZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNl
VHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkU3RyaW5nU291
cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBTdHJpbmdTb3VyY2VQcm92aWRlciY+KHNvdXJjZVByb3ZpZGVyKSk7CisgICAgICAgICAg
ICBicmVhazsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGNhc2UgU291cmNlUHJv
dmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRl
PENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2Rl
ciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyJj4oc291
cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgU291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7CisgICAgICAgIGNhc2Ug
U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNvdXJjZVBy
b3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZl
cjxDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVR5
cGUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRl
clNvdXJjZVR5cGU6OldlYkFzc2VtYmx5OgorICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZl
cjxDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPigpLT5kZWNvZGUoZGVjb2Rlcik7Cisj
ZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTVCwg
dHlwZW5hbWUgQ2FjaGVUeXBlPgorc3RydWN0IENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBl
IDogcHVibGljIENhY2hlZE9iamVjdDxTVCwgIENhY2hlVHlwZT4geworICAgIENhY2hlZFB0cjxD
YWNoZWRTb3VyY2VQcm92aWRlcj4gcHJvdmlkZXI7CisgICAgaW50IHN0YXJ0T2Zmc2V0OworICAg
IGludCBlbmRPZmZzZXQ7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBVbmxpbmtlZFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCisgICAgeworICAgICAgICBwcm92aWRl
ci5lbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZS5tX3Byb3ZpZGVyLmdldCgpKTsKKyAgICAgICAg
c3RhcnRPZmZzZXQgPSBzb3VyY2VDb2RlLnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIGVuZE9mZnNl
dCA9IHNvdXJjZUNvZGUuZW5kT2Zmc2V0KCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgVW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSBjb25zdAorICAg
IHsKKyAgICAgICAgc291cmNlQ29kZS5tX3Byb3ZpZGVyID0gcHJvdmlkZXIuZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBzb3VyY2VDb2RlLm1fc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKKyAg
ICAgICAgc291cmNlQ29kZS5tX2VuZE9mZnNldCA9IGVuZE9mZnNldDsKKyAgICB9Cit9OworCisK
K3N0cnVjdCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGUgOiBwdWJsaWMgQ2FjaGVkVW5saW5rZWRT
b3VyY2VDb2RlU2hhcGU8VW5saW5rZWRTb3VyY2VDb2RlLCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNv
ZGU+IHsgfTsKKworc3RydWN0IENhY2hlZFNvdXJjZUNvZGUgOiBwdWJsaWMgQ2FjaGVkVW5saW5r
ZWRTb3VyY2VDb2RlU2hhcGU8U291cmNlQ29kZSwgQ2FjaGVkU291cmNlQ29kZT4geworICAgIHVz
aW5nIEJhc2UgPSBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxTb3VyY2VDb2RlLCBDYWNo
ZWRTb3VyY2VDb2RlPjsKKworICAgIGludCBmaXJzdExpbmU7CisgICAgaW50IHN0YXJ0Q29sdW1u
OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VD
b2RlKTsKKyAgICAgICAgZmlyc3RMaW5lID0gc291cmNlQ29kZS5maXJzdExpbmUoKS56ZXJvQmFz
ZWRJbnQoKTsKKyAgICAgICAgc3RhcnRDb2x1bW4gPSBzb3VyY2VDb2RlLnN0YXJ0Q29sdW1uKCku
emVyb0Jhc2VkSW50KCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgU291cmNlQ29kZSYgc291cmNlQ29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIEJhc2U6OmRl
Y29kZShkZWNvZGVyLCBzb3VyY2VDb2RlKTsKKyAgICAgICAgc291cmNlQ29kZS5tX2ZpcnN0TGlu
ZSA9IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoZmlyc3RMaW5lKTsKKyAgICAgICAg
c291cmNlQ29kZS5tX3N0YXJ0Q29sdW1uID0gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZElu
dChzdGFydENvbHVtbik7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0
YWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUsIENh
Y2hlZEZ1bmN0aW9uRXhlY3V0YWJsZT4geworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlJik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGRlY29kZShEZWNvZGVyJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBmaXJzdExp
bmVPZmZzZXQ7CisgICAgdW5zaWduZWQgbGluZUNvdW50OworICAgIHVuc2lnbmVkIHVubGlua2Vk
RnVuY3Rpb25OYW1lU3RhcnQ7CisgICAgdW5zaWduZWQgdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47
CisgICAgdW5zaWduZWQgdW5saW5rZWRCb2R5RW5kQ29sdW1uOworICAgIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0OworICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBwYXJhbWV0
ZXJzU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0Owor
ICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAgdW5zaWduZWQgcGFyYW1l
dGVyQ291bnQ7CisgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzOworICAgIFNvdXJjZVBhcnNlTW9k
ZSBzb3VyY2VQYXJzZU1vZGU7CisgICAgdW5zaWduZWQgaXNJblN0cmljdENvbnRleHQgOiAxOwor
ICAgIHVuc2lnbmVkIGhhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25lZCBpc0J1
aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWduZWQgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29u
c3RydWN0b3IgOiAxOworICAgIHVuc2lnbmVkIGNvbnN0cnVjdEFiaWxpdHk6IDE7CisgICAgdW5z
aWduZWQgY29uc3RydWN0b3JLaW5kIDogMjsKKyAgICB1bnNpZ25lZCBmdW5jdGlvbk1vZGUgOiAy
OyAvLyBGdW5jdGlvbk1vZGUKKyAgICB1bnNpZ25lZCBzY3JpcHRNb2RlOiAxOyAvLyBKU1BhcnNl
clNjcmlwdE1vZGUKKyAgICB1bnNpZ25lZCBzdXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVk
IGRlcml2ZWRDb250ZXh0VHlwZTogMjsKKworICAgIENhY2hlZFNvdXJjZUNvZGUgY2xhc3NTb3Vy
Y2U7CisKKyAgICBDYWNoZWRJZGVudGlmaWVyIG5hbWU7CisgICAgQ2FjaGVkSWRlbnRpZmllciBl
Y21hTmFtZTsKKyAgICBDYWNoZWRJZGVudGlmaWVyIGluZmVycmVkTmFtZTsKKworICAgIENhY2hl
ZFZhcmlhYmxlRW52aXJvbm1lbnQgcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7CisKKyAgICBDYWNo
ZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2s+IHVubGlua2VkQ29kZUJsb2NrRm9yQ2FsbDsKKyAgICBDYWNoZWRXcml0ZUJhcnJp
ZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IHVu
bGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KK3N0cnVjdCBDYWNoZWRD
b2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVC
bG9ja1R5cGU+IHsKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgVW5saW5rZWRDb2Rl
QmxvY2smKTsKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgVW5saW5rZWRDb2RlQmxvY2smKSBj
b25zdDsKKworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJl
Z2lzdGVyOworCisgICAgdW5zaWduZWQgdXNlc0V2YWwgOiAxOworICAgIHVuc2lnbmVkIGlzU3Ry
aWN0TW9kZSA6IDE7CisgICAgdW5zaWduZWQgaXNDb25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWdu
ZWQgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOworICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0
aW9uIDogMTsKKyAgICB1bnNpZ25lZCBzdXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVkIHNj
cmlwdE1vZGU6IDE7CisgICAgdW5zaWduZWQgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA6IDE7Cisg
ICAgdW5zaWduZWQgaXNDbGFzc0NvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIHdhc0NvbXBpbGVk
V2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOworICAgIHVuc2lnbmVkIGNvbnN0cnVjdG9yS2luZCA6
IDI7CisgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBl
dmFsQ29udGV4dFR5cGUgOiAyOworICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscyA6IDE7CisKKyAg
ICB1bnNpZ25lZCBsaW5lQ291bnQ7CisgICAgdW5zaWduZWQgZW5kQ29sdW1uOworCisgICAgaW50
IG51bVZhcnM7CisgICAgaW50IG51bUNhbGxlZUxvY2FsczsKKyAgICBpbnQgbnVtUGFyYW1ldGVy
czsKKworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBTb3VyY2VQYXJzZU1vZGUgcGFy
c2VNb2RlOworICAgIENvZGVUeXBlIGNvZGVUeXBlOworCisgICAgc3RkOjphcnJheTx1bnNpZ25l
ZCwgTGlua1RpbWVDb25zdGFudENvdW50PiBsaW5rVGltZUNvbnN0YW50czsKKyAgICBDYWNoZWRN
ZXRhZGF0YVRhYmxlIG1ldGFkYXRhOworCisgICAgQ2FjaGVkT3B0aW9uYWw8Q2FjaGVkUmFyZURh
dGE+IHJhcmVEYXRhOworCisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZVVSTERpcmVjdGl2ZTsKKyAg
ICBDYWNoZWRTdHJpbmcgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKKworICAgIENhY2hlZFB0
cjxDYWNoZWRJbnN0cnVjdGlvblN0cmVhbT4gaW5zdHJ1Y3Rpb25zOworICAgIENhY2hlZFZlY3Rv
cjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBqdW1wVGFyZ2V0czsKKyAgICBDYWNoZWRWZWN0
b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7
CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZEpTVmFsdWU+IGNvbnN0YW50UmVnaXN0ZXJzOworICAg
IENhY2hlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsKKyAgICBDYWNoZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4g
ZXhwcmVzc2lvbkluZm87CisgICAgQ2FjaGVkSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0LCBpbnQ+IG91dE9mTGluZUp1bXBUYXJnZXRzOworCisgICAgQ2FjaGVkVmVjdG9yPENhY2hl
ZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBjb25zdGFudElkZW50aWZpZXJTZXRzOworICAg
IENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVyPiBpZGVudGlmaWVyczsKKyAgICBDYWNoZWRW
ZWN0b3I8Q2FjaGVkQml0VmVjdG9yPiBiaXRWZWN0b3JzOworICAgIENhY2hlZFZlY3RvcjxDYWNo
ZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4gZnVuY3Rpb25EZWNsczsK
KyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4+IGZ1bmN0aW9uRXhwcnM7Cit9OworCitzdHJ1Y3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9j
ayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLCBDYWNo
ZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2ssIENhY2hlZFByb2dyYW1Db2RlQmxvY2s+OworICAgIHVz
aW5nIEJhc2U6OmVuY29kZTsKKworICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyRGVj
bGFyYXRpb25zOworICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgbGV4aWNhbERlY2xhcmF0
aW9uczsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2Rl
KGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgICAgIHZhckRlY2xhcmF0aW9ucy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fdmFyRGVjbGFyYXRpb25zKTsKKyAgICAgICAgbGV4aWNhbERlY2xh
cmF0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7
CisgICAgfQorCisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
Y29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhkZWNv
ZGVyLCAqdGhpcyk7CisgICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52
bSgpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAg
ICB2YXJEZWNsYXJhdGlvbnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV92YXJEZWNsYXJh
dGlvbnMpOworICAgICAgICBsZXhpY2FsRGVjbGFyYXRpb25zLmRlY29kZShkZWNvZGVyLCBjb2Rl
QmxvY2stPm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7
CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZE1vZHVsZUNvZGVCbG9jayA6IHB1YmxpYyBDYWNo
ZWRDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLCBDYWNoZWRNb2R1bGVD
b2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jaywgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrPjsKKyAgICB1c2luZyBC
YXNlOjplbmNvZGU7CisKKyAgICBpbnQgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0
YW50UmVnaXN0ZXJPZmZzZXQ7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7Cisg
ICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2spOworICAgICAgICBtb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IGNvZGVCbG9jay5t
X21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OworICAg
IH0KKworICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jaz4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlz
aENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAq
Y29kZUJsb2NrKTsKKyAgICAgICAgY29kZUJsb2NrLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9s
VGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0ID0gbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAg
fQorfTsKKworc3RydWN0IENhY2hlZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJs
b2NrPFVubGlua2VkRXZhbENvZGVCbG9jaywgQ2FjaGVkRXZhbENvZGVCbG9jaz4geworICAgIHVz
aW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrLCBDYWNoZWRF
dmFsQ29kZUJsb2NrPjsKKyAgICB1c2luZyBCYXNlOjplbmNvZGU7CisKKyAgICBDYWNoZWRWZWN0
b3I8Q2FjaGVkSWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IHZhcmlhYmxlczsK
KyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRFdmFsQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAg
eworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKKyAgICAgICAgdmFy
aWFibGVzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV92YXJpYWJsZXMpOworICAgICAgICBm
dW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVu
Y3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMpOworICAgIH0KKworICAgIFVubGlua2VkRXZhbENvZGVC
bG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxp
bmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFVubGlua2VkRXZhbENvZGVCbG9jaz4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEV2YWxD
b2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0
aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJs
b2NrKTsKKyAgICAgICAgdmFyaWFibGVzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFy
aWFibGVzKTsKKyAgICAgICAgZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMuZGVjb2RlKGRlY29k
ZXIsIGNvZGVCbG9jay0+bV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7CisgICAgICAgIHJl
dHVybiBjb2RlQmxvY2s7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEZ1bmN0aW9uQ29kZUJs
b2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLCBD
YWNoZWRGdW5jdGlvbkNvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxv
Y2s8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaywgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s+Owor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29k
ZXIsIGNvZGVCbG9jayk7CisgICAgfQorCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlz
aENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAq
Y29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9OworCitBTFdB
WVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OlVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2smIGNh
Y2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDsK
KworZW51bSBDYWNoZWRDb2RlQmxvY2tUYWcgeworICAgIENhY2hlZFByb2dyYW1Db2RlQmxvY2tU
YWcsCisgICAgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFnLAorICAgIENhY2hlZEV2YWxDb2RlQmxv
Y2tUYWcsCit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgdHlwZSA9IENhY2hlZFByb2dy
YW1Db2RlQmxvY2s7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWRDb2RlQmxvY2tUYWcgdGFn
ID0gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBD
YWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IHsK
KyAgICB1c2luZyB0eXBlID0gQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOworICAgIHN0YXRpYyBjb25z
dGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENhY2hlZE1vZHVsZUNvZGVCbG9ja1RhZzsK
K307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtl
ZEV2YWxDb2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBlID0gQ2FjaGVkRXZhbENvZGVCbG9jazsK
KyAgICBzdGF0aWMgY29uc3RleHByIENhY2hlZENvZGVCbG9ja1RhZyB0YWcgPSBDYWNoZWRFdmFs
Q29kZUJsb2NrVGFnOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VzaW5nIENhY2hlZENv
ZGVCbG9ja1R5cGUgPSB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxUPjo6dHlwZTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJs
b2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJs
b2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDYWNoZWRD
b2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT4mIGNhY2hlZENvZGVC
bG9jaykKKyAgICA6IEJhc2UoZGVjb2Rlci52bSgpLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2luc3Ry
dWN0aW9ucyhjYWNoZWRDb2RlQmxvY2suaW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyKSkKKyAg
ICAsIG1fbGl2ZW5lc3MobnVsbHB0cikKKyAgICAsIG1fdGhpc1JlZ2lzdGVyKGNhY2hlZENvZGVC
bG9jay50aGlzUmVnaXN0ZXIpCisgICAgLCBtX3Njb3BlUmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2Nr
LnNjb3BlUmVnaXN0ZXIpCisgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKGNhY2hlZENvZGVC
bG9jay5nbG9iYWxPYmplY3RSZWdpc3RlcikKKworICAgICwgbV9zb3VyY2VVUkxEaXJlY3RpdmUo
Y2FjaGVkQ29kZUJsb2NrLnNvdXJjZVVSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpCisgICAg
LCBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoY2FjaGVkQ29kZUJsb2NrLnNvdXJjZU1hcHBp
bmdVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKQorCisgICAgLCBtX3VzZXNFdmFsKGNhY2hl
ZENvZGVCbG9jay51c2VzRXZhbCkKKyAgICAsIG1faXNTdHJpY3RNb2RlKGNhY2hlZENvZGVCbG9j
ay5pc1N0cmljdE1vZGUpCisgICAgLCBtX2lzQ29uc3RydWN0b3IoY2FjaGVkQ29kZUJsb2NrLmlz
Q29uc3RydWN0b3IpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGNhY2hlZENvZGVCbG9j
ay5oYXNDYXB0dXJlZFZhcmlhYmxlcykKKyAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oY2FjaGVk
Q29kZUJsb2NrLmlzQnVpbHRpbkZ1bmN0aW9uKQorICAgICwgbV9zdXBlckJpbmRpbmcoY2FjaGVk
Q29kZUJsb2NrLnN1cGVyQmluZGluZykKKyAgICAsIG1fc2NyaXB0TW9kZShjYWNoZWRDb2RlQmxv
Y2suc2NyaXB0TW9kZSkKKyAgICAsIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dChjYWNoZWRDb2Rl
QmxvY2suaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCkKKyAgICAsIG1faXNDbGFzc0NvbnRleHQoY2Fj
aGVkQ29kZUJsb2NrLmlzQ2xhc3NDb250ZXh0KQorICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1
Z2dpbmdPcGNvZGVzKGNhY2hlZENvZGVCbG9jay53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNv
ZGVzKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVkQ29kZUJsb2NrLmNvbnN0cnVjdG9y
S2luZCkKKyAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNhY2hlZENvZGVCbG9jay5kZXJpdmVk
Q29udGV4dFR5cGUpCisgICAgLCBtX2V2YWxDb250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZXZh
bENvbnRleHRUeXBlKQorICAgICwgbV9oYXNUYWlsQ2FsbHMoY2FjaGVkQ29kZUJsb2NrLmhhc1Rh
aWxDYWxscykKKyAgICAsIG1fbGluZUNvdW50KGNhY2hlZENvZGVCbG9jay5saW5lQ291bnQpCisg
ICAgLCBtX2VuZENvbHVtbihjYWNoZWRDb2RlQmxvY2suZW5kQ29sdW1uKQorICAgICwgbV9udW1W
YXJzKGNhY2hlZENvZGVCbG9jay5udW1WYXJzKQorICAgICwgbV9udW1DYWxsZWVMb2NhbHMoY2Fj
aGVkQ29kZUJsb2NrLm51bUNhbGxlZUxvY2FscykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhjYWNo
ZWRDb2RlQmxvY2subnVtUGFyYW1ldGVycykKKyAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJs
b2NrLmZlYXR1cmVzKQorICAgICwgbV9wYXJzZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9k
ZSkKKyAgICAsIG1fY29kZVR5cGUoY2FjaGVkQ29kZUJsb2NrLmNvZGVUeXBlKQorICAgICwgbV9y
YXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURhdGEuZGVjb2RlQXNQdHIoZGVjb2RlcikpCit7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENv
ZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVW5s
aW5rZWRDb2RlQmxvY2smIGNvZGVCbG9jaykgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGktLTspCisgICAgICAgIGNvZGVCbG9jay5tX2xpbmtU
aW1lQ29uc3RhbnRzW2ldID0gbGlua1RpbWVDb25zdGFudHNbaV07CisKKyAgICBtZXRhZGF0YS5k
ZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEpOworICAgIHByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9ucyk7CisgICAgY29uc3RhbnRSZWdpc3RlcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVC
bG9jay5tX2NvbnN0YW50UmVnaXN0ZXJzLCAmY29kZUJsb2NrKTsKKyAgICBjb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24uZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgZXhwcmVzc2lvbkluZm8uZGVjb2RlKGRl
Y29kZXIsIGNvZGVCbG9jay5tX2V4cHJlc3Npb25JbmZvKTsKKyAgICBvdXRPZkxpbmVKdW1wVGFy
Z2V0cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOwor
ICAgIGp1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9qdW1wVGFyZ2V0cyk7
CisgICAgY29uc3RhbnRJZGVudGlmaWVyU2V0cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1f
Y29uc3RhbnRJZGVudGlmaWVyU2V0cyk7CisgICAgaWRlbnRpZmllcnMuZGVjb2RlKGRlY29kZXIs
IGNvZGVCbG9jay5tX2lkZW50aWZpZXJzKTsKKyAgICBiaXRWZWN0b3JzLmRlY29kZShkZWNvZGVy
LCBjb2RlQmxvY2subV9iaXRWZWN0b3JzKTsKKyAgICBmdW5jdGlvbkRlY2xzLmRlY29kZShkZWNv
ZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkRlY2xzLCAmY29kZUJsb2NrKTsKKyAgICBmdW5jdGlv
bkV4cHJzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkV4cHJzLCAmY29kZUJs
b2NrKTsKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRQcm9ncmFt
Q29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIu
dm0oKS51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVC
bG9jaykKK3sKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25z
dCBDYWNoZWRNb2R1bGVDb2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVj
b2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2Vk
RXZhbENvZGVCbG9jazo6VW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIGNv
bnN0IENhY2hlZEV2YWxDb2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVj
b2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
Y2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkRnVuY3Rp
b25FeGVjdXRhYmxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUmIGV4ZWN1dGFibGUpCit7CisgICAgZmlyc3RMaW5lT2Zmc2V0ID0gZXhl
Y3V0YWJsZS5tX2ZpcnN0TGluZU9mZnNldDsKKyAgICBsaW5lQ291bnQgPSBleGVjdXRhYmxlLm1f
bGluZUNvdW50OworICAgIHVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQgPSBleGVjdXRhYmxlLm1f
dW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKKyAgICB1bmxpbmtlZEJvZHlTdGFydENvbHVtbiA9
IGV4ZWN1dGFibGUubV91bmxpbmtlZEJvZHlTdGFydENvbHVtbjsKKyAgICB1bmxpbmtlZEJvZHlF
bmRDb2x1bW4gPSBleGVjdXRhYmxlLm1fdW5saW5rZWRCb2R5RW5kQ29sdW1uOworICAgIHN0YXJ0
T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3N0YXJ0T2Zmc2V0OworICAgIHNvdXJjZUxlbmd0aCA9IGV4
ZWN1dGFibGUubV9zb3VyY2VMZW5ndGg7CisgICAgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0ID0gZXhl
Y3V0YWJsZS5tX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICB0eXBlUHJvZmlsaW5nU3RhcnRP
ZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHR5cGVQ
cm9maWxpbmdFbmRPZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldDsK
KyAgICBwYXJhbWV0ZXJDb3VudCA9IGV4ZWN1dGFibGUubV9wYXJhbWV0ZXJDb3VudDsKKworICAg
IGZlYXR1cmVzID0gZXhlY3V0YWJsZS5tX2ZlYXR1cmVzOworICAgIHNvdXJjZVBhcnNlTW9kZSA9
IGV4ZWN1dGFibGUubV9zb3VyY2VQYXJzZU1vZGU7CisKKyAgICBpc0luU3RyaWN0Q29udGV4dCA9
IGV4ZWN1dGFibGUubV9pc0luU3RyaWN0Q29udGV4dDsKKyAgICBoYXNDYXB0dXJlZFZhcmlhYmxl
cyA9IGV4ZWN1dGFibGUubV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICBpc0J1aWx0aW5GdW5j
dGlvbiA9IGV4ZWN1dGFibGUubV9pc0J1aWx0aW5GdW5jdGlvbjsKKyAgICBpc0J1aWx0aW5EZWZh
dWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGV4ZWN1dGFibGUubV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3RvcjsKKyAgICBjb25zdHJ1Y3RBYmlsaXR5ID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVj
dEFiaWxpdHk7CisgICAgY29uc3RydWN0b3JLaW5kID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdG9y
S2luZDsKKyAgICBmdW5jdGlvbk1vZGUgPSBleGVjdXRhYmxlLm1fZnVuY3Rpb25Nb2RlOworICAg
IHNjcmlwdE1vZGUgPSBleGVjdXRhYmxlLm1fc2NyaXB0TW9kZTsKKyAgICBzdXBlckJpbmRpbmcg
PSBleGVjdXRhYmxlLm1fc3VwZXJCaW5kaW5nOworICAgIGRlcml2ZWRDb250ZXh0VHlwZSA9IGV4
ZWN1dGFibGUubV9kZXJpdmVkQ29udGV4dFR5cGU7CisKKyAgICBjbGFzc1NvdXJjZS5lbmNvZGUo
ZW5jb2RlciwgZXhlY3V0YWJsZS5tX2NsYXNzU291cmNlKTsKKworICAgIG5hbWUuZW5jb2RlKGVu
Y29kZXIsIGV4ZWN1dGFibGUubmFtZSgpKTsKKyAgICBlY21hTmFtZS5lbmNvZGUoZW5jb2Rlciwg
ZXhlY3V0YWJsZS5lY21hTmFtZSgpKTsKKyAgICBpbmZlcnJlZE5hbWUuZW5jb2RlKGVuY29kZXIs
IGV4ZWN1dGFibGUuaW5mZXJyZWROYW1lKCkpOworCisgICAgcGFyZW50U2NvcGVURFpWYXJpYWJs
ZXMuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUucGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSk7
CisKKyAgICB1bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFi
bGUubV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwpOworICAgIHVubGlua2VkQ29kZUJsb2NrRm9y
Q29uc3RydWN0LmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1fdW5saW5rZWRDb2RlQmxvY2tG
b3JDb25zdHJ1Y3QpOworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAoreworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgZW52OworICAgIHBhcmVudFNjb3BlVERa
VmFyaWFibGVzLmRlY29kZShkZWNvZGVyLCBlbnYpOworCisgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZShkZWNvZGVyLCBlbnYsICp0aGlzKTsKKyAgICBleGVjdXRhYmxlLT5maW5pc2hD
cmVhdGlvbihkZWNvZGVyLnZtKCkpOworCisgICAgY2xhc3NTb3VyY2UuZGVjb2RlKGRlY29kZXIs
IGV4ZWN1dGFibGUtPm1fY2xhc3NTb3VyY2UpOworICAgIHVubGlua2VkQ29kZUJsb2NrRm9yQ2Fs
bC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGws
IGV4ZWN1dGFibGUpOworICAgIHVubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmRlY29kZShk
ZWNvZGVyLCBleGVjdXRhYmxlLT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LCBleGVj
dXRhYmxlKTsKKworICAgIHJldHVybiBleGVjdXRhYmxlOworfQorCitBTFdBWVNfSU5MSU5FIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNv
ZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxl
cywgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJiBjYWNoZWRFeGVjdXRhYmxlKQorICAg
IDogQmFzZShkZWNvZGVyLnZtKCksIGRlY29kZXIudm0oKS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fZmlyc3RMaW5lT2Zmc2V0KGNhY2hlZEV4ZWN1
dGFibGUuZmlyc3RMaW5lT2Zmc2V0KQorICAgICwgbV9saW5lQ291bnQoY2FjaGVkRXhlY3V0YWJs
ZS5saW5lQ291bnQpCisgICAgLCBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoY2FjaGVkRXhl
Y3V0YWJsZS51bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KQorICAgICwgbV91bmxpbmtlZEJvZHlT
dGFydENvbHVtbihjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQm9keVN0YXJ0Q29sdW1uKQorICAg
ICwgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW4oY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEJvZHlF
bmRDb2x1bW4pCisgICAgLCBtX3N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUuc3RhcnRPZmZz
ZXQpCisgICAgLCBtX3NvdXJjZUxlbmd0aChjYWNoZWRFeGVjdXRhYmxlLnNvdXJjZUxlbmd0aCkK
KyAgICAsIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUucGFyYW1ldGVy
c1N0YXJ0T2Zmc2V0KQorICAgICwgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoY2FjaGVkRXhl
Y3V0YWJsZS50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQpCisgICAgLCBtX3R5cGVQcm9maWxpbmdF
bmRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KQorICAgICwg
bV9wYXJhbWV0ZXJDb3VudChjYWNoZWRFeGVjdXRhYmxlLnBhcmFtZXRlckNvdW50KQorICAgICwg
bV9mZWF0dXJlcyhjYWNoZWRFeGVjdXRhYmxlLmZlYXR1cmVzKQorICAgICwgbV9zb3VyY2VQYXJz
ZU1vZGUoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VQYXJzZU1vZGUpCisgICAgLCBtX2lzSW5TdHJp
Y3RDb250ZXh0KGNhY2hlZEV4ZWN1dGFibGUuaXNJblN0cmljdENvbnRleHQpCisgICAgLCBtX2hh
c0NhcHR1cmVkVmFyaWFibGVzKGNhY2hlZEV4ZWN1dGFibGUuaGFzQ2FwdHVyZWRWYXJpYWJsZXMp
CisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hlZEV4ZWN1dGFibGUuaXNCdWlsdGluRnVu
Y3Rpb24pCisgICAgLCBtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKGNhY2hlZEV4
ZWN1dGFibGUuaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpCisgICAgLCBtX2NvbnN0
cnVjdEFiaWxpdHkoY2FjaGVkRXhlY3V0YWJsZS5jb25zdHJ1Y3RBYmlsaXR5KQorICAgICwgbV9j
b25zdHJ1Y3RvcktpbmQoY2FjaGVkRXhlY3V0YWJsZS5jb25zdHJ1Y3RvcktpbmQpCisgICAgLCBt
X2Z1bmN0aW9uTW9kZShjYWNoZWRFeGVjdXRhYmxlLmZ1bmN0aW9uTW9kZSkKKyAgICAsIG1fc2Ny
aXB0TW9kZShjYWNoZWRFeGVjdXRhYmxlLnNjcmlwdE1vZGUpCisgICAgLCBtX3N1cGVyQmluZGlu
ZyhjYWNoZWRFeGVjdXRhYmxlLnN1cGVyQmluZGluZykKKyAgICAsIG1fZGVyaXZlZENvbnRleHRU
eXBlKGNhY2hlZEV4ZWN1dGFibGUuZGVyaXZlZENvbnRleHRUeXBlKQorCisgICAgLCBtX25hbWUo
Y2FjaGVkRXhlY3V0YWJsZS5uYW1lLmRlY29kZShkZWNvZGVyKSkKKyAgICAsIG1fZWNtYU5hbWUo
Y2FjaGVkRXhlY3V0YWJsZS5lY21hTmFtZS5kZWNvZGUoZGVjb2RlcikpCisgICAgLCBtX2luZmVy
cmVkTmFtZShjYWNoZWRFeGVjdXRhYmxlLmluZmVycmVkTmFtZS5kZWNvZGUoZGVjb2RlcikpCisK
KyAgICAsIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMoZGVjb2Rlci52bSgpLm1fY29tcGFjdFZh
cmlhYmxlTWFwLT5nZXQocGFyZW50U2NvcGVURFpWYXJpYWJsZXMpKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgor
QUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlLCBDYWNoZWRD
b2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29k
ZUJsb2NrJiBjb2RlQmxvY2spCit7CisgICAgdGhpc1JlZ2lzdGVyID0gY29kZUJsb2NrLm1fdGhp
c1JlZ2lzdGVyOworICAgIHNjb3BlUmVnaXN0ZXIgPSBjb2RlQmxvY2subV9zY29wZVJlZ2lzdGVy
OworICAgIGdsb2JhbE9iamVjdFJlZ2lzdGVyID0gY29kZUJsb2NrLm1fZ2xvYmFsT2JqZWN0UmVn
aXN0ZXI7CisgICAgdXNlc0V2YWwgPSBjb2RlQmxvY2subV91c2VzRXZhbDsKKyAgICBpc1N0cmlj
dE1vZGUgPSBjb2RlQmxvY2subV9pc1N0cmljdE1vZGU7CisgICAgaXNDb25zdHJ1Y3RvciA9IGNv
ZGVCbG9jay5tX2lzQ29uc3RydWN0b3I7CisgICAgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBjb2Rl
QmxvY2subV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICBpc0J1aWx0aW5GdW5jdGlvbiA9IGNv
ZGVCbG9jay5tX2lzQnVpbHRpbkZ1bmN0aW9uOworICAgIHN1cGVyQmluZGluZyA9IGNvZGVCbG9j
ay5tX3N1cGVyQmluZGluZzsKKyAgICBzY3JpcHRNb2RlID0gY29kZUJsb2NrLm1fc2NyaXB0TW9k
ZTsKKyAgICBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID0gY29kZUJsb2NrLm1faXNBcnJvd0Z1bmN0
aW9uQ29udGV4dDsKKyAgICBpc0NsYXNzQ29udGV4dCA9IGNvZGVCbG9jay5tX2lzQ2xhc3NDb250
ZXh0OworICAgIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMgPSBjb2RlQmxvY2subV93
YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOworICAgIGNvbnN0cnVjdG9yS2luZCA9IGNv
ZGVCbG9jay5tX2NvbnN0cnVjdG9yS2luZDsKKyAgICBkZXJpdmVkQ29udGV4dFR5cGUgPSBjb2Rl
QmxvY2subV9kZXJpdmVkQ29udGV4dFR5cGU7CisgICAgZXZhbENvbnRleHRUeXBlID0gY29kZUJs
b2NrLm1fZXZhbENvbnRleHRUeXBlOworICAgIGhhc1RhaWxDYWxscyA9IGNvZGVCbG9jay5tX2hh
c1RhaWxDYWxsczsKKyAgICBsaW5lQ291bnQgPSBjb2RlQmxvY2subV9saW5lQ291bnQ7CisgICAg
ZW5kQ29sdW1uID0gY29kZUJsb2NrLm1fZW5kQ29sdW1uOworICAgIG51bVZhcnMgPSBjb2RlQmxv
Y2subV9udW1WYXJzOworICAgIG51bUNhbGxlZUxvY2FscyA9IGNvZGVCbG9jay5tX251bUNhbGxl
ZUxvY2FsczsKKyAgICBudW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLm1fbnVtUGFyYW1ldGVyczsK
KyAgICBmZWF0dXJlcyA9IGNvZGVCbG9jay5tX2ZlYXR1cmVzOworICAgIHBhcnNlTW9kZSA9IGNv
ZGVCbG9jay5tX3BhcnNlTW9kZTsKKyAgICBjb2RlVHlwZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBl
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVDb25zdGFudENvdW50OyBpLS07KQor
ICAgICAgICBsaW5rVGltZUNvbnN0YW50c1tpXSA9IGNvZGVCbG9jay5tX2xpbmtUaW1lQ29uc3Rh
bnRzW2ldOworCisgICAgbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFk
YXRhKTsKKyAgICByYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEp
OworCisgICAgc291cmNlVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9z
b3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsKKyAgICBzb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZl
LmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9zb3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsK
KworICAgIGluc3RydWN0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1faW5zdHJ1Y3Rp
b25zLmdldCgpKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5lbmNvZGUoZW5jb2Rl
ciwgY29kZUJsb2NrLm1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMpOworICAgIGNvbnN0YW50
UmVnaXN0ZXJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudFJlZ2lzdGVycyk7
CisgICAgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmVuY29kZShlbmNvZGVyLCBj
b2RlQmxvY2subV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgIGV4cHJl
c3Npb25JbmZvLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9leHByZXNzaW9uSW5mbyk7Cisg
ICAganVtcFRhcmdldHMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsK
KyAgICBvdXRPZkxpbmVKdW1wVGFyZ2V0cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fb3V0
T2ZMaW5lSnVtcFRhcmdldHMpOworCisgICAgY29uc3RhbnRJZGVudGlmaWVyU2V0cy5lbmNvZGUo
ZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRJZGVudGlmaWVyU2V0cyk7CisgICAgaWRlbnRp
ZmllcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2lkZW50aWZpZXJzKTsKKyAgICBiaXRW
ZWN0b3JzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0b3JzKTsKKyAgICBmdW5j
dGlvbkRlY2xzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkRlY2xzKTsKKyAg
ICBmdW5jdGlvbkV4cHJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkV4cHJz
KTsKK30KKworc3RydWN0IENhY2hlZFNvdXJjZUNvZGVLZXkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0
PFNvdXJjZUNvZGVLZXksIENhY2hlZFNvdXJjZUNvZGVLZXk+IHsKKyAgICBDYWNoZWRVbmxpbmtl
ZFNvdXJjZUNvZGUgc291cmNlQ29kZTsKKyAgICBDYWNoZWRTdHJpbmcgbmFtZTsKKyAgICB1bnNp
Z25lZCBmbGFnczsKKyAgICB1bnNpZ25lZCBoYXNoOworICAgIGludCBmdW5jdGlvbkNvbnN0cnVj
dG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsKKyAgICAgICAgc291cmNlQ29k
ZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fc291cmNlQ29kZSk7CisgICAgICAgIG5hbWUuZW5jb2Rl
KGVuY29kZXIsIGtleS5tX25hbWUpOworICAgICAgICBmbGFncyA9IGtleS5tX2ZsYWdzLm1fZmxh
Z3M7CisgICAgICAgIGhhc2ggPSBrZXkuaGFzaCgpOworICAgICAgICBmdW5jdGlvbkNvbnN0cnVj
dG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0ga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFt
ZXRlcnNFbmRQb3NpdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBTb3VyY2VDb2RlS2V5JiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBzb3VyY2VDb2Rl
LmRlY29kZShkZWNvZGVyLCBrZXkubV9zb3VyY2VDb2RlKTsKKyAgICAgICAgbmFtZS5kZWNvZGUo
ZGVjb2Rlciwga2V5Lm1fbmFtZSk7CisgICAgICAgIGtleS5tX2ZsYWdzLm1fZmxhZ3MgPSBmbGFn
czsKKyAgICAgICAga2V5Lm1faGFzaCA9IGhhc2g7CisgICAgICAgIGtleS5tX2Z1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1l
dGVyc0VuZFBvc2l0aW9uOworICAgIH0KK307CisKK3N0cnVjdCBHZW5lcmljQ2FjaGVFbnRyeSB7
CisgICAgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZzsKKworICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2Rl
S2V5LCBVbmxpbmtlZENvZGVCbG9jayo+IGRlY29kZShEZWNvZGVyJikgY29uc3Q7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CitzdHJ1Y3QgQ2FjaGVFbnRy
eSA6IHB1YmxpYyBHZW5lcmljQ2FjaGVFbnRyeSB7CisgICAgQ2FjaGVkU291cmNlQ29kZUtleSBr
ZXk7CisgICAgQ2FjaGVkUHRyPENhY2hlZENvZGVCbG9ja1R5cGU8VW5saW5rZWRDb2RlQmxvY2tU
eXBlPj4gY29kZUJsb2NrOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwgc3Rk
OjpwYWlyPFNvdXJjZUNvZGVLZXksIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrVHlwZSo+IHBhaXIp
CisgICAgeworICAgICAgICB0YWcgPSBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+Ojp0YWc7CisgICAgICAgIGtleS5lbmNvZGUoZW5jb2RlciwgcGFpci5maXJz
dCk7CisgICAgICAgIGNvZGVCbG9jay5lbmNvZGUoZW5jb2RlciwgcGFpci5zZWNvbmQpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgR2VuZXJpY0NhY2hlRW50cnk7CisKKyAgICBzdGQ6
OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTb3VyY2VDb2RlS2V5IGRlY29kZWRL
ZXk7CisgICAgICAgIGtleS5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZEtleSk7CisgICAgICAgIHJl
dHVybiB7IFdURk1vdmUoZGVjb2RlZEtleSksIGNvZGVCbG9jay5kZWNvZGUoZGVjb2RlcikgfTsK
KyAgICB9Cit9OworCitzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sq
PiBHZW5lcmljQ2FjaGVFbnRyeTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoICh0YWcpIHsKKyAgICBjYXNlIENhY2hlZFByb2dyYW1Db2RlQmxvY2tUYWc6Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgY2FzZSBDYWNo
ZWRNb2R1bGVDb2RlQmxvY2tUYWc6CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IENhY2hlRW50cnk8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5k
ZWNvZGUoZGVjb2Rlcik7CisgICAgY2FzZSBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnOgorICAgICAg
ICAvLyBXZSBkbyBub3QgY2FjaGUgZXZhbCBjb2RlIGJsb2NrcworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlPgordm9pZCBlbmNvZGVDb2RlQmxvY2soRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIGF1dG8qIGVudHJ5ID0gZW5jb2Rlci50ZW1wbGF0ZSBtYWxsb2M8Q2FjaGVF
bnRyeTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+PigpOworICAgIGVudHJ5LT5lbmNvZGUoZW5jb2Rl
ciwgIHsga2V5LCBqc0Nhc3Q8Y29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY29kZUJsb2Nr
KSB9KTsKK30KKworc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVD
b2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8g
PSBjb2RlQmxvY2stPmNsYXNzSW5mbyh2bSk7CisKKyAgICBFbmNvZGVyIGVuY29kZXIodm0pOwor
ICAgIGlmIChjbGFzc0luZm8gPT0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisg
ICAgICAgIGVuY29kZUNvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KGVuY29kZXIs
IGtleSwgY29kZUJsb2NrKTsKKyAgICBlbHNlIGlmIChjbGFzc0luZm8gPT0gVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIGVuY29kZUNvZGVCbG9jazxVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KGVuY29kZXIsIGtleSwgY29kZUJsb2NrKTsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVChjbGFzc0luZm8gPT0gVW5saW5rZWRFdmFsQ29kZUJsb2Nr
OjppbmZvKCkpOworCisgICAgcmV0dXJuIGVuY29kZXIucmVsZWFzZSgpOworfQorCitVbmxpbmtl
ZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBjb25zdCBh
dXRvKiBjYWNoZWRFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR2VuZXJpY0NhY2hlRW50
cnkqPihidWZmZXIpOworICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXplKTsKKyAg
ICBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBlbnRyeTsKKyAg
ICB7CisgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgZW50cnkgPSBj
YWNoZWRFbnRyeS0+ZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworICAgIGlmIChlbnRyeS5maXJz
dCAhPSBrZXkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBlbnRyeS5zZWNv
bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNiOGFjYjZjZTU3MGU5NzI2Mzg5YzI2ZDcw
YmNiYTIxZGE4ZDRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlND
YXN0LmgiCisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgU291cmNlQ29kZUtleTsKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrOworCitzdGQ6OnBh
aXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IGVuY29kZUNvZGVCbG9jayhWTSYsIGNvbnN0
IFNvdXJjZUNvZGVLZXkmLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayopOworVW5saW5rZWRDb2Rl
QmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29u
c3Qgdm9pZCosIHNpemVfdCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlPgorVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBkZWNvZGVDb2RlQmxvY2soVk0mIHZtLCBj
b25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUp
Cit7CisgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihkZWNvZGVDb2Rl
QmxvY2tJbXBsKHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCmluZGV4IDQ2
MDE3OTIxYTQ2ZWZjNjQxNzI1ZDBhMjM1MjUyOTAzNWFmNWYzYWQuLmMzMmQyMDRiNmNkODk2ODE4
MWNiMGQxZGYwZWFiODNlYzExODE5ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29kZUNhY2hlLmNwcApAQCAtNDMsNiArNDMsOSBAQCB2b2lkIENvZGVDYWNoZU1hcDo6cHJ1
bmVTbG93Q2FzZSgpCiAKICAgICB3aGlsZSAobV9zaXplID4gbV9jYXBhY2l0eSB8fCAhY2FuUHJ1
bmVRdWlja2x5KCkpIHsKICAgICAgICAgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOworCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKCppdC0+dmFsdWUuY2VsbC0+dm0oKSwgaXQt
PmtleSwgaXQtPnZhbHVlKTsKKwogICAgICAgICBtX3NpemUgLT0gaXQtPmtleS5sZW5ndGgoKTsK
ICAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKICAgICB9CkBAIC01OSw5ICs2Miw4IEBAIFVubGlu
a2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhW
TSYgdm0sIEV4ZWN1dGFibGVUCiAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8gVHlwZVByb2Zp
bGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAgICAgICB2bS5j
b250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDog
Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAgICBXVEY6Om51bGxvcHQpOwot
ICAgIFNvdXJjZUNvZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBk
YXRlQWdlKGtleSk7Ci0gICAgaWYgKGNhY2hlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7
Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBqc0Nh
c3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY2FjaGUtPmNlbGwuZ2V0KCkpOworICAgIFVubGlu
a2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3NvdXJjZUNvZGUuZmluZENh
Y2hlQW5kVXBkYXRlQWdlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7CisgICAgaWYg
KHVubGlua2VkQ29kZUJsb2NrICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAg
IHVuc2lnbmVkIGxpbmVDb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5saW5lQ291bnQoKTsKICAg
ICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZENvZGVCbG9jay0+c3RhcnRDb2x1
bW4oKSArIHNvdXJjZS5zdGFydENvbHVtbigpLm9uZUJhc2VkSW50KCk7CiAgICAgICAgIGJvb2wg
ZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9ICFsaW5lQ291bnQ7CkBAIC03MSw5ICs3Myw5IEBAIFVu
bGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayhWTSYgdm0sIEV4ZWN1dGFibGVUCiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3Vy
Y2VNYXBwaW5nVVJMRGlyZWN0aXZlKHVubGlua2VkQ29kZUJsb2NrLT5zb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKCkpOwogICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7CiAgICAgfQot
ICAgIAorCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJsZXNVbmRlclREWjsKLSAgICBV
bmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtl
ZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBlPih2bSwgZXhl
Y3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVy
cm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7CisgICAgdW5saW5rZWRD
b2RlQmxvY2sgPSBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlw
ZSwgRXhlY3V0YWJsZVR5cGU+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNj
cmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxl
c1VuZGVyVERaKTsKIAogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jayAmJiBPcHRpb25zOjp1c2VD
b2RlQ2FjaGUoKSkKICAgICAgICAgbV9zb3VyY2VDb2RlLmFkZENhY2hlKGtleSwgU291cmNlQ29k
ZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgbV9zb3VyY2VDb2RlLmFnZSgpKSk7CkBAIC0x
MTAsOSArMTEyLDggQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0
VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHYKICAgICAgICAgdm0udHlwZVBy
b2ZpbGVyKCkgPyBUeXBlUHJvZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJvZmlsZXJFbmFibGVk
OjpObywgCiAgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJv
ZmlsZXJFbmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCiAgICAg
ICAgIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwotICAgIFNvdXJj
ZUNvZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBkYXRlQWdlKGtl
eSk7Ci0gICAgaWYgKGNhY2hlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7Ci0gICAgICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FjaGUtPmNlbGwuZ2V0KCkpOworICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVw
ZGF0ZUFnZTxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGtleSk7CisgICAgaWYgKGV4
ZWN1dGFibGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpIHsKICAgICAgICAgc291cmNlLnBy
b3ZpZGVyKCktPnNldFNvdXJjZVVSTERpcmVjdGl2ZShleGVjdXRhYmxlLT5zb3VyY2VVUkxEaXJl
Y3RpdmUoKSk7CiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKGV4ZWN1dGFibGUtPnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoKSk7CiAgICAg
ICAgIHJldHVybiBleGVjdXRhYmxlOwpAQCAtMTU1LDQgKzE1NiwxMCBAQCBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0
YWJsZShWTSYgdgogICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7CiB9CiAKK3ZvaWQgQ29k
ZUNhY2hlOjp3cml0ZShWTSYgdm0pCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1fc291
cmNlQ29kZSkKKyAgICAgICAgd3JpdGVDb2RlQmxvY2sodm0sIGl0LmtleSwgaXQudmFsdWUpOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2Fj
aGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCmluZGV4IDhh
NDQxOWY5NmNhOGZhNGE2MjliZTBlOWE3ODI3Y2JhZjY4Y2ZmODYuLjk5Mzk1ZjJjZDI4NDExMzlh
MDM1YzhiMTU4OWJiOTM5YzY5YzU3MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKICNpbmNsdWRl
ICJFeGVjdXRhYmxlSW5mby5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJQ
YXJzZXIuaCIKQEAgLTM3LDYgKzM4LDcgQEAKICNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNs
dWRlICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTg5LDEzICs5MSw3NiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFNvdXJj
ZUNvZGVWYWx1ZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtl
eSkKKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
ZmV0Y2hGcm9tRGlza0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisgICAg
eworI2lmIE9TKERBUldJTikKKyAgICAgICAgY29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9u
czo6ZGlza0NhY2hlUGF0aCgpOworICAgICAgICBpZiAoIWNhY2hlUGF0aCkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBrZXkuaGFzaCgpOwor
ICAgICAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisgICAgICAgIGludCBjb3VudCA9IHNucHJpbnRm
KGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7CisgICAgICAg
IGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisgICAgICAg
IGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlu
dCByYyA9IGZsb2NrKGZkLCBMT0NLX1NIIHwgTE9DS19OQik7CisgICAgICAgIGlmIChyYykgewor
ICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIH0KKworICAgICAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICAgICAgaW50IHJlcyA9IGZzdGF0
KGZkLCAmc2IpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2Iu
c3Rfc2l6ZSk7CisgICAgICAgIGlmIChyZXMgfHwgIXNpemUpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxwdHIsIHNp
emUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAgICAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+KHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSk7CisKKyAgICAgICAgaWYgKCF1bmxp
bmtlZENvZGVCbG9jaykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGFk
ZENhY2hlKGtleSwgU291cmNlQ29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgbV9hZ2Up
KTsKKyAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOworI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHZtKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworI2VuZGlmCisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlPgorICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPFVu
bGlua2VkQ29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp2YWx1ZSAmJiAhc3RkOjpp
c19zYW1lPFVubGlua2VkQ29kZUJsb2NrVHlwZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFs
dWUsIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+CisgICAgZmV0Y2hGcm9tRGlzayhWTSYgdm0sIGNv
bnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKKyAgICB7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrID0gZmV0Y2hGcm9tRGlza0ltcGw8VW5saW5rZWRDb2RlQmxvY2tUeXBl
Pih2bSwga2V5KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlRGlza0NhY2hl
KCkpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIGNvZGVCbG9jazsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVCbG9jaywgVD46OnZh
bHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s+Ojp2YWx1ZSwgVCo+
CisgICAgZmV0Y2hGcm9tRGlzayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmKSB7IHJldHVybiBu
dWxscHRyOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+
CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBmaW5kQ2FjaGVBbmRVcGRhdGVBZ2UoVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCiAgICAgewogICAgICAgICBwcnVuZSgpOwogCiAg
ICAgICAgIGl0ZXJhdG9yIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAgIGlm
IChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICByZXR1cm4gZmV0Y2hGcm9tRGlzazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+
KHZtLCBrZXkpOwogCiAgICAgICAgIGludDY0X3QgYWdlID0gbV9hZ2UgLSBmaW5kUmVzdWx0LT52
YWx1ZS5hZ2U7CiAgICAgICAgIGlmIChhZ2UgPiBtX2NhcGFjaXR5KSB7CkBAIC0xMTUsNyArMTgw
LDcgQEAgcHVibGljOgogICAgICAgICBmaW5kUmVzdWx0LT52YWx1ZS5hZ2UgPSBtX2FnZTsKICAg
ICAgICAgbV9hZ2UgKz0ga2V5Lmxlbmd0aCgpOwogCi0gICAgICAgIHJldHVybiAmZmluZFJlc3Vs
dC0+dmFsdWU7CisgICAgICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4o
ZmluZFJlc3VsdC0+dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAgfQogCiAgICAgQWRkUmVzdWx0IGFk
ZENhY2hlKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNlQ29kZVZhbHVlJiB2
YWx1ZSkKQEAgLTE5Nyw2ICsyNjIsNyBAQCBwdWJsaWM6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFNvdXJjZUNvZGUmLCBEZWJ1Z2dlck1vZGUsIE9wdGlvbmFsPGlu
dD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgUGFyc2VyRXJyb3Im
KTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fc291cmNlQ29kZS5jbGVhcigpOyB9CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZShWTSYpOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRl
IDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBlPiAKQEAg
LTI1Niw0ICszMjIsMzYgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZW5lcmF0ZVVubGlua2Vk
Q29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGEKICAgICByZXR1cm4gdW5s
aW5rZWRDb2RlQmxvY2s7CiB9CiAKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgd3JpdGVDb2Rl
QmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVW
YWx1ZSYgdmFsdWUpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0
aCA9IE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0g
anNEeW5hbWljQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsK
KyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgaGFz
aCA9IGtleS5oYXNoKCk7CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGludCBjb3VudCA9
IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7
CisgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZXN1bHQgPSBlbmNvZGVD
b2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKKworICAgIGludCBmZCA9IG9wZW4oZmlsZW5h
bWUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaW50IHJjID0gZmxvY2soZmQsIExP
Q0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJjKQorICAgICAgICA6OndyaXRlKGZkLCByZXN1
bHQuZmlyc3QuZ2V0KCksIHJlc3VsdC5zZWNvbmQpOworICAgIGNsb3NlKGZkKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworI2VuZGlmCit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKaW5kZXggY2E1MzE2MzZiNzgxZTg2
OWVhNzhmNzZkMjViNWU0YWVhZDQxNjE4NS4uMmJjYWE5YjY3NjJkMjUyZjBiMzFlZTFhODk0OWNk
ZDgzNzQ2ODAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNw
cApAQCAtMTY4OCwxMSArMTY4OCw2IEBAIGJvb2wgSlNCaWdJbnQ6OmdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWlubGluZSBzaXplX3QgSlNCaWdJbnQ6Om9mZnNldE9mRGF0YSgpCi17
Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoRGlnaXQpPihzaXpl
b2YoSlNCaWdJbnQpKTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogSlNCaWdJ
bnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIENoYXJUeXBlKiAgZGF0YSwg
dW5zaWduZWQgbGVuZ3RoLCBFcnJvclBhcnNlTW9kZSBlcnJvclBhcnNlTW9kZSkKIHsKQEAgLTE3
OTUsMTEgKzE3OTAsNiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSog
ZXhlYywgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwgdW5zaWduZWQgbAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1pbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0KiBKU0JpZ0ludDo6ZGF0YVN0b3JhZ2Uo
KQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PERpZ2l0Kj4ocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkRhdGEoKSk7Ci19Ci0KIGlubGluZSBKU0JpZ0ludDo6
RGlnaXQgSlNCaWdJbnQ6OmRpZ2l0KHVuc2lnbmVkIG4pCiB7CiAgICAgQVNTRVJUKG4gPCBsZW5n
dGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAppbmRleCAyYjNi
ZjkzMDdkOGRiYmIxMTA3NTMzZWQ4MzAzNDdiY2RkNGE2MTBiLi5lMmE2NTc4MTA3MTcyOTRhOTRm
ODE3ODRhMmU3MWM0OGE4YWQ1YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0JpZ0lu
dCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOworICAgIGZyaWVuZCBz
dHJ1Y3QgQ2FjaGVkQmlnSW50OwogCiBwdWJsaWM6CiAKQEAgLTIyOCw4ICsyMjksMTUgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoSlNCaWdJbnQq
IHgpOwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCk7Ci0gICAgRGlnaXQqIGRhdGFTdG9y
YWdlKCk7CisgICAgaW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6
ZW9mKEpTQmlnSW50KSk7CisgICAgfQorCisgICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOworICAgIH0KIAogICAgIERp
Z2l0IGRpZ2l0KHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDY2Y2VjM2Fm
NzlmNmE4MTNkOThiMzA2NzhlN2Q0ZmRmODZlYzYxMjYuLjk2MmQ4N2U5OTI2ZGFjZTM3NjZmNTk3
M2QwOTZkODgyMjdlMWRlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCkBAIC01MTcsNiArNTE3LDEyIEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVu
dE9wdGlvbnMoKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwogI2VuZGlm
CisKKyAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQorICAgICAgICBPcHRpb25zOjpk
aXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOworCisgICAgaWYgKCFPcHRpb25zOjpkaXNrQ2FjaGVQ
YXRoKCkpCisgICAgICAgIE9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKIH0KIAog
dm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAppbmRleCBlNjdkOTM5M2UwYzI2OGY4OTE3Yzk4MjI5YzFhZjM0OGFlMjFmMzYxLi40
OGY2ZTYyYTdhMDJiOTQxYTljMzFlODgxY2E2Y2IxZjI5ZDIyNGI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC01MDgsNiArNTA4LDggQEAgY29uc3RleHByIGJv
b2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxzZTsKICAgICB2KGJvb2wsIHRy
YWNlTExJbnRFeGVjdXRpb24sIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHRyYWNlTExJbnRTbG93UGF0aCwgZmFsc2UsIENvbmZpZ3VyYWJsZSwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgdHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbiwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYob3B0aW9uU3RyaW5nLCBkaXNrQ2FjaGVQYXRoLCBudWxscHRyLCBS
ZXN0cmljdGVkLCAiIikgXAorICAgIHYoYm9vbCwgZm9yY2VEaXNrQ2FjaGUsIGZhbHNlLCBSZXN0
cmljdGVkLCAiIikgXAogCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuaAppbmRleCA4M2FhZDM1NjAzOGViMmVjNzZlNmI4YmQzN2M3
NDc2Y2VjOTEzNTJlLi44OTMwNDU0YTRjMjNiYTg5ODY5ZWQ0NjRmNzQzYjI5YjMyZTkwMjlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaApAQCAtNDEsNiArNDEsOCBAQCBj
bGFzcyBWTTsKIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cEZsYWdzIHJlZ0V4cEZsYWdzKGNvbnN0
IFN0cmluZyYpOwogCiBjbGFzcyBSZWdFeHAgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBm
cmllbmQgc3RydWN0IENhY2hlZFJlZ0V4cDsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxs
IEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKaW5kZXggNDBlN2M3
ZWMyZmQ2MGI1ODQyYTU3Mjg1YWM5N2IwZjZhOTU5Mzk1ZC4uNWY1MDM0NGEzMDVjZDhmMDc3MDEz
MDc0ZmRlMGZkZDJlYzMzYWQyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCkBAIC0zOSw2ICszOSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXJlIHNv
IHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6eSBsaWtlCiAvLyAiZGVs
ZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRlZmluZU93blByb3BlcnR5Lgog
Y2xhc3MgU2NvcGVkQXJndW1lbnRzVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBm
cmllbmQgc3RydWN0IENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOworCiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKaW5kZXggZWQ5ODJlMzFmNTVi
YmJjOTE2MjhkMjM0MTc4MTJiYjRmNmM2ODcxMS4uNWVlZGVlNmY4MTg2ZGFlYTMwNDA5ODEzZDQ1
MzQ2YWMwNzVlZmQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJh
bWUuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkhlYXAu
aCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAwMmFmNGEwMTYwMzRjOTdhMzI2MjJiNTFiMDRm
YzI5NmU1MmJkNzUxLi43YmNiNDJmMmQ3ZWEyZTcxMTNiOWYzODU3OGU0NWJjYTc4ZjQxYjhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKaW5kZXggOTE1N2Q1Yjgy
OTIwMGZiNmE5NjVlYTNiYzc4Njk2ZTUzMmE5MmI5NS4uMjIwZjAzN2JiMWUwMWE4MDlhMWQ3YWVi
MTk5MjBlZjdhYjM1YzI1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oCkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNz
aW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+CiAvLyBj
b3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBT
eW1ib2xUYWJsZUVudHJ5IHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFN5bWJvbFRhYmxlRW50
cnk7CisKIHByaXZhdGU6CiAgICAgc3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhp
bnRwdHJfdCBiaXRzKQogICAgIHsKQEAgLTQzNiw2ICs0MzgsOCBAQCBzdHJ1Y3QgU3ltYm9sVGFi
bGVJbmRleEhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPFN5bWJvbFRhYmxlRW50cnk+IHsKIH07CiAK
IGNsYXNzIFN5bWJvbFRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5kIHN0
cnVjdCBDYWNoZWRTeW1ib2xUYWJsZTsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJh
c2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAppbmRleCA3NTVj
ZDdhOWFhNTc2YzZmN2E0ZGIxNGMwZDllMzAyYzc4ZGI1MTc4Li40MWQ5NzIyZTVmMzc0MDQ5YzI0
OGM1Y2ViYjgyNjc4YTA1MzRjYTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaApAQCAtMzMsNiArMzMsMTAgQEAK
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKK25hbWVzcGFjZSBKU0Mgeworc3RydWN0IENhY2hlZEJpdFZlY3RvcjsKK30KKwogbmFt
ZXNwYWNlIFdURiB7CiAKIC8vIFRoaXMgaXMgYSBzcGFjZS1lZmZpY2llbnQsIHJlc2l6ZWFibGUg
Yml0dmVjdG9yIGNsYXNzLiBJbiB0aGUgY29tbW9uIGNhc2UgaXQKQEAgLTMzOCw2ICszNDIsOCBA
QCBwdWJsaWM6CiAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KICAgICAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgSlND
OjpDYWNoZWRCaXRWZWN0b3I7CisKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigp
CiAgICAgewogICAgICAgICByZXR1cm4gc2l6ZW9mKHZvaWQqKSA8PCAzOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDNlNjhmMDc2YzFlM2ZmYzZk
OGU5NzYzMjE4N2Y5YmE5N2UzYThkZjIuLjRlNjExNDgwOWEyNmMzMmE2Nzk0Nzc1N2UwNzRjZjZi
MWNlYjZlNjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wMS0wNyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxv
QGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBieXRlY29kZSB0byBkaXNrCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3ODIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ2MDg0OTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGhlbHBlciB0byBleGVjdXRlIGJ5dGVjb2RlLWNhY2hl
IHRlc3RzOiBpdCBleGVjdXRlcyBlYWNoIHRlc3QKKyAgICAgICAgdHdpY2UsIHRoZSBmaXJzdCB3
aXRoIEpTQ19kaXNrQ2FjaGVQYXRoIHNldCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICAg
ICAgYW5kIHNlY29uZCB3aXRoIEpTQ19mb3JjZURpc2tDYWNoZT10cnVlIChpbiBhZGRpdGlvbiB0
byB0aGUgY2FjaGUgcGF0aCkKKyAgICAgICAgdG8gZ3VhcmFudGVlIHRoYXQgb25seSB0aGUgZGlz
ayBjYWNoZSBpcyBiZWluZyB1c2VkIGFuZCBubyBuZXcKKyAgICAgICAgVW5saW5rZWRDb2RlQmxv
Y2tzIGFyZSBiZWluZyBjcmVhdGVkLgorCisgICAgICAgICogU2NyaXB0cy9qc2Mtc3RyZXNzLXRl
c3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlcjogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0wMS0wNiAgRnVqaWkgSGlyb25v
cmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luXVtDbGFuZ10gRml4
IGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9mIE1pbmlCcm93c2VyCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVy
IGIvVG9vbHMvU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10
ZXN0LWhlbHBlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGM5MjkyMWRiOGQ0ZGQyNTAyNzQ0MGM2Y2Y0ZmQxZjlm
YWY3ZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3Qt
aGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlcgpAQCAtMCwwICsxLDQ4IEBACisjIS91
c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWly
ZSAncnVieWdlbXMnCityZXF1aXJlICdmaWxldXRpbHMnCityZXF1aXJlICdqc29uJworcmVxdWly
ZSAnc2hlbGx3b3JkcycKK3JlcXVpcmUgJ3RtcGRpcicKKworZGVmIG15c3lzKCpjbWQpCisgICAg
cmFpc2UgIkNvbW1hbmQgI3tjbWQuaW5zcGVjdH0gZmFpbGVkOiAjeyQ/Lmluc3BlY3R9IiB1bmxl
c3Mgc3lzdGVtKCpjbWQpCitlbmQKKworcGF0aFRvVk0gPSBBUkdWWzBdCitpbnB1dEZpbGUgPSBB
UkdWWzFdCitleHRyYU9wdGlvbnMgPSBBUkdWWzIuLi0xXQorZGlza0NhY2hlUGF0aCA9IERpci5t
a3RtcGRpciBbaW5wdXRGaWxlLCAnYnl0ZWNvZGUtY2FjaGUnXQorCitiZWdpbgorICAgIEVOVlsi
SlNDX2Rpc2tDYWNoZVBhdGgiXSA9IGRpc2tDYWNoZVBhdGgKKyAgICBteXN5cyhwYXRoVG9WTSwg
aW5wdXRGaWxlLCAqZXh0cmFPcHRpb25zKQorICAgIEVOVlsiSlNDX2ZvcmNlRGlza0NhY2hlIl0g
PSAidHJ1ZSIKKyAgICBteXN5cyhwYXRoVG9WTSwgaW5wdXRGaWxlLCAqZXh0cmFPcHRpb25zKQor
ZW5zdXJlCisgICAgRmlsZVV0aWxzLnJtX3JmKGRpc2tDYWNoZVBhdGgpCitlbmQKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IDM1YTllYjFjNTVlMTAyYjUyZGQ0NTU3MDIzZDkyZDE2
MDNlMGM1YTEuLjNhZjRlOGM1OGVjOGZkMjRlNTUzMzBiMTRlNGYzZjMwNTZjMmEzOWIgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNjU1LDYgKzY1NSwxNSBAQCBkZWYgcnVuRGVm
YXVsdCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIHJ1bigiZGVmYXVsdCIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKK2RlZiBy
dW5CeXRlY29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCisgICAgdW5sZXNz
ICRob3N0T1MgPT0gImRhcndpbiIKKyAgICAgICAgc2tpcAorICAgICAgICByZXR1cm4KKyAgICBl
bmQKKyAgICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0
aW9ucyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zCisgICAgYWRk
UnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInJ1YnkiLCAocGF0aFRvSGVscGVycyArICJi
eXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlciIpLnRvX3MsIHBhdGhUb1ZNLnRvX3MsICRiZW5jaG1h
cmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRs
ZXIpCitlbmQKKwogZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDAzMzExMjE+CiAgICAgaWYgJHJl
bW90ZSBvciAoJGFyY2hpdGVjdHVyZSAhfiAveDg2L2kgYW5kICRob3N0T1MgPT0gImRhcndpbiIp
CkBAIC03NTEsNiArNzYwLDcgQEAgZGVmIGRlZmF1bHRSdW4KICAgICAgICAgZGVmYXVsdFF1aWNr
UnVuCiAgICAgZWxzZQogICAgICAgICBydW5EZWZhdWx0CisgICAgICAgIHJ1bkJ5dGVjb2RlQ2Fj
aGUKICAgICAgICAgaWYgJGppdFRlc3RzCiAgICAgICAgICAgICBydW5Ob0xMSW50CiAgICAgICAg
ICAgICBydW5Ob0NKSVRWYWxpZGF0ZVBoYXNlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358594</attachid>
            <date>2019-01-08 08:30:43 -0800</date>
            <delta_ts>2019-01-09 00:01:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190108173034.patch</filename>
            <type>text/plain</type>
            <size>132036</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5Njc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZjQ2MDg5YTg1MGJkYzJhNDIwNmI1NTNkMGI1MjJlNWIxNmQ1ZWQ3Li5hNGVhZWI4YTFlMDdlYTIz
NjNhYTAwODQ1ODdkNWU5ZWMyN2JhNzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTkgQEAKKzIwMTktMDEtMDcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLiBBbHNvLCBkdXJpbmcgZGVjb2RpbmcsIHRoZSBjYWNoZWQgb2JqZWN0cworICAg
ICAgICBhcmUgbW1hcCdkIGZyb20gZGlzaywgYnV0IG9ubHkgdXNlZCBmb3IgY3JlYXRpbmcgaW5z
dGFuY2VzIG9mIHRoZSByZXNwZWN0aXZlCisgICAgICAgIGluLW1lbW9yeSB2ZXJzaW9uIG9mIGVh
Y2ggb2JqZWN0LiBJZGVhbGx5LCB0aGUgbW1hcCdkIG9iamVjdHMgc2hvdWxkIGJlIHVzZWQKKyAg
ICAgICAgYXQgcnVudGltZSBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMuY3BwOgorICAgICAgICAoSlNDOjpCdWlsdGlu
TmFtZXM6OkJ1aWx0aW5OYW1lcyk6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAg
ICAgIChKU0M6OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlckluZm8pOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmg6CisgICAgICAgICogYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFk
ZFNldENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50
SWRlbnRpZmllclNldHMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9j
ay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAq
IGJ5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAg
ICAocnVuSlNDKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZS5oOgorICAgICAgICAqIHBh
cnNlci9Tb3VyY2VDb2RlS2V5Lmg6CisgICAgICAgIChKU0M6OlNvdXJjZUNvZGVLZXk6Om9wZXJh
dG9yIT0gY29uc3QpOgorICAgICAgICAqIHBhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoKKyAg
ICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6RW5jb2Rlcik6
CisgICAgICAgIChKU0M6OkVuY29kZXI6On5FbmNvZGVyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rl
cjo6dm0pOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjptYWxsb2NPZmZzZXQpOgorICAgICAgICAo
SlNDOjpFbmNvZGVyOjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZzZXRPZik6
CisgICAgICAgIChKU0M6OkVuY29kZXI6OmNhY2hlUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rl
cjo6b2Zmc2V0Rm9yUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6OkRlY29kZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjp+RGVj
b2Rlcik6CisgICAgICAgIChKU0M6OkRlY29kZXI6OnZtKToKKyAgICAgICAgKEpTQzo6RGVjb2Rl
cjo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpjYWNoZU9mZnNldCk6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6OmFkZEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OmRlY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE9iamVjdDo6c2l6
ZU9mKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkT2JqZWN0OjpjYXN0KToKKyAgICAgICAgKEpTQzo6
VmFyaWFibGVMZW5ndGhPYmplY3Q6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgIChKU0M6OlZhcmlh
YmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9i
amVjdDo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFB0cjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UHRyOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpvcGVyYXRvci0+IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjplbmNvZGUpOgorICAgICAgICAoSlND
OjpDYWNoZWRSZWZQdHI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFdyaXRl
QmFycmllcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkV3JpdGVCYXJyaWVyOjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmVuY29kZSk6CisgICAgICAg
IChKU0M6OkNhY2hlZFZlY3Rvcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UGFpcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUGFpcjo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaE1hcDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkSGFzaE1hcDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5pcXVlZFN0
cmluZ0ltcGw6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBs
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdJbXBsOjplbmNvZGUp
OgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdJbXBsOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRTdHJpbmc6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmlu
Zzo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSWRlbnRpZmllcjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSWRlbnRpZmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkT3B0aW9uYWw6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE9w
dGlvbmFsOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVj
b2RlQXNQdHIgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFibGU6OmVu
Y29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNpbXBsZUp1bXBUYWJsZTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRTdHJpbmdKdW1wVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZFJhcmVEYXRhOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRSYXJlRGF0
YTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQml0VmVjdG9yOjplbmNvZGUp
OgorICAgICAgICAoSlNDOjpDYWNoZWRCaXRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZEhhc2hTZXQ6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hT
ZXQ6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmll
clNldEVudHJ5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb25zdGFudElkZW50aWZp
ZXJTZXRFbnRyeTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmFyaWFibGVF
bnZpcm9ubWVudDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmFyaWFibGVFbnZpcm9u
bWVudDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQXJyYXk6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZEFycmF5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU2NvcGVkQXJndW1lbnRzVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZFN5bWJvbFRhYmxlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN5bWJv
bFRhYmxlRW50cnk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN5bWJvbFRh
YmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZTo6ZGVjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5OjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHk6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
UmVnRXhwOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3I6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFRlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQmlnSW50Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZEpTVmFsdWU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEpT
VmFsdWU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEluc3RydWN0aW9uU3Ry
ZWFtOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZGVj
b2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkTWV0YWRhdGFUYWJsZTo6ZW5jb2RlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkTWV0YWRhdGFUYWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRTb3VyY2VPcmlnaW46OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFRleHRQ
b3NpdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVGV4dFBvc2l0aW9uOjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlOjplbmNv
ZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI6OmRlY29kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRlcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU6OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRT
b3VyY2VDb2RlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29k
ZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOjpk
ZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRNb2R1bGVDb2RlQmxvY2s6OmVuY29k
ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1vZHVsZUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkRXZhbENvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkRXZhbENvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkRnVuY3Rpb25Db2RlQmxvY2s6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0
aW9uQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrOjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrVHlwZT46OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2Vk
RXZhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2tUeXBl
Pjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZUtleTo6ZW5jb2RlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZUtleTo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVFbnRyeTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVFbnRyeTo6
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6ZW5jb2RlQ29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlQ29kZUJsb2NrSW1wbCk6CisgICAgICAgICog
cnVudGltZS9DYWNoZWRUeXBlcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaC4KKyAgICAgICAgKEpTQzo6ZGVjb2Rl
Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVDYWNoZU1hcDo6cHJ1bmVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVDYWNo
ZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUNhY2hlOjp3cml0ZSk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuaDoKKyAgICAgICAg
KEpTQzo6Q29kZUNhY2hlTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6
ZW5kKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlTWFwOjpmZXRjaEZyb21EaXNrSW1wbCk6Cisg
ICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmluZENhY2hlQW5kVXBkYXRlQWdlKToKKyAgICAg
ICAgKEpTQzo6d3JpdGVDb2RlQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3Bw
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6b2Zmc2V0T2ZEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6OmRhdGFTdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1Nj
b3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmg6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9T
eW1ib2xUYWJsZS5oOgorCiAyMDE5LTAxLTA0ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEJhc2VsaW5lIHZlcnNpb24gb2YgZ2V0X2J5X2lkIG1heSBjb3Jy
dXB0IG1ldGFkYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDlkZTBjNmIxMjFjODQxMjJkMmZlM2MwZGJjYjcxNTQyYjc5ZTBi
YTguLjRhNzgzNWRmZDcxZDRlZjQyNmM4YmIzOGE5NWQwM2JhNjQ4MDI2ZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTktMDEtMDcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBCaXRWZWN0b3JzIGhhdmUgdG8gYmUgZnJpZW5kcyB3aXRoIEpTQzo6Q2FjaGVCaXRWZWN0
b3IgdG8gYWxsb3cKKyAgICAgICAgc2VyaWFsaXppbmcgaXRzIGJ1ZmZlciBhcyBwYXJ0IG9mIHRo
ZSBieXRlY29kZSBjYWNoZSBlbmNvZGluZy4KKworICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoK
KwogMjAxOS0wMS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEhvbW9ncmFwaCB3aXRoIExBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRklT
SEhPT0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDJjMzUyZjEwYTI3MDgyZjU4
ZTMzOGQ5NmU1YjJlYzU1ZTcwOWY2Ni4uOTk0YjY0MzJjODY4ODliMjExMmNiYjliOGZhOTgxNGJj
OWU5NTY4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTgzMyw3ICs4MzMsNyBA
QAogCQkyNjJEODVCNzFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjJE
ODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggKi87
IH07CiAJCTI2ODRENDM4MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY4NEQ0MzcxQzAwMTYxQzAw
ODFENjYzIC8qIEFpckxpdmVuZXNzLmggKi87IH07CiAJCTI2OUQ2MzZFMUJGQkU1RDEwMDEwMUIx
RCAvKiBGVExPdXRwdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2OUQ2MzZEMUJGQkU1RDAwMDEwMUIxRCAvKiBGVExPdXRwdXQuaCAqLzsgfTsKLQkJ
MkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEwNUFCRDQxOTYx
REYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovOyB9OworCQkyQTA1
QUJENjE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTA1QUJENDE5NjFERjI0
MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThE
IC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkExMTEyNDQxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNl
dHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExQjU3NDE3NkEyMjRE
MDAwRTJBMjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OwogCQkyQTRCQjdGMzE4QTQx
MTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTEwNjUsNyArMTA2NSw3IEBACiAJ
CTUzRTlFMEFDMUVBRTgzREYwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTlFMEFBMUVBRTgzREUw
MEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuaCAqLzsgfTsKIAkJNTNFOUUwQUYxRUFFQzQ1
NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVy
VXBDb3VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUzRUFGRTJGMjA4REZBQjQwMDdENTI0QiAvKiB0ZXN0YXBpLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMUQ0RTE5MUY1OUNERDIwMEVDODM2
QyAvKiB0ZXN0YXBpLmNwcCAqLzsgfTsKLQkJNTNGMTFGNDEyMDkxMzhENzAwRTQxMUE3IC8qIEpT
SW1tdXRhYmxlQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJm
bHkuaCAqLzsgfTsKKwkJNTNGMTFGNDEyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0
dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0Y0MEU4NTFENThG
OTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rp
b25zLmggKi87IH07CiAJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25Q
YXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLzsgfTsKIAkJ
NTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAv
KiBXYXNtUGFyc2VyLmggKi87IH07CkBAIC0xMDg0LDYgKzEwODQsNyBAQAogCQk1REJCMTUxQjEz
MUQwQjMxMDA1NkFEMzYgLyogdGVzdGFwaS5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAv
KiB0ZXN0YXBpLmpzICovOyB9OwogCQk1REJCMTUyNTEzMUQwQkQ3MDA1NkFEMzYgLyogbWluaWRv
bS5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0MTIxMTBEMEE0ODc4ODcwMDQ4MDI1NSAvKiBtaW5pZG9tLmpzICovOyB9OwogCQk1
REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1NDAyNTU1OTdEMDFGRjYw
RjcgLyogY3JlYXRlX2hhc2hfdGFibGUgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsg
fTsgfTsKKwkJNUUxNThBQzM1MEJDNEVDNzg3N0RDMEY0IC8qIE9iamVjdFByb3RvdHlwZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZEMEND
OUUxQ0JDMTQ5QUI4RjQwMzQzNCAvKiBPYmplY3RQcm90b3R5cGVJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjIzQTM3RUMxQjg3QTdD
MDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MjNBMzdFQjFCODdBN0JEMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2Mjc2
NzMyNDFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxs
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RTFBREYxMDNGMDAw
MjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xNjI0LDcgKzE2MjUsNiBAQAogCQlCQzE4QzQ0NDBFMTZG
NUNEMDBCMzQ0NjAgLyogTnVtYmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI2ODBDNTBFMTZENEU5MDBBMDZFOTIgLyogTnVtYmVy
UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkMxOEM0NDUwRTE2RjVDRDAwQjM0NDYwIC8qIE9iamVjdENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI2ODBDNzBFMTZE
NEU5MDBBMDZFOTIgLyogT2JqZWN0Q29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyog
T2JqZWN0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzI2ODBDOTBFMTZENEU5MDBBMDZFOTIgLyogT2JqZWN0UHJvdG90eXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNUUxNThBQzM1
MEJDNEVDNzg3N0RDMEY0IC8qIE9iamVjdFByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZEMENDOUUxQ0JDMTQ5QUI4RjQwMzQz
NCAvKiBPYmplY3RQcm90b3R5cGVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJh
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2
OTJBODc4MDI1NTU5N0QwMUZGNjBGNyAvKiBPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NEIwRTE2RjVDRDAwQjM0NDYw
IC8qIFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNGMEIzQUEwOUJCNERDMDAwNjhGQ0UzIC8qIFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDU0MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBQcm9wZXJ0eU5hbWVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU0MDBDMTAwQTY5QkFGMjAwNTA5ODg3IC8qIFByb3BlcnR5TmFtZUFy
cmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTMxNDAsNiArMzE0MCw3IEBACiAJCTE0Mzg2QTczMURENjk4OTUwMDg2NTJDNCAvKiBEaXJlY3RF
dmFsRXhlY3V0YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RF
dmFsRXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NjFE
RDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzODZBNzcxREQ2OTg5QzAwODY1MkM0IC8qIElu
ZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
NDNCRTI2NTIxQzg1Nzc3MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQ0MDA1MUYwQTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTm9kZS5oOyBwYXRoID0gdGVzdHMvTm9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDQwMDUyMDBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5jICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBOb2RlLmM7IHBhdGggPSB0ZXN0cy9Ob2Rl
LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNzQ4MEE1MzZDQzIwMDA1RjA2
MSAvKiBOb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlTGlz
dC5oOyBwYXRoID0gdGVzdHMvTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMyNTQsNiArMzI1NSw3IEBACiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0
YXBpLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5q
czsgcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNERBODE4RTBEOTlGRDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREQTgxOEYwRDk5RkQyMDAwQjBBNEZCIC8q
IEpTTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTGV4aWNhbEVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMTREQUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8qIENhY2hlZFR5cGVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFR5cGVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0EyIC8qIEpTR2xvYmFs
T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7
IHBhdGggPSBKU0dsb2JhbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFu
Z3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcuY3BwOyB9OwogCQkxNERG
MDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0Jsb2Nr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2NjksNiArMzY3MSw3IEBACiAJ
CTZBMzhDRkE4MUUzMkI1OEIwMDYwMjA2RiAvKiBBc3luY1N0YWNrVHJhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNTdGFja1RyYWNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxF
bmFibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXZhbEVu
YWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJBOTNDOTU5MDQ4NEM1QkFE
OTMxNkVBIC8qIEpTU2NyaXB0RmV0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1NjcmlwdEZldGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkQw
Q0M5RTFDQkMxNDlBQjhGNDAzNDM0IC8qIE9iamVjdFByb3RvdHlwZUlubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvdG90eXBlSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRl
cmF0b3JPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcw
MTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcwMTNDQTg5MUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFz
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01pY3JvdGFzay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDg3LDcgKzQ0OTAsNiBAQAogCQlC
QzI2ODBDNzBFMTZENEU5MDBBMDZFOTIgLyogT2JqZWN0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkMyNjgwQzgwRTE2RDRFOTAwQTA2RTkyIC8qIE9iamVjdFByb3Rv
dHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RQcm90
b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI2ODBDOTBFMTZENEU5
MDBBMDZFOTIgLyogT2JqZWN0UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE9iamVjdFByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2
RDBDQzlFMUNCQzE0OUFCOEY0MDM0MzQgLyogT2JqZWN0UHJvdG90eXBlSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmplY3RQcm90b3R5cGVJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjY4MEU2MEUxNkQ1MjMwMEEwNkU5MiAvKiBO
dW1iZXJDb25zdHJ1Y3Rvci5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TnVtYmVyQ29uc3RydWN0b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
MzA0NjA2MEUxRjQ5N0YwMDMyMzJDRiAvKiBFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzMzN0JE
RTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBHZXR0ZXJTZXR0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFu
Zy5vYmpjcHA7IH07CkBAIC02NTgzLDYgKzY1ODUsOCBAQAogCQkJCTlFNzI5NDA5MTkwRjAzMDYw
MDFBOTFCNSAvKiBCdW5kbGVQYXRoLm1tICovLAogCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdC
MiAvKiBCdXR0ZXJmbHkuaCAqLywKIAkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0
dGVyZmx5SW5saW5lcy5oICovLAorCQkJCTE0REFGQTQ1MjFFM0I4NzEwMDRCNjhGNyAvKiBDYWNo
ZWRUeXBlcy5jcHAgKi8sCisJCQkJMTQzQkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8qIENhY2hlZFR5
cGVzLmggKi8sCiAJCQkJMEZFQzNDNUYxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0
ci5oICovLAogCQkJCUJDQTYyREZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8s
CiAJCQkJMTQ1QzUwN0YwRDlERjYzQjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKaW5kZXggY2JhNGM0YmE2MDA0ZjkzMGQ1Y2E4NTYzMzEwYTYyNDNl
MzY0NDllNS4uNWUzZTc5NzNhYzgwNWMwYmMyM2UyOWJjOWYyYzg2ZjY2MDFjNmMyZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtNzEwLDYgKzcxMCw3IEBAIHJ1bnRpbWUvQm9vbGVh
bkNvbnN0cnVjdG9yLmNwcAogcnVudGltZS9Cb29sZWFuT2JqZWN0LmNwcAogcnVudGltZS9Cb29s
ZWFuUHJvdG90eXBlLmNwcAogcnVudGltZS9DYWxsRGF0YS5jcHAKK3J1bnRpbWUvQ2FjaGVkVHlw
ZXMuY3BwCiBydW50aW1lL0NhdGNoU2NvcGUuY3BwCiBydW50aW1lL0NsYXNzSW5mby5jcHAKIHJ1
bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVp
bHRpbnMvQnVpbHRpbk5hbWVzLmNwcAppbmRleCA0NWRlODJlN2NiNThhMjgzYjIwZmNhZTU5ODJi
YmI1YzA0ZGE5MTc1Li5hMGY4NTNhNmUwNWRjNDYxOGZmMDRkZTU5MDE5YjFlYTEzZDZiMzdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApA
QCAtNjMsNiArNjMsNyBAQCBCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyhWTSogdm0sIENvbW1v
bklkZW50aWZpZXJzKiBjb21tb25JZGVudGlmaWVycykKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVf
SURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFJJVkFURV9UT19QVUJM
SUNfRU5UUlkpCiAgICAgSlNDX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElPTl9OQU1FKElOSVRJQUxJ
WkVfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5U
SUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX1BVQkxJQ19UT19QUklWQVRFX0VO
VFJZKQorICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05f
U1lNQk9MKElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZKQogICAgIEpT
Q19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJ
QUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQogICAgIG1fcHJpdmF0ZVRvUHVi
bGljTWFwLmFkZChtX2RvbGxhclZNUHJpdmF0ZU5hbWUuaW1wbCgpLCAmbV9kb2xsYXJWTU5hbWUp
OwogICAgIG1fcHVibGljVG9Qcml2YXRlTWFwLmFkZChtX2RvbGxhclZNTmFtZS5pbXBsKCksICZt
X2RvbGxhclZNUHJpdmF0ZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5OYW1lcy5oCmluZGV4IGY2NmI4Y2I1MWViNDAyZDg3MzZmZDdkZDBkMmQwZTdhMjky
ZjQ1MTIuLjg1MzFkYjI2MGJkMDcwMWIzNzE5MDFiNjc0YmZmNWRmMGJmYmQ4NzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTIxMyw2ICsy
MTMsNyBAQCBleHRlcm4gU3ltYm9sSW1wbDo6U3RhdGljU3ltYm9sSW1wbCBwb2x5UHJvdG9Qcml2
YXRlTmFtZTsKIC8vIFdlIGNvbW1hbmRlZXIgdGhlIHB1YmxpY1RvUHJpdmF0ZU1hcCB0byBhbGxv
dyB1cyB0byBjb252ZXJ0IHByaXZhdGUgc3ltYm9sIG5hbWVzIGludG8gdGhlIGFwcHJvcHJpYXRl
IHN5bWJvbC4KIC8vIGUuZy4gQGl0ZXJhdG9yU3ltYm9sIHBvaW50cyB0byBTeW1ib2wuaXRlcmF0
b3IgaW4gdGhpcyBtYXAgcmF0aGVyIHRoYW4gdG8gYSBhbiBhY3R1YWwgcHJpdmF0ZSBuYW1lLgog
Ly8gRklYTUU6IFRoaXMgaXMgYSB3ZWlyZCBoYWNrIGFuZCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBk
byB0aGlzLgorI2RlZmluZSBJTklUSUFMSVpFX1NZTUJPTF9QUklWQVRFX1RPX1BVQkxJQ19FTlRS
WShuYW1lKSBtX3ByaXZhdGVUb1B1YmxpY01hcC5hZGQobV8jI25hbWUjI1N5bWJvbC5pbXBsKCks
ICZtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIpOwogI2RlZmluZSBJTklUSUFMSVpF
X1NZTUJPTF9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWShuYW1lKSBtX3B1YmxpY1RvUHJpdmF0ZU1h
cC5hZGQobV8jI25hbWUjI1N5bWJvbFByaXZhdGVJZGVudGlmaWVyLmltcGwoKSwgJm1fIyNuYW1l
IyNTeW1ib2wpOwogCiBjbGFzcyBCdWlsdGluTmFtZXMgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA4NmRiODY5M2Y2MGU3NzNiNjFiYTM3MzU4
Y2EzZWU5MzdkYzBmMzVkLi4zYjAzYjRmYjUwYzA0MTlkZDc5NmNlOGUyNTAwYmMxZDg4YTcxYzdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAt
ODY0LDcgKzg2NCw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lz
dGVycyhWTSYgdm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBj
b25zdGFudHMpCit2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0
ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29u
c3RhbnRzKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggNmM3NjZhOGFi
MjI5ZGIwZjY4M2U2NmMwNmI3ZDVjNTBiOGU4MTIxNy4uYjc5ZjkwZjRiN2JlMzBiYWJlYzlhOTg3
MThmZGQ3NDAyYWMzN2FkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaApAQCAtODg2LDcgKzg4Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUFs
bFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7
CiAKLSAgICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNvbnN0
IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOworICAgIHZv
aWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgVmVjdG9yPENv
bnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKTsKIAogICAgIHZvaWQgc2V0Q29u
c3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggNjZjM2I3Njg3NzU2MjA3NzZkMjYzZmYwOThkZTZmNDZi
NjZlNzc4My4uN2Y0NjVkMmFlOTM3OTliOTFkZjc4NzE0MTk0ZmNhMzRiZDJhMWExMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKQEAgLTg5LDYgKzg5
LDEwIEBAIHN0cnVjdCBIYW5kbGVySW5mb0Jhc2UgewogfTsKIAogc3RydWN0IFVubGlua2VkSGFu
ZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBVbmxpbmtlZEhhbmRsZXJJ
bmZvKCkKKyAgICB7CisgICAgfQorCiAgICAgVW5saW5rZWRIYW5kbGVySW5mbyh1aW50MzJfdCBz
dGFydCwgdWludDMyX3QgZW5kLCB1aW50MzJfdCB0YXJnZXQsIEhhbmRsZXJUeXBlIGhhbmRsZXJU
eXBlKQogICAgIHsKICAgICAgICAgdGhpcy0+c3RhcnQgPSBzdGFydDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgKaW5kZXggNzBlZGUz
ZTQxYzVkNWM0ODlkNzk2ZmNmYzBjMWNjZDk5OGQyOWVkNS4uZDkzMTU0YmM2YjVjMzZkNGE4NDk3
MTI1MmQwNjMyZTQ0MGQ0YWQwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgSW5zdHJ1
Y3Rpb25TdHJlYW0gewogICAgIHVzaW5nIEluc3RydWN0aW9uQnVmZmVyID0gVmVjdG9yPHVpbnQ4
X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnN0cnVj
dGlvblN0cmVhbVdyaXRlcjsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZEluc3RydWN0aW9uU3Ry
ZWFtOwogcHVibGljOgogICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4
IGYwZTlkNjRjODU0YTNmNTM2NzUyZDQ4NzQ2OTJkMjc4NzdkNjcwNDkuLjBiMjM2YTAyZDU5ZGMy
NThlOTA4OTBjOTI1YTNjODhiMDVjNTA3ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC02NSwxMiArNjUsMTUgQEAgY2xh
c3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorc3RydWN0IENhY2hlZENv
ZGVCbG9jazsKKwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsKIHR5cGVk
ZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVubGlu
a2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxM
aW5rSW5mbzsKLXVzaW5nIENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeSA9IHN0ZDo6cGFpcjxJ
ZGVudGlmaWVyU2V0LCB1bnNpZ25lZD47Cit1c2luZyBDb25zdGFudElkZW50aWZpZXJTZXRFbnRy
eSA9IHN0ZDo6cGFpcjxJZGVudGlmaWVyU2V0LCB1bnNpZ25lZD47CiAKIHN0cnVjdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKQEAgLTE2OCw3
ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRS
ZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0
ZUJhcnJpZXI8VW5rbm93bj4oKSk7CiAgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAg
ICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmFwcGVuZChDb25zdGFudEluZGVudGlmaWVyU2V0
RW50cnkoc2V0LCByZXN1bHQpKTsKKyAgICAgICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmFw
cGVuZChDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
T3RoZXIpCkBAIC0yMDIsNyArMjA1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saW5r
VGltZUNvbnN0YW50c1tpbmRleF07CiAgICAgfQogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnM7IH0KLSAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5PiYg
Y29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0
czsgfQorICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0
YW50SWRlbnRpZmllclNldHMoKSB7IHJldHVybiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7IH0K
ICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3Rh
bnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CkBAIC0zNjcsNiArMzcwLDEwIEBA
IHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0
dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgRGVidWdnZXJNb2RlKTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVC
bG9ja1R5cGU+CisgICAgVW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYsIFN0cnVjdHVyZSosIGNv
bnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tUeXBlPiYp
OworCiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKQEAgLTM3OCw2ICszODUsOSBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBC
eXRlY29kZVJld3JpdGVyOwogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUdlbmVyYXRvcjsKIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVC
bG9ja1R5cGU+CisgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRDb2RlQmxvY2s7CisKICAgICB2b2lk
IGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImLCBJbnN0cnVjdGlvblN0cmVhbVdy
aXRlciYpOwogCiAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKQEAgLTQ0NCw3
ICs0NTQsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJz
OwogICAgIFZlY3RvcjxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKICAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3RvcjxDb25zdGFu
dEluZGVudGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICBWZWN0
b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsK
ICAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CiAgICAgRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAppbmRleCA5
OTg3YjQzMTMzNDNiNmNiNzUyYTQyMGIzNThkOWEzNjAzMTcyZjI2Li4yYWM3NGFlOThiNTBjZjIy
NjE3YmM5NDI5NDVlMDIzODRkMTJjZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw4IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgQ2FjaGVkRXZhbENvZGVCbG9jazsKKwogY2xh
c3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJh
c2U7CkBAIC01OSwxMSArNjEsMTUgQEAgcHVibGljOgogICAgICAgICBtX2Z1bmN0aW9uSG9pc3Rp
bmdDYW5kaWRhdGVzID0gV1RGTW92ZShmdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7CiAgICAg
fQogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVkRXZhbENvZGVCbG9jazsKKwogICAgIFVubGlu
a2VkRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewog
ICAgIH0KIAorICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVk
RXZhbENvZGVCbG9jayYpOworCiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXM7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jay5oCmluZGV4IGI1NDgyYjY1YzhiOGVmYjNhYTMwNmE0MTNiZDU0NjAzNDkxYTkwMTMu
LjZhMzBhYTNkMWU1MmVlOTY5NmNlNzk2MzI1YzUwNTliZmJmOTIyY2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IENh
Y2hlZEZ1bmN0aW9uQ29kZUJsb2NrOworCiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
IGZpbmFsIDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IFVubGlua2VkQ29kZUJsb2NrIEJhc2U7CkBAIC00NCwxMCArNDYsMTQgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENh
Y2hlZEZ1bmN0aW9uQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhl
Y3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsK
ICAgICB9CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBD
YWNoZWRGdW5jdGlvbkNvZGVCbG9jayYpOwogICAgIAogcHVibGljOgogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IDUyNjg5OGM5NTFk
ODIxNzU5Nzk4ODExMDJmOWRjN2Q2MTViMDE1MjIuLjM3NWY0Nzg5N2RjZDViMDY5NTc2MjU1ZWMz
YzdhZTFjN2NkNDU3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0zOSwxMSArMzksMTMg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIERlY29kZXI7CiBjbGFzcyBGdW5jdGlvbk1l
dGFkYXRhTm9kZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIFBhcnNlckVycm9y
OwogY2xhc3MgU291cmNlUHJvdmlkZXI7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
Oworc3RydWN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogZW51bSBVbmxpbmtlZEZ1bmN0
aW9uS2luZCB7CiAgICAgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwKQEAgLTU0LDYgKzU2LDcgQEAg
Y2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwogICAgIGZyaWVuZCBjbGFzcyBW
TTsKKyAgICBmcmllbmQgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiAgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CkBAIC0xNDcsNiArMTUw
LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
KiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0
TW9kZSwgVmFyaWFibGVFbnZpcm9ubWVudCYsICBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgYm9v
bCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CisgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUoRGVjb2RlciYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBjb25zdCBDYWNoZWRG
dW5jdGlvbkV4ZWN1dGFibGUmKTsKIAogICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0Owog
ICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAppbmRleCAzNDM4NjJlNjQ3
MGZlMWIxYTQyNDg1ZDg3NjllMjc3ZDcyYzE1MDhlLi44Njk5NjE1ODdjZGQ1MTcxN2ZmNjNjMTY3
ZGJmMjQ5YmQ2MGUzODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaApAQCAtMzgsNiArMzgsMTIgQEAgcHJv
dGVjdGVkOgogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRl
YnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+JiBjYWNo
ZWRDb2RlQmxvY2spCisgICAgICAgIDogQmFzZShkZWNvZGVyLCBzdHJ1Y3R1cmUsIGNhY2hlZENv
ZGVCbG9jaykKKyAgICB7CisgICAgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCmluZGV4IDNlM2U4ZGZi
NGQ1YmJjNDY0ZjVlNmEyMzQ0Y2FhY2E5OTQ5NDllZjEuLmQ5OTBjZDc4YzNlZDFhNjM5ZjY0MTA0
NjhkZmEzYWViYjA2NmQ2OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKQEAgLTM1LDYgKzM1LDcgQEAgY2xhc3Mg
TWV0YWRhdGFUYWJsZTsKIGNsYXNzIFVubGlua2VkTWV0YWRhdGFUYWJsZSB7CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3MgTWV0YWRhdGFU
YWJsZTsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZE1ldGFkYXRhVGFibGU7CiAKIHB1YmxpYzoK
ICAgICBzdHJ1Y3QgTGlua2luZ0RhdGEgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCmlu
ZGV4IDBlOWM1ZjViZGRlNmM3NTYyYjY2YTAzYmMwYTk4Yzg3YWRiZDkzMDIuLmU2NGRjZTYxMjU0
NzdkZDVjNTQxMmNlZDkyYmUyNTYwNGI1ZjM4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrLmgKQEAgLTI5LDYgKzI5LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIERlY29k
ZXI7CitzdHJ1Y3QgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOworCiBjbGFzcyBVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sg
ewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAg
LTc0LDExICs3NywxNSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBD
YWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGlu
Zm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlLCBNb2R1bGVDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KIAorICAg
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkTW9k
dWxlQ29kZUJsb2NrJik7CisKICAgICBpbnQgbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
Q29uc3RhbnRSZWdpc3Rlck9mZnNldCB7IDAgfTsKIAogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5o
CmluZGV4IGFmZTI2YWVkMWE1MDNhYjIzZmQ4ZjQ0N2Y5ZGVjMmRjMDZjYTU4MjYuLjlkN2U0MzVh
ZmQ4Y2E1ZmIwYTc0ZTk1NWQzNjI1OTExYTYyOGFhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgKQEAg
LTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBDYWNoZWRQcm9ncmFt
Q29kZUJsb2NrOworCiBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJs
aWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAgLTUwLDExICs1MiwxNSBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmF0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fbGV4aWNhbERlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBD
YWNoZWRQcm9ncmFtQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
R2xvYmFsQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CiAKKyAgICBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZFByb2dyYW1Db2RlQmxv
Y2smKTsKKwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJhdGlvbnM7CiAgICAg
VmFyaWFibGVFbnZpcm9ubWVudCBtX2xleGljYWxEZWNsYXJhdGlvbnM7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGFkNjUz
NjE4YjQyOGZjYTA2YmUwNGRkYjY2YzBmM2QzMWQyYjI2NGMuLjhlODI1NjAyOGIxMDM3ZGIyYjMw
N2FjZDE3ZDA1YjdmMzU4ZjQ3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNh
bGxGcmFtZUNsb3N1cmUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCmluZGV4IGY5NDVlMTc4ZTU4YzUzZjFmYzM5MjcwMGUyNjU1MDhiOGZjZDJmMmUu
LmJlOTU3NTFmNzU5NzU1MmZjMjQ1ODRiNmViNzg5YWNkYjdjZmYyZmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgog
I2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVkZSAiQ29uZmln
RmlsZS5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgpAQCAtMTk4NSw4ICsxOTg2LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9j
ayhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhl
Y1N0YXRlKikKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIHZtLmNvZGVDYWNo
ZSgpLT53cml0ZSh2bSk7CisKICAgICBqc2NFeGl0KEVYSVRfU1VDQ0VTUyk7CiAKICNpZiBDT01Q
SUxFUihNU1ZDKQpAQCAtMjg0OSw2ICsyODUzLDggQEAgaW50IHJ1bkpTQyhjb25zdCBDb21tYW5k
TGluZSYgb3B0aW9ucywgYm9vbCBpc1dvcmtlciwgY29uc3QgRnVuYyYgZnVuYykKICNlbmRpZgog
ICAgIH0KIAorICAgIHZtLmNvZGVDYWNoZSgpLT53cml0ZSh2bSk7CisKICAgICBpZiAoaXNXb3Jr
ZXIpIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIC8vIFRoaXMg
aXMgbmVlZGVkIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgd29ya2VyJ3MgbWFpbgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaAppbmRleCAzMTNjZmE0NWFhZjkyMmIw
N2IwNDViYmVlMDM2Mzg1OWNiZDRjMDliLi4wMTM0OTU1ZGVmZGFmMTcyMTVkYjVhOTYzM2U2MDIy
MzU3Yjk2NzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZUNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaApA
QCAtMzMsNiArMzMsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTb3VyY2VDb2Rl
IDogcHVibGljIFVubGlua2VkU291cmNlQ29kZSB7CisgICAgICAgIGZyaWVuZCBzdHJ1Y3QgQ2Fj
aGVkU291cmNlQ29kZTsKKwogICAgIHB1YmxpYzoKICAgICAgICAgU291cmNlQ29kZSgpCiAgICAg
ICAgICAgICA6IFVubGlua2VkU291cmNlQ29kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU291cmNlQ29kZUtleS5oCmluZGV4IGE4ZTYwM2MyNmEwYjYwMzYyYTAyZGVhYzA1MTYx
NjlkNTc1NTgwMjEuLjM4NDgxMjE3YmFmMzkzNWQ1MDFhYzI1MTU1OWIwZDQyNjhiNGRiODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCkBAIC0zNyw2
ICszNyw4IEBAIGVudW0gY2xhc3MgVHlwZVByb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMgfTsKIGVu
dW0gY2xhc3MgQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQgeyBObywgWWVzIH07CiAKIGNsYXNz
IFNvdXJjZUNvZGVGbGFncyB7CisgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRTb3VyY2VDb2RlS2V5
OworCiBwdWJsaWM6CiAgICAgU291cmNlQ29kZUZsYWdzKCkgPSBkZWZhdWx0OwogCkBAIC03MCw2
ICs3Miw4IEBAIHByaXZhdGU6CiB9OwogCiBjbGFzcyBTb3VyY2VDb2RlS2V5IHsKKyAgICBmcmll
bmQgc3RydWN0IENhY2hlZFNvdXJjZUNvZGVLZXk7CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2Rl
S2V5KCkKICAgICB7CkBAIC0xMTQsNiArMTE4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICYm
IHN0cmluZygpID09IG90aGVyLnN0cmluZygpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTb3VyY2VDb2RlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKICAgICBzdHJ1Y3QgSGFzaCB7CiAgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkgeyByZXR1cm4g
a2V5Lmhhc2goKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTb3VyY2VDb2Rl
S2V5JiBhLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCmluZGV4
IDZlYzU5MGI1M2U2YzljMzI3ZTQyNDRkMGIxMTliMzZkMDk2ZmM4MWUuLjQ5MGE4OGFhODMxZDFj
YjdhZjVmZjFhNmE3MWNlMGNhOTI2N2FmMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaApAQCAtMzUsNiArMzUsOSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBVbmxpbmtlZFNvdXJjZUNvZGUgeworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBDYWNoZVR5cGU+CisgICAgICAgIGZy
aWVuZCBzdHJ1Y3QgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU7CisKICAgICBwdWJsaWM6
CiAgICAgICAgIFVubGlua2VkU291cmNlQ29kZSgpCiAgICAgICAgICAgICA6IG1fcHJvdmlkZXIo
MCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZp
cm9ubWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25t
ZW50LmgKaW5kZXggMTI5YjVlYTZiZDliNzI2YTFkOWE0MDExZWY5NjkwZjhjYzZiMGRkMy4uMzZm
OWRkZjgxNzc2Y2NiMGE3NmZlZTA4YTBhNThjMzgwN2E5MzVjNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgKQEAgLTExNiw2ICsx
MTYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0V2ZXJ5dGhpbmdDYXB0dXJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQg
c3RydWN0IENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ7CisKICAgICBNYXAgbV9tYXA7CiAgICAg
Ym9vbCBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQxY2Q5ZDJk
YjIwMWE1MTFjNzVmNzljOTExYjY1ZDllYTY4NTFiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMCwwICsxLDE4MzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKKworI2luY2x1ZGUgIkJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2luY2x1ZGUgIkpTQ2FzdC5oIgorI2luY2x1ZGUgIkpT
SW1tdXRhYmxlQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgorI2luY2x1ZGUgIlNvdXJj
ZUNvZGVLZXkuaCIKKyNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0
YVRhYmxlSW5saW5lcy5oIgorI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPgor
c3RydWN0IFNvdXJjZVR5cGVJbXBsIHsKKyAgICB1c2luZyB0eXBlID0gVDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgU291cmNlVHlwZUltcGw8VCwgc3RkOjplbmFibGVfaWZf
dDwhc3RkOjppc19mdW5kYW1lbnRhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTx0eXBlbmFt
ZSBUOjpTb3VyY2VUeXBlXywgdm9pZD46OnZhbHVlPj4geworICAgIHVzaW5nIHR5cGUgPSB0eXBl
bmFtZSBUOjpTb3VyY2VUeXBlXzsKKworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VzaW5n
IFNvdXJjZVR5cGUgPSB0eXBlbmFtZSBTb3VyY2VUeXBlSW1wbDxUPjo6dHlwZTsKKworY2xhc3Mg
RW5jb2RlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW5jb2Rlcik7CisKK3B1YmxpYzoK
KyAgICBFbmNvZGVyKFZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fb2Zm
c2V0KDApCisgICAgeworICAgICAgICBtX2J1ZmZlciA9ICh1aW50OF90KilmYXN0WmVyb2VkTWFs
bG9jKHNfbWF4U2l6ZSk7CisgICAgfQorCisgICAgfkVuY29kZXIoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgIH0KKwor
ICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KKworICAgIHB0cmRpZmZfdCBtYWxsb2NPZmZz
ZXQodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNpemVvZih2b2lkKiksIG1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHNpemVfdD4obV9vZmZzZXQgKyBzaXplKSA8IHNfbWF4U2l6ZSk7CisgICAgICAg
IHB0cmRpZmZfdCByZXN1bHQgPSBtX29mZnNldDsKKyAgICAgICAgbV9vZmZzZXQgKz0gc2l6ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1aW50OF90KiBtYWxsb2ModW5z
aWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtYWxsb2NPZmZz
ZXQoc2l6ZSk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlciArIG9mZnNldDsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIG1hbGxvYygpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obWFsbG9jKHNpemVvZihUKSkpOworICAgIH0KKwor
ICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgY29uc3QgdWludDhfdCogYWRkciA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhZGRy
ZXNzKTsKKyAgICAgICAgQVNTRVJUKGFkZHIgPj0gbV9idWZmZXIgJiYgYWRkciA8IG1fYnVmZmVy
ICsgbV9vZmZzZXQpOworICAgICAgICByZXR1cm4gYWRkciAtIG1fYnVmZmVyOworICAgIH0KKwor
ICAgIHZvaWQgY2FjaGVQdHIoY29uc3Qgdm9pZCogcHRyLCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgbV9wdHJUb09mZnNldE1hcC5hZGQocHRyLCBvZmZzZXQpOworICAgIH0KKwor
ICAgIFdURjo6T3B0aW9uYWw8cHRyZGlmZl90PiBvZmZzZXRGb3JQdHIoY29uc3Qgdm9pZCogcHRy
KQorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IG1fcHRyVG9PZmZzZXRNYXAuZmluZChwdHIpOwor
ICAgICAgICBpZiAoaXQgPT0gbV9wdHJUb09mZnNldE1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OworICAgIH0K
KworICAgIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVsZWFzZSgpCisg
ICAgeworICAgICAgICBNYWxsb2NQdHI8dWludDhfdD4gYnVmZmVyID0gYWRvcHRNYWxsb2NQdHIo
bV9idWZmZXIpOworICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7
IFdURk1vdmUoYnVmZmVyKSwgbV9vZmZzZXQgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5z
aWduZWQgc19tYXhTaXplID0gMTAgKiBNQjsKKworICAgIFZNJiBtX3ZtOworICAgIHVpbnQ4X3Qq
IG1fYnVmZmVyOworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKKyAgICBIYXNoTWFwPGNvbnN0IHZv
aWQqLCBwdHJkaWZmX3Q+IG1fcHRyVG9PZmZzZXRNYXA7Cit9OworCitjbGFzcyBEZWNvZGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWNvZGVyKTsKKworcHVibGljOgorICAgIERlY29k
ZXIoVk0mIHZtLCBjb25zdCB2b2lkKiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUpCisgICAgICAg
IDogbV92bSh2bSkKKyAgICAgICAgLCBtX2Jhc2VBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGJhc2VBZGRyZXNzKSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV9z
aXplKHNpemUpCisjZW5kaWYKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAg
ICB9CisKKyAgICB+RGVjb2RlcigpCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBt
X2ZpbmFsaXplcnMpCisgICAgICAgICAgICBwYWlyLnZhbHVlKCk7CisgICAgfQorCisgICAgVk0m
IHZtKCkgeyByZXR1cm4gbV92bTsgfQorCisgICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZv
aWQqIHB0cikKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4ocHRyKTsKKyAgICAgICAgQVNTRVJUKGFkZHIgPj0gbV9iYXNlQWRk
cmVzcyAmJiBhZGRyIDwgbV9iYXNlQWRkcmVzcyArIG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBh
ZGRyIC0gbV9iYXNlQWRkcmVzczsKKyAgICB9CisKKyAgICB2b2lkIGNhY2hlT2Zmc2V0KHB0cmRp
ZmZfdCBvZmZzZXQsIHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0VG9QdHJNYXAu
YWRkKG9mZnNldCwgcHRyKTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPHZvaWQqPiBwdHJG
b3JPZmZzZXQocHRyZGlmZl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtX29m
ZnNldFRvUHRyTWFwLmZpbmQob2Zmc2V0KTsKKyAgICAgICAgaWYgKGl0ID09IG1fb2Zmc2V0VG9Q
dHJNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4geyBpdC0+dmFsdWUgfTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgYWRkRmluYWxpemVyKHB0cmRpZmZfdCBvZmZzZXQsIGNvbnN0IEZ1bmN0
b3ImIGZuKQorICAgIHsKKyAgICAgICAgbV9maW5hbGl6ZXJzLmFkZChvZmZzZXQsIGZuKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgVk0mIG1fdm07CisgICAgY29uc3QgdWludDhfdCogbV9iYXNl
QWRkcmVzczsKKyNpZm5kZWYgTkRFQlVHCisgICAgc2l6ZV90IG1fc2l6ZTsKKyNlbmRpZgorICAg
IEhhc2hNYXA8cHRyZGlmZl90LCB2b2lkKj4gbV9vZmZzZXRUb1B0ck1hcDsKKyAgICBIYXNoTWFw
PHB0cmRpZmZfdCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX2ZpbmFsaXplcnM7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1l
PFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZW5jb2RlKEVuY29kZXImLCBUJiBkc3QsIGNvbnN0
IFNvdXJjZVR5cGU8VD4mIHNyYykKK3sKKyAgICBkc3QgPSBzcmM7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJj
ZVR5cGU8VD4+Ojp2YWx1ZT4gZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFQmIGRzdCwgY29uc3Qg
U291cmNlVHlwZTxUPiYgc3JjKQoreworICAgIGRzdC5lbmNvZGUoZW5jb2Rlciwgc3JjKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KK3N0YXRpYyBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGRlY29kZShE
ZWNvZGVyJiwgY29uc3QgVCYgc3JjLCBTb3VyY2VUeXBlPFQ+JiBkc3QsIEFyZ3MuLi4pCit7Cisg
ICAgZHN0ID0gc3JjOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdz
Pgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+
Pjo6dmFsdWU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBUJiBzcmMsIFNvdXJjZVR5
cGU8VD4mIGRzdCwgQXJncy4uLiBhcmdzKQoreworICAgIHNyYy5kZWNvZGUoZGVjb2RlciwgZHN0
LCBhcmdzLi4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWUsIFQ+IGRlY29kZShE
ZWNvZGVyJiwgVCBzcmMpCit7CisgICAgcmV0dXJuIHNyYzsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlw
ZTxUPj46OnZhbHVlLCBTb3VyY2VUeXBlPFQ+PiYmIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBj
b25zdCBUJiBzcmMpCit7CisgICAgcmV0dXJuIHNyYy5kZWNvZGUoZGVjb2Rlcik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgRHN0Pgorc3RydWN0IENhY2hlZE9iamVj
dCB7CisgICAgdXNpbmcgU291cmNlVHlwZV8gPSBTb3VyY2U7CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgc2l6ZU9mKGNvbnN0IFNvdXJjZSYgc291cmNlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IDA7CisgICAgICAgIGNvbXB1dGVPdXRPZkxpbmVTaXplKHNpemUsIHNvdXJjZSk7Cisg
ICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIFQmIGNhc3QoVCogc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpzb3Vy
Y2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PCFzdGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVlPj4KKyAgICBzdGF0aWMgVCYgY2Fz
dChUJiBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIGNvbnN0IFQmIGNhc3QoY29uc3QgVCog
Y29uc3Qgc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpzb3VyY2U7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6
OmlzX3BvaW50ZXI8VD46OnZhbHVlPj4KKyAgICBzdGF0aWMgY29uc3QgVCYgY2FzdChjb25zdCBU
JiBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgRHN0Pgorc3RydWN0IFZhcmlhYmxlTGVu
Z3RoT2JqZWN0IDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2UsIERzdD4geworcHJpdmF0ZToK
KyAgICBjb25zdGV4cHIgc3RhdGljIHB0cmRpZmZfdCBzX2ludmFsaWRPZmZzZXQgPSBQVFJESUZG
X01BWDsKK3B1YmxpYzoKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0IHsgc19pbnZhbGlkT2Zmc2V0IH07
CisKKyAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9mZnNldCAhPSBzX2ludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odGhpcykgKyBvZmZzZXQ7CisgICAgfQorCisgICAgdWlu
dDhfdCogYnVmZmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZzZXQgIT0gc19pbnZhbGlk
T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRoaXMp
ICsgb2Zmc2V0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3Qg
VCogYnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNvbnN0IFQqPihidWZmZXIoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBUKiBidWZmZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KGJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICB1aW50OF90KiBhbGxvY2F0ZShFbmNvZGVyJiBl
bmNvZGVyLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRPZmZz
ZXQgPSBlbmNvZGVyLm9mZnNldE9mKCZvZmZzZXQpOworICAgICAgICBwdHJkaWZmX3QgYWxsb2Nh
dGlvbk9mZnNldCA9IGVuY29kZXIubWFsbG9jT2Zmc2V0KHNpemUpOworICAgICAgICBvZmZzZXQg
PSBhbGxvY2F0aW9uT2Zmc2V0IC0gb2Zmc2V0T2Zmc2V0OworICAgICAgICByZXR1cm4gYnVmZmVy
KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhbGxvY2F0ZShF
bmNvZGVyJiBlbmNvZGVyLCB1bnNpZ25lZCBzaXplID0gMSkKKyAgICB7CisgICAgICAgIGFsbG9j
YXRlKGVuY29kZXIsIHNpemVvZihUKSAqIHNpemUpOworICAgICAgICByZXR1cm4gYnVmZmVyPFQ+
KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU1QgPSBTb3Vy
Y2VUeXBlPFQ+Pgorc3RydWN0IENhY2hlZFB0ciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVj
dDxTVCosIENhY2hlZFB0cjxUPj4geworICAgIGJvb2wgaXNFbXB0eTsKKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNUKiBzcmMpCisgICAgeworICAgICAgICBpc0Vt
cHR5ID0gIXNyYzsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKFdURjo6T3B0aW9uYWw8cHRyZGlmZl90PiBvZmZzZXQgPSBlbmNvZGVyLm9m
ZnNldEZvclB0cihzcmMpKSB7CisgICAgICAgICAgICB0aGlzLT5vZmZzZXQgPSAqb2Zmc2V0IC0g
ZW5jb2Rlci5vZmZzZXRPZigmdGhpcy0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIFQqIGNhY2hlZE9iamVjdCA9IHRoaXMtPnRlbXBsYXRlIGFsbG9j
YXRlPFQ+KGVuY29kZXIpOworICAgICAgICBjYWNoZWRPYmplY3QtPmVuY29kZShlbmNvZGVyLCAq
c3JjKTsKKyAgICAgICAgZW5jb2Rlci5jYWNoZVB0cihzcmMsIGVuY29kZXIub2Zmc2V0T2YoY2Fj
aGVkT2JqZWN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAg
ICBTVCogZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgcHRyZGlmZl90IGJ1ZmZlck9mZnNldCA9IGRlY29kZXIub2Zmc2V0T2YodGhpcy0+YnVm
ZmVyKCkpOworICAgICAgICBpZiAoV1RGOjpPcHRpb25hbDx2b2lkKj4gcHRyID0gZGVjb2Rlci5w
dHJGb3JPZmZzZXQoYnVmZmVyT2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFNUKj4oKnB0cik7CisKKyAgICAgICAgU1QqIHB0ciA9IG9wZXJhdG9yLT4oKS0+ZGVj
b2RlKGRlY29kZXIsIGFyZ3MuLi4pOworICAgICAgICBkZWNvZGVyLmNhY2hlT2Zmc2V0KGJ1ZmZl
ck9mZnNldCwgcHRyKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBUKiBvcGVy
YXRvci0+KCkKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKTsKKyAg
ICB9CisKKyAgICBjb25zdCBUKiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB0
aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBTVCA9IFNvdXJjZVR5cGU8VD4+CitzdHJ1Y3QgQ2FjaGVkUmVmUHRyIDog
cHVibGljIENhY2hlZE9iamVjdDxSZWZQdHI8U1Q+LCBDYWNoZWRSZWZQdHI8VD4+IHsKKyAgICBD
YWNoZWRQdHI8VCwgU1Q+IHB0cjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFNUKiBzcmMpCisgICAgeworICAgICAgICBwdHIuZW5jb2RlKGVuY29kZXIsIHNyYyk7
CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmUHRy
PFNUPiBzcmMpCisgICAgeworICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8U1Q+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgU1QqIGRlY29kZWRQdHIgPSBwdHIuZGVjb2RlKGRlY29kZXIpOworICAgICAg
ICBkZWNvZGVyLmFkZEZpbmFsaXplcihkZWNvZGVyLm9mZnNldE9mKHB0ci5idWZmZXIoKSksIFs9
XSB7IGRlcmVmSWZOb3ROdWxsKGRlY29kZWRQdHIpOyB9KTsKKyAgICAgICAgcmVmSWZOb3ROdWxs
KGRlY29kZWRQdHIpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoZGVjb2RlZFB0cik7CisgICAg
fQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVmUHRyPFNUPiYgc3JjKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3JjID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNUID0gU291cmNlVHlwZTxUPj4KK3N0cnVj
dCBDYWNoZWRXcml0ZUJhcnJpZXIgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFdyaXRlQmFycmllcjxT
VD4sIENhY2hlZFdyaXRlQmFycmllcjxUPj4geworICAgIENhY2hlZFB0cjxULCBTVD4gcHRyOwor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV3JpdGVCYXJyaWVyPFNU
PiBzcmMpCisgICAgeworICAgICAgICBwdHIuZW5jb2RlKGVuY29kZXIsIHNyYy5nZXQoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV3JpdGVCYXJyaWVyPFNU
PiYgc3JjLCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU1QqIGRl
Y29kZWRQdHIgPSBwdHIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoZGVjb2RlZFB0cikK
KyAgICAgICAgICAgIHNyYy5zZXQoZGVjb2Rlci52bSgpLCBvd25lciwgZGVjb2RlZFB0cik7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IElDID0gMCwgdHlwZW5hbWUg
T0ggPSBDcmFzaE9uT3ZlcmZsb3c+CitzdHJ1Y3QgQ2FjaGVkVmVjdG9yIDogcHVibGljIFZhcmlh
YmxlTGVuZ3RoT2JqZWN0PFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJQywgT0g+LCBDYWNoZWRWZWN0
b3I8VCwgSUMsIE9IPj4geworICAgIHVuc2lnbmVkIHNpemU7CisKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8U291cmNlVHlwZTxUPiwgSUMsIE9IPiYgdmVj
dG9yKQorICAgIHsKKyAgICAgICAgc2l6ZSA9IHZlY3Rvci5zaXplKCk7CisgICAgICAgIFQqIGJ1
ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIsIHNpemUpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6
OmVuY29kZShlbmNvZGVyLCBidWZmZXJbaV0sIHZlY3RvcltpXSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBWZWN0b3I8U291cmNlVHlwZTxUPiwgSUMsIE9IPiYgdmVjdG9yLCBBcmdzLi4uIGFyZ3MpIGNv
bnN0CisgICAgeworICAgICAgICB2ZWN0b3IucmVzaXplVG9GaXQoc2l6ZSk7CisgICAgICAgIGNv
bnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmRlY29k
ZShkZWNvZGVyLCBidWZmZXJbaV0sIHZlY3RvcltpXSwgYXJncy4uLik7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnN0LCB0eXBlbmFtZSBTbmQ+CitzdHJ1Y3QgQ2FjaGVkUGFpciA6
IHB1YmxpYyBDYWNoZWRPYmplY3Q8c3RkOjpwYWlyPFNvdXJjZVR5cGU8RnN0PiwgU291cmNlVHlw
ZTxTbmQ+PiwgQ2FjaGVkUGFpcjxGc3QsIFNuZD4+IHsKKyAgICBGc3QgZnN0OworICAgIFNuZCBz
bmQ7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnBhaXI8
U291cmNlVHlwZTxGc3Q+LCBTb3VyY2VUeXBlPFNuZD4+JiBwYWlyKQorICAgIHsKKyAgICAgICAg
OjpKU0M6OmVuY29kZShlbmNvZGVyLCBmc3QsIHN0ZDo6Z2V0PDA+KHBhaXIpKTsKKyAgICAgICAg
OjpKU0M6OmVuY29kZShlbmNvZGVyLCBzbmQsIHN0ZDo6Z2V0PDE+KHBhaXIpKTsKKyAgICB9CisK
KyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8U291cmNlVHlwZTxG
c3Q+LCBTb3VyY2VUeXBlPFNuZD4+JiBwYWlyKSBjb25zdAorICAgIHsKKyAgICAgICAgOjpKU0M6
OmRlY29kZShkZWNvZGVyLCBmc3QsIHN0ZDo6Z2V0PDA+KHBhaXIpKTsKKyAgICAgICAgOjpKU0M6
OmRlY29kZShkZWNvZGVyLCBzbmQsIHN0ZDo6Z2V0PDE+KHBhaXIpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoQXJnID0g
dHlwZW5hbWUgRGVmYXVsdEhhc2g8U291cmNlVHlwZTxLZXk+Pjo6SGFzaCwgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnID0gSGFzaFRyYWl0czxTb3VyY2VUeXBlPEtleT4+LCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmcgPSBIYXNoVHJhaXRzPFNvdXJjZVR5cGU8VmFsdWU+Pj4KK3N0cnVjdCBDYWNoZWRI
YXNoTWFwIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEhhc2hNYXA8U291cmNlVHlwZTxL
ZXk+LCBTb3VyY2VUeXBlPFZhbHVlPiwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+LCBDYWNoZWRIYXNoTWFwPEtleSwgVmFsdWUsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnPj4geworCisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFBhaXI8S2V5LCBW
YWx1ZT4+IGVudHJpZXM7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgor
ICAgIHVzaW5nIE1hcCA9IEhhc2hNYXA8SywgViwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmc+OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
TWFwPFNvdXJjZVR5cGU8S2V5PiwgU291cmNlVHlwZTxWYWx1ZT4+JiBtYXApCisgICAgeworICAg
ICAgICBlbnRyaWVzLnNpemUgPSBtYXAuc2l6ZSgpOworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0
eXBlKGVudHJpZXMpPiBlbnRyaWVzVmVjdG9yKG1hcC5zaXplKCkpOworICAgICAgICB1bnNpZ25l
ZCBpID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1hcCkKKyAgICAgICAgICAg
IGVudHJpZXNWZWN0b3JbaSsrXSA9IHsgaXQua2V5LCBpdC52YWx1ZSB9OworICAgICAgICBlbnRy
aWVzLmVuY29kZShlbmNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZh
bHVlPj4mIG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50
cmllcyk+IGRlY29kZWRFbnRyaWVzOworICAgICAgICBlbnRyaWVzLmRlY29kZShkZWNvZGVyLCBk
ZWNvZGVkRW50cmllcyk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IGRlY29kZWRF
bnRyaWVzKQorICAgICAgICAgICAgbWFwLnNldChzdGQ6OmdldDwwPihwYWlyKSwgc3RkOjpnZXQ8
MT4ocGFpcikpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCA6
IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxVbmlxdWVkU3RyaW5nSW1wbCwgQ2FjaGVkVW5p
cXVlZFN0cmluZ0ltcGw+IHsKKyAgICBib29sIGlzOEJpdCA6IDE7CisgICAgYm9vbCBpc1N5bWJv
bCA6IDE7CisgICAgYm9vbCBpc0F0b21pYyA6IDE7CisgICAgdW5zaWduZWQgbGVuZ3RoOworCisg
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nSW1wbCYgc3RyaW5n
KQorICAgIHsKKyAgICAgICAgaXNBdG9taWMgPSBzdHJpbmcuaXNBdG9taWMoKTsKKyAgICAgICAg
aXNTeW1ib2wgPSBzdHJpbmcuaXNTeW1ib2woKTsKKyAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9
IGNvbnN0X2Nhc3Q8U3RyaW5nSW1wbCo+KCZzdHJpbmcpOworICAgICAgICBpZiAoaXNTeW1ib2wp
IHsKKyAgICAgICAgICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IHN0YXRpY19jYXN0PFN5bWJvbElt
cGwqPihpbXBsKTsKKyAgICAgICAgICAgIGlmICghc3ltYm9sLT5pc051bGxTeW1ib2woKSkgewor
ICAgICAgICAgICAgICAgIElkZW50aWZpZXIgdWlkID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmZW5j
b2Rlci52bSgpLCBzeW1ib2wpOworICAgICAgICAgICAgICAgIGltcGwgPSBlbmNvZGVyLnZtKCku
cHJvcGVydHlOYW1lcy0+bG9va1VwUHVibGljTmFtZSh1aWQpLnN0cmluZygpLmltcGwoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlzOEJpdCA9IGltcGwtPmlzOEJpdCgp
OworICAgICAgICBsZW5ndGggPSBpbXBsLT5sZW5ndGgoKTsKKworICAgICAgICBpZiAoIWxlbmd0
aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBzaXplID0gbGVuZ3Ro
OworICAgICAgICBjb25zdCB2b2lkKiBwYXlsb2FkOworICAgICAgICBpZiAoaXM4Qml0KQorICAg
ICAgICAgICAgcGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgcGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAg
c2l6ZSAqPSAyOworICAgICAgICB9CisKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+
YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIHBheWxvYWQs
IHNpemUpOworICAgIH0KKworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gY3JlYXRlID0gWyZdKGNvbnN0IGF1
dG8qIGJ1ZmZlcikgLT4gVW5pcXVlZFN0cmluZ0ltcGwqIHsKKyAgICAgICAgICAgIGlmICghaXNT
eW1ib2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZ0ltcGw6OmFkZChidWZm
ZXIsIGxlbmd0aCkubGVha1JlZigpOworCisgICAgICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJlN5bWJvbEltcGw6OmNyZWF0ZU51bGxTeW1ib2woKS5sZWFrUmVm
KCk7CisKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZkZWNvZGVyLnZtKCksIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIFN0cmluZyBz
dHIgPSBkZWNvZGVyLnZtKCkucHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoaWRlbnQp
LT5zdHJpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIGltcGwgPSBzdHIucmVsZWFzZUlt
cGwoKS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChpbXBsLT5pc1N5bWJvbCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KGltcGwpOworICAg
ICAgICB9OworCisgICAgICAgIGlmIChpczhCaXQpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
KHRoaXMtPmJ1ZmZlcjxMQ2hhcj4oKSk7CisgICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVm
ZmVyPFVDaGFyPigpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nSW1wbCA6IHB1
YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTdHJpbmdJbXBsLCBDYWNoZWRTdHJpbmdJbXBsPiB7
CisgICAgQ2FjaGVkVW5pcXVlZFN0cmluZ0ltcGwgdW5pcXVlZFN0cmluZ0ltcGw7CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmdJbXBsJiBpbXBsKQorICAg
IHsKKyAgICAgICAgdW5pcXVlZFN0cmluZ0ltcGwuZW5jb2RlKGVuY29kZXIsIGltcGwpOworICAg
IH0KKworICAgIFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHVuaXF1ZWRTdHJpbmdJbXBsLmRlY29kZShkZWNvZGVyKTsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2Jq
ZWN0PFN0cmluZywgQ2FjaGVkU3RyaW5nPiB7CisgICAgQ2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1
ZWRTdHJpbmdJbXBsPiBpbXBsOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBpbXBsLmVuY29kZShlbmNvZGVy
LCBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy5pbXBsKCkpKTsKKyAgICB9
CisKKyAgICBTdHJpbmcgZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gU3RyaW5nKChSZWZQdHI8U3RyaW5nSW1wbD4paW1wbC5kZWNvZGUoZGVjb2Rl
cikpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmluZyYg
ZHN0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHN0ID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0K
K307CisKK3N0cnVjdCBDYWNoZWRJZGVudGlmaWVyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2Jq
ZWN0PElkZW50aWZpZXIsIENhY2hlZElkZW50aWZpZXI+IHsKKyAgICBDYWNoZWRTdHJpbmcgc3Ry
aW5nOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHN0cmluZy5lbmNvZGUoZW5jb2RlciwgaWRl
bnRpZmllci5zdHJpbmcoKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHIgPSBzdHJpbmcuZGVj
b2RlKGRlY29kZXIpOworICAgICAgICBpZiAoc3RyLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIElkZW50aWZpZXIoKTsKKworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVVpZCgm
ZGVjb2Rlci52bSgpLCAoVW5pcXVlZFN0cmluZ0ltcGwqKXN0ci5pbXBsKCkpOworICAgIH0KKwor
ICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElkZW50aWZpZXImIGlkZW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgaWRlbnQgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDYWNoZWRPcHRpb25hbCA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+LCBDYWNoZWRPcHRp
b25hbDxUPj4geworICAgIGJvb2wgaXNFbXB0eTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4mIHNvdXJjZSkKKyAg
ICB7CisgICAgICAgIGlzRW1wdHkgPSAhc291cmNlOworCisgICAgICAgIGlmIChpc0VtcHR5KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+
KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKnNvdXJjZSk7CisgICAgfQorCisgICAgV1RGOjpP
cHRpb25hbDxTb3VyY2VUeXBlPFQ+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgICAgICByZXR1cm4geyB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKS0+ZGVjb2Rl
KGRlY29kZXIpIH07CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
V1RGOjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiYgZHN0KSBjb25zdAorICAgIHsKKyAgICAgICAg
ZHN0ID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VUeXBlPFQ+PiYgc291cmNlKQor
ICAgIHsKKyAgICAgICAgaWYgKCFzb3VyY2UpCisgICAgICAgICAgICBlbmNvZGUoZW5jb2Rlciwg
V1RGOjpudWxsb3B0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jb2RlKGVuY29kZXIs
IHsgKnNvdXJjZSB9KTsKKyAgICB9CisKKyAgICBTb3VyY2VUeXBlPFQ+KiBkZWNvZGVBc1B0cihE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUg
YnVmZmVyPFQ+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVk
U2ltcGxlSnVtcFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSwgQ2FjaGVkU2ltcGxlSnVtcFRhYmxlPiB7CisgICAgaW50MzJfdCBtaW47CisgICAgQ2Fj
aGVkVmVjdG9yPGludDMyX3Q+IGJyYW5jaE9mZnNldHM7CisKKyAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlKQor
ICAgIHsKKyAgICAgICAgbWluID0ganVtcFRhYmxlLm1pbjsKKyAgICAgICAgYnJhbmNoT2Zmc2V0
cy5lbmNvZGUoZW5jb2RlciwganVtcFRhYmxlLmJyYW5jaE9mZnNldHMpOworICAgIH0KKworICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBq
dW1wVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBqdW1wVGFibGUubWluID0gbWluOworICAg
ICAgICBicmFuY2hPZmZzZXRzLmRlY29kZShkZWNvZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0
cyk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFN0cmluZ0p1bXBUYWJsZSA6IHB1YmxpYyBD
YWNoZWRPYmplY3Q8VW5saW5rZWRTdHJpbmdKdW1wVGFibGUsIENhY2hlZFN0cmluZ0p1bXBUYWJs
ZT4geworICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENhY2hlZFN0cmluZ0ltcGw+LCBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6IE9mZnNldExvY2F0aW9uPiBvZmZzZXRUYWJsZTsKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiBqdW1wVGFibGUpCisgICAgeworICAgICAgICBvZmZzZXRUYWJsZS5lbmNvZGUoZW5j
b2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKSBjb25z
dAorICAgIHsKKyAgICAgICAgb2Zmc2V0VGFibGUuZGVjb2RlKGRlY29kZXIsIGp1bXBUYWJsZS5v
ZmZzZXRUYWJsZSk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFJhcmVEYXRhIDogcHVibGlj
IENhY2hlZE9iamVjdDxVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEsIENhY2hlZFJhcmVEYXRh
PiB7CisgICAgQ2FjaGVkVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRs
ZXJzOworCisgICAgLy8gSnVtcCBUYWJsZXMKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkU2ltcGxl
SnVtcFRhYmxlPiBzd2l0Y2hKdW1wVGFibGVzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRTdHJp
bmdKdW1wVGFibGU+IHN0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICBDYWNoZWRWZWN0b3I8
RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IGV4cHJlc3Npb25JbmZvRmF0UG9zaXRp
b25zOworCisgICAgQ2FjaGVkSGFzaE1hcDx1bnNpZ25lZCwgVW5saW5rZWRDb2RlQmxvY2s6OlJh
cmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IHR5cGVQcm9maWxlckluZm9NYXA7
CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG9wUHJvZmlsZUNv
bnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOworCisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEmIHJhcmVEYXRhKQorICAg
IHsKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlcnMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1f
ZXhjZXB0aW9uSGFuZGxlcnMpOworICAgICAgICBzd2l0Y2hKdW1wVGFibGVzLmVuY29kZShlbmNv
ZGVyLCByYXJlRGF0YS5tX3N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBzdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMpOworICAgICAgICBleHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5lbmNvZGUoZW5jb2Rlciwg
cmFyZURhdGEubV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIHR5cGVQcm9m
aWxlckluZm9NYXAuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fdHlwZVByb2ZpbGVySW5mb01h
cCk7CisgICAgICAgIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmVuY29kZShl
bmNvZGVyLCByYXJlRGF0YS5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTsK
KyAgICB9CisKKyAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEqIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVE
YXRhKiByYXJlRGF0YSA9IG5ldyBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEgeyB9OworICAg
ICAgICBleGNlcHRpb25IYW5kbGVycy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnMpOworICAgICAgICBzd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNvZGVyLCBy
YXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7
CisgICAgICAgIGV4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmRlY29kZShkZWNvZGVyLCByYXJl
RGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIHR5cGVQcm9maWxl
ckluZm9NYXAuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAp
OworICAgICAgICBvcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5kZWNvZGUoZGVj
b2RlciwgcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOwor
ICAgICAgICByZXR1cm4gcmFyZURhdGE7CisgICAgfQorCit9OworCitzdHJ1Y3QgQ2FjaGVkQml0
VmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEJpdFZlY3RvciwgQ2FjaGVkQml0
VmVjdG9yPiB7CisgICAgdW5zaWduZWQgc2l6ZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yKQorICAgIHsKKyAgICAgICAgc2l6
ZSA9IGJpdFZlY3Rvci5zaXplKCk7CisgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHRoaXMtPmFs
bG9jYXRlKGVuY29kZXIsIHNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBiaXRWZWN0b3Iu
Yml0cygpLCBzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgQml0VmVj
dG9yJiBiaXRWZWN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBiaXRWZWN0b3IuZW5zdXJlU2l6
ZShzaXplKTsKKyAgICAgICAgbWVtY3B5KGJpdFZlY3Rvci5iaXRzKCksIHRoaXMtPmJ1ZmZlcigp
LCBzaXplKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNo
QXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8VD46Okhhc2g+CitzdHJ1Y3QgQ2FjaGVkSGFzaFNl
dCA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SGFzaFNldDxTb3VyY2VUeXBlPFQ+LCBIYXNoQXJnPiwg
Q2FjaGVkSGFzaFNldDxULCBIYXNoQXJnPj4geworICAgIENhY2hlZFZlY3RvcjxUPiBlbnRyaWVz
OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldDxTb3Vy
Y2VUeXBlPFQ+LCBIYXNoQXJnPiYgc2V0KQorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNs
dHlwZShlbnRyaWVzKT4gZW50cmllc1ZlY3RvcihzZXQuc2l6ZSgpKTsKKyAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IHNldCkKKyAgICAgICAg
ICAgIGVudHJpZXNWZWN0b3JbaSsrXSA9IGl0ZW07CisgICAgICAgIGVudHJpZXMuZW5jb2RlKGVu
Y29kZXIsIGVudHJpZXNWZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIEhhc2hTZXQ8U291cmNlVHlwZTxUPiwgSGFzaEFyZz4mIHNldCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50cmllcyk+IGVudHJpZXNWZWN0b3I7
CisgICAgICAgIGVudHJpZXMuZGVjb2RlKGRlY29kZXIsIGVudHJpZXNWZWN0b3IpOworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBlbnRyaWVzVmVjdG9yKQorICAgICAgICAgICAgc2V0
LmFkZChpdGVtKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkQ29uc3RhbnRJZGVudGlmaWVy
U2V0RW50cnkgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8Q29uc3RhbnRJZGVudGlmaWVy
U2V0RW50cnksIENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiB7CisgICAgdW5zaWdu
ZWQgY29uc3RhbnQ7CisgICAgQ2FjaGVkSGFzaFNldDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVl
ZFN0cmluZ0ltcGw+LCBJZGVudGlmaWVyUmVwSGFzaD4gc2V0OworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5
KQorICAgIHsKKyAgICAgICAgY29uc3RhbnQgPSBzdGQ6OmdldDwxPihlbnRyeSk7CisgICAgICAg
IHNldC5lbmNvZGUoZW5jb2Rlciwgc3RkOjpnZXQ8MD4oZW50cnkpKTsKKyAgICB9CisKKyAgICB2
b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSYg
ZW50cnkpIGNvbnN0CisgICAgeworICAgICAgICBzdGQ6OmdldDwxPihlbnRyeSkgPSBjb25zdGFu
dDsKKyAgICAgICAgc2V0LmRlY29kZShkZWNvZGVyLCBzdGQ6OmdldDwwPihlbnRyeSkpOworICAg
IH0KK307CisKK3N0cnVjdCBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IDogcHVibGljIENhY2hl
ZE9iamVjdDxWYXJpYWJsZUVudmlyb25tZW50LCBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50PiB7
CisKKyAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkOworICAgIENhY2hlZEhhc2hNYXA8Q2Fj
aGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgVmFyaWFibGVFbnZpcm9ubWVudEVu
dHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8VW5pcXVlZFN0cmluZ0lt
cGw+PiwgVmFyaWFibGVFbnZpcm9ubWVudEVudHJ5SGFzaFRyYWl0cz4gbWFwOworCisgICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52
KQorICAgIHsKKyAgICAgICAgaXNFdmVyeXRoaW5nQ2FwdHVyZWQgPSBlbnYubV9pc0V2ZXJ5dGhp
bmdDYXB0dXJlZDsKKyAgICAgICAgbWFwLmVuY29kZShlbmNvZGVyLCBlbnYubV9tYXApOworICAg
IH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJvbm1l
bnQmIGVudikgY29uc3QKKyAgICB7CisgICAgICAgIGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVk
ID0gaXNFdmVyeXRoaW5nQ2FwdHVyZWQ7CisgICAgICAgIG1hcC5kZWNvZGUoZGVjb2RlciwgZW52
Lm1fbWFwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTVCA9
IFNvdXJjZVR5cGU8VD4+CitzdHJ1Y3QgQ2FjaGVkQXJyYXkgOiBwdWJsaWMgVmFyaWFibGVMZW5n
dGhPYmplY3Q8U1QqLCBDYWNoZWRBcnJheTxULCBTVD4+IHsKKyAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBTVCogYXJyYXksIHVuc2lnbmVkIHNpemUpCisgICAgeworICAg
ICAgICBUKiBkc3QgPSB0aGlzLT50ZW1wbGF0ZSBhbGxvY2F0ZTxUPihlbmNvZGVyLCBzaXplKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAg
IDo6SlNDOjplbmNvZGUoZW5jb2RlciwgZHN0W2ldLCBhcnJheVtpXSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBTVCogYXJyYXksIHVuc2lnbmVkIHNpemUsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7
CisgICAgICAgIGNvbnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAg
OjpKU0M6OmRlY29kZShkZWNvZGVyLCBidWZmZXJbaV0sIGFycmF5W2ldLCBhcmdzLi4uKTsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGUgOiBwdWJsaWMgQ2Fj
aGVkT2JqZWN0PFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJs
ZT4geworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBDYWNoZWRBcnJheTxTY29wZU9mZnNldD4g
YXJndW1lbnRzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2Nv
cGVkQXJndW1lbnRzVGFibGUmIHNjb3BlZEFyZ3VtZW50c1RhYmxlKQorICAgIHsKKyAgICAgICAg
bGVuZ3RoID0gc2NvcGVkQXJndW1lbnRzVGFibGUubV9sZW5ndGg7CisgICAgICAgIGFyZ3VtZW50
cy5lbmNvZGUoZW5jb2Rlciwgc2NvcGVkQXJndW1lbnRzVGFibGUubV9hcmd1bWVudHMuZ2V0KCks
IGxlbmd0aCk7CisgICAgfQorCisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUq
IHNjb3BlZEFyZ3VtZW50c1RhYmxlID0gU2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZShkZWNv
ZGVyLnZtKCksIGxlbmd0aCk7CisgICAgICAgIGFyZ3VtZW50cy5kZWNvZGUoZGVjb2Rlciwgc2Nv
cGVkQXJndW1lbnRzVGFibGUtPm1fYXJndW1lbnRzLmdldCgpLCBsZW5ndGgpOworICAgICAgICBy
ZXR1cm4gc2NvcGVkQXJndW1lbnRzVGFibGU7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFN5
bWJvbFRhYmxlRW50cnkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFN5bWJvbFRhYmxlRW50cnksIENh
Y2hlZFN5bWJvbFRhYmxlRW50cnk+IHsKKyAgICBpbnRwdHJfdCBiaXRzOworCisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIHN5bWJvbFRhYmxlRW50cnkp
CisgICAgeworICAgICAgICBiaXRzID0gc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMgfCBTeW1ib2xU
YWJsZUVudHJ5OjpTbGltRmxhZzsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwg
U3ltYm9sVGFibGVFbnRyeSYgc3ltYm9sVGFibGVFbnRyeSkgY29uc3QKKyAgICB7CisgICAgICAg
IHN5bWJvbFRhYmxlRW50cnkubV9iaXRzID0gYml0czsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2Fj
aGVkU3ltYm9sVGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFN5bWJvbFRhYmxlLCBDYWNoZWRT
eW1ib2xUYWJsZT4geworICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1
ZWRTdHJpbmdJbXBsPiwgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gs
IEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFN5bWJvbFRhYmxlSW5kZXhI
YXNoVHJhaXRzPiBtYXA7CisgICAgU2NvcGVPZmZzZXQgbWF4U2NvcGVPZmZzZXQ7CisgICAgdW5z
aWduZWQgdXNlc05vblN0cmljdEV2YWwgOiAxOworICAgIHVuc2lnbmVkIG5lc3RlZExleGljYWxT
Y29wZSA6IDE7CisgICAgdW5zaWduZWQgc2NvcGVUeXBlIDogMzsKKyAgICAvLyBGSVhNRTogZG8g
d2UgbmVlZCB0byBjYWNoZWQgdGhpcyBldmVudHVhbGx5PworICAgIC8vIENhY2hlZFB0cjxTeW1i
b2xUYWJsZVJhcmVEYXRhPiByYXJlRGF0YTsKKyAgICBDYWNoZWRQdHI8Q2FjaGVkU2NvcGVkQXJn
dW1lbnRzVGFibGU+IGFyZ3VtZW50czsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghc3ltYm9sVGFibGUubV9yYXJlRGF0YSk7CisgICAgICAgIG1hcC5lbmNvZGUoZW5jb2Rlciwg
c3ltYm9sVGFibGUubV9tYXApOworICAgICAgICBtYXhTY29wZU9mZnNldCA9IHN5bWJvbFRhYmxl
Lm1fbWF4U2NvcGVPZmZzZXQ7CisgICAgICAgIHVzZXNOb25TdHJpY3RFdmFsID0gc3ltYm9sVGFi
bGUubV91c2VzTm9uU3RyaWN0RXZhbDsKKyAgICAgICAgbmVzdGVkTGV4aWNhbFNjb3BlID0gc3lt
Ym9sVGFibGUubV9uZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAgICAgIHNjb3BlVHlwZSA9IHN5bWJv
bFRhYmxlLm1fc2NvcGVUeXBlOworICAgICAgICBhcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHN5
bWJvbFRhYmxlLm1fYXJndW1lbnRzLmdldCgpKTsKKyAgICB9CisKKyAgICBTeW1ib2xUYWJsZSog
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSk7CisgICAg
ICAgIG1hcC5kZWNvZGUoZGVjb2Rlciwgc3ltYm9sVGFibGUtPm1fbWFwKTsKKyAgICAgICAgc3lt
Ym9sVGFibGUtPm1fbWF4U2NvcGVPZmZzZXQgPSBtYXhTY29wZU9mZnNldDsKKyAgICAgICAgc3lt
Ym9sVGFibGUtPm1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9uU3RyaWN0RXZhbDsKKyAgICAg
ICAgc3ltYm9sVGFibGUtPm1fbmVzdGVkTGV4aWNhbFNjb3BlID0gbmVzdGVkTGV4aWNhbFNjb3Bl
OworICAgICAgICBzeW1ib2xUYWJsZS0+bV9zY29wZVR5cGUgPSBzY29wZVR5cGU7CisgICAgICAg
IFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29wZWRBcmd1bWVudHNUYWJsZSA9IGFyZ3VtZW50cy5k
ZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzY29wZWRBcmd1bWVudHNUYWJsZSkKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cy5zZXQoZGVjb2Rlci52bSgpLCBzeW1ib2xU
YWJsZSwgc2NvcGVkQXJndW1lbnRzVGFibGUpOworICAgICAgICByZXR1cm4gc3ltYm9sVGFibGU7
CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEpTVmFsdWU7CitzdHJ1Y3QgQ2FjaGVkSW1tdXRh
YmxlQnV0dGVyZmx5IDogcHVibGljIENhY2hlZE9iamVjdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSwg
Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PiB7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgdW5pb24geworICAgICAgICBDYWNoZWRBcnJh
eTxkb3VibGU+IGNhY2hlZERvdWJsZXM7CisgICAgICAgIENhY2hlZEFycmF5PENhY2hlZEpTVmFs
dWUsIFdyaXRlQmFycmllcjxVbmtub3duPj4gY2FjaGVkVmFsdWVzOworICAgIH07CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0ltbXV0YWJsZUJ1dHRlcmZseSYgaW1tdXRh
YmxlQnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgbGVuZ3RoID0gaW1tdXRhYmxlQnV0dGVyZmx5
Lmxlbmd0aCgpOworICAgICAgICBpbmRleGluZ1R5cGUgPSBpbW11dGFibGVCdXR0ZXJmbHkuaW5k
ZXhpbmdNb2RlKCk7IC8vIHRoaXMgaXMgY29uZnVzaW5nLCBub3Qgc3VyZSB3aHkgd2UgaGF2ZSB0
byB1c2UgaW5kZXhpbmdNb2RlIHZzIGluZGV4aW5nVHlwZQorICAgICAgICBpZiAoaGFzRG91Ymxl
KGluZGV4aW5nVHlwZSkpCisgICAgICAgICAgICBjYWNoZWREb3VibGVzLmVuY29kZShlbmNvZGVy
LCBpbW11dGFibGVCdXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRh
dGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FjaGVkVmFsdWVzLmVu
Y29kZShlbmNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+Y29udGlndW91
cygpLmRhdGEoKSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSog
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU0ltbXV0YWJs
ZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNy
ZWF0ZShkZWNvZGVyLnZtKCksIGluZGV4aW5nVHlwZSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKGhh
c0RvdWJsZShpbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgY2FjaGVkRG91Ymxlcy5kZWNvZGUo
ZGVjb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzRG91
YmxlKCkuZGF0YSgpLCBsZW5ndGgsIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGNhY2hlZFZhbHVlcy5kZWNvZGUoZGVjb2RlciwgaW1tdXRhYmxlQnV0dGVy
Zmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBsZW5ndGgsIGltbXV0YWJs
ZUJ1dHRlcmZseSk7CisgICAgICAgIHJldHVybiBpbW11dGFibGVCdXR0ZXJmbHk7CisgICAgfQor
fTsKKworc3RydWN0IENhY2hlZFJlZ0V4cCA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8UmVnRXhwLCBD
YWNoZWRSZWdFeHA+IHsKKyAgICBDYWNoZWRTdHJpbmcgcGF0dGVyblN0cmluZzsKKyAgICBSZWdF
eHBGbGFncyBmbGFnczsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFJlZ0V4cCYgcmVnRXhwKQorICAgIHsKKyAgICAgICAgcGF0dGVyblN0cmluZy5lbmNvZGUoZW5j
b2RlciwgcmVnRXhwLm1fcGF0dGVyblN0cmluZyk7CisgICAgICAgIGZsYWdzID0gcmVnRXhwLm1f
ZmxhZ3M7CisgICAgfQorCisgICAgUmVnRXhwKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuIHsgcGF0dGVyblN0cmluZy5kZWNvZGUo
ZGVjb2RlcikgfTsKKyAgICAgICAgcmV0dXJuIFJlZ0V4cDo6Y3JlYXRlKGRlY29kZXIudm0oKSwg
cGF0dGVybiwgZmxhZ3MpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3IgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
ciwgQ2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPiB7CisgICAgQ2FjaGVkVmVjdG9yPENh
Y2hlZFN0cmluZywgND4gcmF3U3RyaW5nczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkT3B0aW9u
YWw8Q2FjaGVkU3RyaW5nPiwgND4gY29va2VkU3RyaW5nczsKKworICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciYgdGVtcGxhdGVP
YmplY3REZXNjcmlwdG9yKQorICAgIHsKKyAgICAgICAgcmF3U3RyaW5ncy5lbmNvZGUoZW5jb2Rl
ciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLnJhd1N0cmluZ3MoKSk7CisgICAgICAgIGNvb2tl
ZFN0cmluZ3MuZW5jb2RlKGVuY29kZXIsIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jb29rZWRT
dHJpbmdzKCkpOworICAgIH0KKworICAgIFJlZjxUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yOjpTdHJpbmdWZWN0b3IgZGVjb2RlZFJhd1N0cmluZ3M7CisgICAgICAgIFRl
bXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6T3B0aW9uYWxTdHJpbmdWZWN0b3IgZGVjb2RlZENvb2tl
ZFN0cmluZ3M7CisgICAgICAgIHJhd1N0cmluZ3MuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRSYXdT
dHJpbmdzKTsKKyAgICAgICAgY29va2VkU3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZENv
b2tlZFN0cmluZ3MpOworICAgICAgICByZXR1cm4gVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpj
cmVhdGUoV1RGTW92ZShkZWNvZGVkUmF3U3RyaW5ncyksIFdURk1vdmUoZGVjb2RlZENvb2tlZFN0
cmluZ3MpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkQmlnSW50IDogcHVibGljIFZhcmlh
YmxlTGVuZ3RoT2JqZWN0PEpTQmlnSW50LCBDYWNoZWRCaWdJbnQ+IHsKKyAgICB1bnNpZ25lZCBs
ZW5ndGg7CisgICAgYm9vbCBzaWduOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgSlNCaWdJbnQmIGJpZ0ludCkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IGJpZ0ludC5sZW5n
dGgoKTsKKyAgICAgICAgc2lnbiA9IGJpZ0ludC5zaWduKCk7CisKKyAgICAgICAgaWYgKCFsZW5n
dGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHNpemVv
ZihKU0JpZ0ludDo6RGlnaXQpICogbGVuZ3RoOworICAgICAgICB0aGlzLT5hbGxvY2F0ZShlbmNv
ZGVyLCBzaXplKTsKKyAgICAgICAgbWVtY3B5KHRoaXMtPmJ1ZmZlcigpLCBiaWdJbnQuZGF0YVN0
b3JhZ2UoKSwgc2l6ZSk7CisgICAgfQorCisgICAgSlNCaWdJbnQqIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50
OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKGRlY29kZXIudm0oKSwgbGVuZ3RoKTsKKyAgICAg
ICAgYmlnSW50LT5zZXRTaWduKHNpZ24pOworICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3Rv
cmFnZSgpLCB0aGlzLT5idWZmZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBsZW5ndGgp
OworICAgICAgICByZXR1cm4gYmlnSW50OworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRKU1Zh
bHVlIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdyaXRlQmFycmllcjxVbmtub3duPiwg
Q2FjaGVkSlNWYWx1ZT4geworICAgIGVudW0gY2xhc3MgRW5jb2RlZFR5cGUgOiB1aW50OF90IHsK
KyAgICAgICAgSlNWYWx1ZSwKKyAgICAgICAgU3ltYm9sVGFibGUsCisgICAgICAgIFN0cmluZywK
KyAgICAgICAgSW1tdXRhYmxlQnV0dGVyZmx5LAorICAgICAgICBSZWdFeHAsCisgICAgICAgIFRl
bXBsYXRlT2JqZWN0RGVzY3JpcHRvciwKKyAgICAgICAgQmlnSW50LAorICAgIH07CisKKyAgICBF
bmNvZGVkVHlwZSB0eXBlOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSB2
ID0gdmFsdWUuZ2V0KCk7CisKKyAgICAgICAgaWYgKCF2LmlzQ2VsbCgpIHx8IHYuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICB0eXBlID0gRW5jb2RlZFR5cGU6OkpTVmFsdWU7CisgICAgICAgICAg
ICAqdGhpcy0+YWxsb2NhdGU8RW5jb2RlZEpTVmFsdWU+KGVuY29kZXIpID0gSlNWYWx1ZTo6ZW5j
b2RlKHYpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgSlNDZWxs
KiBjZWxsID0gdi5hc0NlbGwoKTsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8g
PSBjZWxsLT5jbGFzc0luZm8oZW5jb2Rlci52bSgpKTsKKworICAgICAgICBpZiAoY2xhc3NJbmZv
ID09IFN5bWJvbFRhYmxlOjppbmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlw
ZTo6U3ltYm9sVGFibGU7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRTeW1ib2xU
YWJsZT4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqanNDYXN0PFN5bWJvbFRhYmxlKj4oY2Vs
bCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNsYXNz
SW5mbyA9PSBKU1N0cmluZzo6aW5mbygpKSB7CisgICAgICAgICAgICB0eXBlID0gRW5jb2RlZFR5
cGU6OlN0cmluZzsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIGltcGwgPSBhc1N0cmluZyhjZWxs
KS0+dHJ5R2V0VmFsdWUoKS5pbXBsKCk7CisgICAgICAgICAgICBBU1NFUlQoIWltcGwgfHwgIWlt
cGwtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkVW5pcXVl
ZFN0cmluZ0ltcGw+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmltcGwpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSBKU0ltbXV0
YWJsZUJ1dHRlcmZseTo6aW5mbygpKSB7CisgICAgICAgICAgICB0eXBlID0gRW5jb2RlZFR5cGU6
OkltbXV0YWJsZUJ1dHRlcmZseTsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZElt
bXV0YWJsZUJ1dHRlcmZseT4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqanNDYXN0PEpTSW1t
dXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSBSZWdFeHA6OmluZm8oKSkgeworICAgICAgICAg
ICAgdHlwZSA9IEVuY29kZWRUeXBlOjpSZWdFeHA7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0
ZTxDYWNoZWRSZWdFeHA+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmpzQ2FzdDxSZWdFeHAq
PihjZWxsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y2xhc3NJbmZvID09IEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjppbmZvKCkpIHsKKyAgICAg
ICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOworICAg
ICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPihl
bmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsIGpzQ2FzdDxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
cio+KGNlbGwpLT5kZXNjcmlwdG9yKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSBKU0JpZ0ludDo6aW5mbygpKSB7CisgICAgICAg
ICAgICB0eXBlID0gRW5jb2RlZFR5cGU6OkJpZ0ludDsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9j
YXRlPENhY2hlZEJpZ0ludD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqanNDYXN0PEpTQmln
SW50Kj4oY2VsbCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlLCBjb25zdCBKU0Nl
bGwqIG93bmVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSlNWYWx1ZSB2OworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6SlNWYWx1ZToKKyAgICAgICAg
ICAgIHYgPSBKU1ZhbHVlOjpkZWNvZGUoKnRoaXMtPmJ1ZmZlcjxFbmNvZGVkSlNWYWx1ZT4oKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6U3ltYm9sVGFi
bGU6CisgICAgICAgICAgICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZFN5bWJvbFRhYmxlPigpLT5k
ZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVk
VHlwZTo6U3RyaW5nOiB7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCA9IHRo
aXMtPmJ1ZmZlcjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4oKS0+ZGVjb2RlKGRlY29kZXIpOwor
ICAgICAgICAgICAgdiA9IEpTU3RyaW5nOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBhZG9wdFJlZigq
aW1wbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFbmNv
ZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZl
cjxDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHk+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpSZWdFeHA6CisgICAgICAgICAg
ICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZFJlZ0V4cD4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlRlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvcjoKKyAgICAgICAgICAgIHYgPSBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6
Y3JlYXRlKGRlY29kZXIudm0oKSwgdGhpcy0+YnVmZmVyPENhY2hlZFRlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvcj4oKS0+ZGVjb2RlKGRlY29kZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVuY29kZWRUeXBlOjpCaWdJbnQ6CisgICAgICAgICAgICB2ID0gdGhpcy0+YnVmZmVy
PENhY2hlZEJpZ0ludD4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgICAgIHZhbHVlLnNldChkZWNvZGVyLnZtKCksIG93bmVyLCB2KTsK
KyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW0gOiBwdWJsaWMgQ2Fj
aGVkT2JqZWN0PEluc3RydWN0aW9uU3RyZWFtLCBDYWNoZWRJbnN0cnVjdGlvblN0cmVhbT4gewor
ICAgIENhY2hlZFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gaW5zdHJ1
Y3Rpb25zOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIHN0cmVhbSkKKyAgICB7CisgICAgICAgIGluc3RydWN0aW9ucy5lbmNvZGUo
ZW5jb2Rlciwgc3RyZWFtLm1faW5zdHJ1Y3Rpb25zKTsKKyAgICB9CisKKyAgICBJbnN0cnVjdGlv
blN0cmVhbSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBW
ZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGluc3RydWN0aW9uc1ZlY3Rv
cjsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyLCBpbnN0cnVjdGlvbnNWZWN0
b3IpOworICAgICAgICByZXR1cm4gbmV3IEluc3RydWN0aW9uU3RyZWFtKFdURk1vdmUoaW5zdHJ1
Y3Rpb25zVmVjdG9yKSk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZE1ldGFkYXRhVGFibGUg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkTWV0YWRhdGFUYWJsZSwgQ2FjaGVkTWV0YWRh
dGFUYWJsZT4geworICAgIGJvb2wgaGFzTWV0YWRhdGE7CisgICAgc3RkOjphcnJheTx1bnNpZ25l
ZCwgVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllcz4gbWV0YWRhdGE7
CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgVW5saW5rZWRNZXRhZGF0YVRhYmxl
JiBtZXRhZGF0YVRhYmxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhVGFibGUubV9p
c0ZpbmFsaXplZCk7CisgICAgICAgIGhhc01ldGFkYXRhID0gbWV0YWRhdGFUYWJsZS5tX2hhc01l
dGFkYXRhOworICAgICAgICBpZiAoIWhhc01ldGFkYXRhKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBVbmxpbmtlZE1ldGFkYXRhVGFibGU6OnNfb2Zmc2V0
VGFibGVFbnRyaWVzOyBpLS07KQorICAgICAgICAgICAgbWV0YWRhdGFbaV0gPSBtZXRhZGF0YVRh
YmxlLmJ1ZmZlcigpW2ldOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBVbmxp
bmtlZE1ldGFkYXRhVGFibGUmIG1ldGFkYXRhVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBt
ZXRhZGF0YVRhYmxlLm1faXNGaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBtZXRhZGF0YVRhYmxl
Lm1faXNMaW5rZWQgPSBmYWxzZTsKKyAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2hhc01ldGFkYXRh
ID0gaGFzTWV0YWRhdGE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IFVubGlua2VkTWV0YWRh
dGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM7IGktLTspCisgICAgICAgICAgICBtZXRhZGF0
YVRhYmxlLmJ1ZmZlcigpW2ldID0gbWV0YWRhdGFbaV07CisgICAgfQorfTsKKworc3RydWN0IENh
Y2hlZFNvdXJjZU9yaWdpbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlT3JpZ2luLCBDYWNo
ZWRTb3VyY2VPcmlnaW4+IHsKKyAgICBDYWNoZWRTdHJpbmcgc3RyaW5nOworCisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlT3JpZ2luJiBzb3VyY2VPcmlnaW4p
CisgICAgeworICAgICAgICBzdHJpbmcuZW5jb2RlKGVuY29kZXIsIHNvdXJjZU9yaWdpbi5zdHJp
bmcoKSk7CisgICAgfQorCisgICAgU291cmNlT3JpZ2luIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNvdXJjZU9yaWdpbiB7IHN0cmluZy5kZWNv
ZGUoZGVjb2RlcikgfTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkVGV4dFBvc2l0aW9uIDog
cHVibGljIENhY2hlZE9iamVjdDxUZXh0UG9zaXRpb24sIENhY2hlZFRleHRQb3NpdGlvbj4gewor
ICAgIGludCBsaW5lOworICAgIGludCBjb2x1bW47CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiwgVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbikKKyAgICB7CisgICAgICAgIGxpbmUgPSB0ZXh0
UG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOworICAgICAgICBjb2x1bW4gPSB0ZXh0UG9z
aXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7CisgICAgfQorCisgICAgVGV4dFBvc2l0aW9u
IGRlY29kZShEZWNvZGVyJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUZXh0UG9zaXRp
b24geyBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxpbmUpLCBPcmRpbmFsTnVtYmVy
Ojpmcm9tWmVyb0Jhc2VkSW50KGNvbHVtbikgfTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgU1QsIHR5cGVuYW1lIENhY2hlZFR5cGU+CitzdHJ1Y3QgQ2FjaGVkU291cmNlUHJvdmlk
ZXJTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U1QsIENhY2hlZFR5cGU+IHsKKyAgICBib29s
IHZhbGlkYXRlZCA6IDE7CisgICAgQ2FjaGVkU291cmNlT3JpZ2luIHNvdXJjZU9yaWdpbjsKKyAg
ICBDYWNoZWRTdHJpbmcgdXJsOworICAgIENhY2hlZFN0cmluZyBzb3VyY2VVUkxEaXJlY3RpdmU7
CisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CisgICAgQ2FjaGVk
VGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRpb247CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAg
ICAgICB2YWxpZGF0ZWQgPSBzb3VyY2VQcm92aWRlci5pc1ZhbGlkKCk7CisgICAgICAgIHNvdXJj
ZU9yaWdpbi5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlT3JpZ2luKCkpOwor
ICAgICAgICB1cmwuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnVybCgpKTsKKyAgICAg
ICAgc291cmNlVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3Vy
Y2VVUkwoKSk7CisgICAgICAgIHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29k
ZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZU1hcHBpbmdVUkwoKSk7CisgICAgICAgIHN0YXJ0UG9z
aXRpb24uZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnN0YXJ0UG9zaXRpb24oKSk7Cisg
ICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlUHJvdmlkZXIm
IHNvdXJjZVByb3ZpZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHZhbGlkYXRlZCkKKyAg
ICAgICAgICAgIHNvdXJjZVByb3ZpZGVyLnNldFZhbGlkKCk7CisgICAgICAgIHNvdXJjZVByb3Zp
ZGVyLnNldFNvdXJjZVVSTERpcmVjdGl2ZShzb3VyY2VVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29k
ZXIpKTsKKyAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZShzb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKSk7CisgICAgfQorfTsK
Kworc3RydWN0IENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJj
ZVByb3ZpZGVyU2hhcGU8U3RyaW5nU291cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVBy
b3ZpZGVyPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8U3Ry
aW5nU291cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPjsKKworICAgIENh
Y2hlZFN0cmluZyBzb3VyY2U7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBTdHJpbmdTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAg
ICBCYXNlOjplbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIpOworICAgICAgICBzb3VyY2Uu
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZSgpLnRvU3RyaW5nKCkpOworICAg
IH0KKworICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVyKiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlIHNvdXJjZVR5cGUpIGNvbnN0CisgICAgeworICAgICAg
ICBTdHJpbmcgZGVjb2RlZFNvdXJjZSA9IHNvdXJjZS5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAg
IFNvdXJjZU9yaWdpbiBkZWNvZGVkU291cmNlT3JpZ2luID0gc291cmNlT3JpZ2luLmRlY29kZShk
ZWNvZGVyKTsKKyAgICAgICAgU3RyaW5nIGRlY29kZWRVUkwgPSB1cmwuZGVjb2RlKGRlY29kZXIp
OworICAgICAgICBUZXh0UG9zaXRpb24gZGVjb2RlZFN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0
aW9uLmRlY29kZShkZWNvZGVyKTsKKworICAgICAgICBSZWY8U3RyaW5nU291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyID0gU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShkZWNvZGVkU291
cmNlLCBkZWNvZGVkU291cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRVUkwpLCBkZWNvZGVk
U3RhcnRQb3NpdGlvbiwgc291cmNlVHlwZSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVy
LCBzb3VyY2VQcm92aWRlci5nZXQoKSk7CisgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIu
bGVha1JlZigpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitzdHJ1Y3Qg
Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBDYWNoZWRTb3VyY2VQcm92
aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENhY2hlZFdlYkFzc2VtYmx5U291
cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFw
ZTxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyLCBDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3Zp
ZGVyPjsKKworICAgIENhY2hlZFZlY3Rvcjx1aW50OF90PiBkYXRhOworCisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciYgc291
cmNlUHJvdmlkZXIpCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwgc291cmNl
UHJvdmlkZXIpOworICAgICAgICBkYXRhLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5k
YXRhKCkpOworICAgIH0KKworICAgIFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIqIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRl
Y29kZWREYXRhOworICAgICAgICBTb3VyY2VPcmlnaW4gZGVjb2RlZFNvdXJjZU9yaWdpbiA9IHNv
dXJjZU9yaWdpbi5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFN0cmluZyBkZWNvZGVkVVJMID0g
dXJsLmRlY29kZShkZWNvZGVyKTsKKworICAgICAgICBkYXRhLmRlY29kZShkZWNvZGVyLCBkZWNv
ZGVkRGF0YSk7CisKKyAgICAgICAgUmVmPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKFdURk1vdmUoZGVj
b2RlZERhdGEpLCBkZWNvZGVkU291cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRVUkwpKTsK
KyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKwor
ICAgICAgICByZXR1cm4gJnNvdXJjZVByb3ZpZGVyLmxlYWtSZWYoKTsKKyAgICB9Cit9OworI2Vu
ZGlmCisKK3N0cnVjdCBDYWNoZWRTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0
aE9iamVjdDxTb3VyY2VQcm92aWRlciwgQ2FjaGVkU291cmNlUHJvdmlkZXI+IHsKKyAgICBTb3Vy
Y2VQcm92aWRlclNvdXJjZVR5cGUgc291cmNlVHlwZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7
CisgICAgICAgIHNvdXJjZVR5cGUgPSBzb3VyY2VQcm92aWRlci5zb3VyY2VUeXBlKCk7CisgICAg
ICAgIHN3aXRjaCAoc291cmNlVHlwZSkgeworICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291
cmNlVHlwZTo6UHJvZ3JhbToKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6
Ok1vZHVsZToKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFN0cmluZ1NvdXJjZVBy
b3ZpZGVyPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
U3RyaW5nU291cmNlUHJvdmlkZXImPihzb3VyY2VQcm92aWRlcikpOworICAgICAgICAgICAgYnJl
YWs7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVy
U291cmNlVHlwZTo6V2ViQXNzZW1ibHk6CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNo
ZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciY+KHNvdXJjZVBy
b3ZpZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFNvdXJjZVByb3ZpZGVyKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoc291cmNlVHlwZSkgeworICAgICAgICBjYXNlIFNvdXJj
ZVByb3ZpZGVyU291cmNlVHlwZTo6UHJvZ3JhbToKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRl
clNvdXJjZVR5cGU6Ok1vZHVsZToKKyAgICAgICAgICAgIHJldHVybiB0aGlzLT5idWZmZXI8Q2Fj
aGVkU3RyaW5nU291cmNlUHJvdmlkZXI+KCktPmRlY29kZShkZWNvZGVyLCBzb3VyY2VUeXBlKTsK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3Vy
Y2VUeXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAgICAgIHJldHVybiB0aGlzLT5idWZmZXI8Q2Fj
aGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2RlKGRlY29kZXIpOworI2VuZGlm
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgU1QsIHR5cGVu
YW1lIENhY2hlVHlwZT4KK3N0cnVjdCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZSA6IHB1
YmxpYyBDYWNoZWRPYmplY3Q8U1QsICBDYWNoZVR5cGU+IHsKKyAgICBDYWNoZWRQdHI8Q2FjaGVk
U291cmNlUHJvdmlkZXI+IHByb3ZpZGVyOworICAgIGludCBzdGFydE9mZnNldDsKKyAgICBpbnQg
ZW5kT2Zmc2V0OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5s
aW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAgcHJvdmlkZXIuZW5j
b2RlKGVuY29kZXIsIHNvdXJjZUNvZGUubV9wcm92aWRlci5nZXQoKSk7CisgICAgICAgIHN0YXJ0
T2Zmc2V0ID0gc291cmNlQ29kZS5zdGFydE9mZnNldCgpOworICAgICAgICBlbmRPZmZzZXQgPSBz
b3VyY2VDb2RlLmVuZE9mZnNldCgpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFVubGlua2VkU291cmNlQ29kZSYgc291cmNlQ29kZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHNvdXJjZUNvZGUubV9wcm92aWRlciA9IHByb3ZpZGVyLmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgc291cmNlQ29kZS5tX3N0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7CisgICAgICAg
IHNvdXJjZUNvZGUubV9lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7CisgICAgfQorfTsKKworCitzdHJ1
Y3QgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlIDogcHVibGljIENhY2hlZFVubGlua2VkU291cmNl
Q29kZVNoYXBlPFVubGlua2VkU291cmNlQ29kZSwgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlPiB7
IH07CisKK3N0cnVjdCBDYWNoZWRTb3VyY2VDb2RlIDogcHVibGljIENhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlPFNvdXJjZUNvZGUsIENhY2hlZFNvdXJjZUNvZGU+IHsKKyAgICB1c2luZyBC
YXNlID0gQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8U291cmNlQ29kZSwgQ2FjaGVkU291
cmNlQ29kZT47CisKKyAgICBpbnQgZmlyc3RMaW5lOworICAgIGludCBzdGFydENvbHVtbjsKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZUNvZGUpCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZSk7
CisgICAgICAgIGZpcnN0TGluZSA9IHNvdXJjZUNvZGUuZmlyc3RMaW5lKCkuemVyb0Jhc2VkSW50
KCk7CisgICAgICAgIHN0YXJ0Q29sdW1uID0gc291cmNlQ29kZS5zdGFydENvbHVtbigpLnplcm9C
YXNlZEludCgpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUpIGNvbnN0CisgICAgeworICAgICAgICBCYXNlOjpkZWNvZGUo
ZGVjb2Rlciwgc291cmNlQ29kZSk7CisgICAgICAgIHNvdXJjZUNvZGUubV9maXJzdExpbmUgPSBP
cmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGZpcnN0TGluZSk7CisgICAgICAgIHNvdXJj
ZUNvZGUubV9zdGFydENvbHVtbiA9IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoc3Rh
cnRDb2x1bW4pOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLCBDYWNoZWRG
dW5jdGlvbkV4ZWN1dGFibGU+IHsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0OworCisgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zm
c2V0OworICAgIHVuc2lnbmVkIGxpbmVDb3VudDsKKyAgICB1bnNpZ25lZCB1bmxpbmtlZEZ1bmN0
aW9uTmFtZVN0YXJ0OworICAgIHVuc2lnbmVkIHVubGlua2VkQm9keVN0YXJ0Q29sdW1uOworICAg
IHVuc2lnbmVkIHVubGlua2VkQm9keUVuZENvbHVtbjsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNl
dDsKKyAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGg7CisgICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0
YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB1
bnNpZ25lZCB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OworICAgIHVuc2lnbmVkIHBhcmFtZXRlckNv
dW50OworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBTb3VyY2VQYXJzZU1vZGUgc291
cmNlUGFyc2VNb2RlOworICAgIHVuc2lnbmVkIGlzSW5TdHJpY3RDb250ZXh0IDogMTsKKyAgICB1
bnNpZ25lZCBoYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CisgICAgdW5zaWduZWQgaXNCdWlsdGlu
RnVuY3Rpb24gOiAxOworICAgIHVuc2lnbmVkIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVj
dG9yIDogMTsKKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RBYmlsaXR5OiAxOworICAgIHVuc2lnbmVk
IGNvbnN0cnVjdG9yS2luZCA6IDI7CisgICAgdW5zaWduZWQgZnVuY3Rpb25Nb2RlIDogMjsgLy8g
RnVuY3Rpb25Nb2RlCisgICAgdW5zaWduZWQgc2NyaXB0TW9kZTogMTsgLy8gSlNQYXJzZXJTY3Jp
cHRNb2RlCisgICAgdW5zaWduZWQgc3VwZXJCaW5kaW5nIDogMTsKKyAgICB1bnNpZ25lZCBkZXJp
dmVkQ29udGV4dFR5cGU6IDI7CisKKyAgICBDYWNoZWRTb3VyY2VDb2RlIGNsYXNzU291cmNlOwor
CisgICAgQ2FjaGVkSWRlbnRpZmllciBuYW1lOworICAgIENhY2hlZElkZW50aWZpZXIgZWNtYU5h
bWU7CisgICAgQ2FjaGVkSWRlbnRpZmllciBpbmZlcnJlZE5hbWU7CisKKyAgICBDYWNoZWRWYXJp
YWJsZUVudmlyb25tZW50IHBhcmVudFNjb3BlVERaVmFyaWFibGVzOworCisgICAgQ2FjaGVkV3Jp
dGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrPiB1bmxpbmtlZENvZGVCbG9ja0ZvckNhbGw7CisgICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENh
Y2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiB1bmxpbmtl
ZENvZGVCbG9ja0ZvckNvbnN0cnVjdDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJs
b2NrIDogcHVibGljIENhY2hlZE9iamVjdDxDb2RlQmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tU
eXBlPiB7CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2Nr
Jik7CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYsIFVubGlua2VkQ29kZUJsb2NrJikgY29uc3Q7
CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZVJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3Rl
cjsKKworICAgIHVuc2lnbmVkIHVzZXNFdmFsIDogMTsKKyAgICB1bnNpZ25lZCBpc1N0cmljdE1v
ZGUgOiAxOworICAgIHVuc2lnbmVkIGlzQ29uc3RydWN0b3IgOiAxOworICAgIHVuc2lnbmVkIGhh
c0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25lZCBpc0J1aWx0aW5GdW5jdGlvbiA6
IDE7CisgICAgdW5zaWduZWQgc3VwZXJCaW5kaW5nIDogMTsKKyAgICB1bnNpZ25lZCBzY3JpcHRN
b2RlOiAxOworICAgIHVuc2lnbmVkIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQgOiAxOworICAgIHVu
c2lnbmVkIGlzQ2xhc3NDb250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCB3YXNDb21waWxlZFdpdGhE
ZWJ1Z2dpbmdPcGNvZGVzIDogMTsKKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQgOiAyOwor
ICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZSA6IDI7CisgICAgdW5zaWduZWQgZXZhbENv
bnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMgOiAxOworCisgICAgdW5z
aWduZWQgbGluZUNvdW50OworICAgIHVuc2lnbmVkIGVuZENvbHVtbjsKKworICAgIGludCBudW1W
YXJzOworICAgIGludCBudW1DYWxsZWVMb2NhbHM7CisgICAgaW50IG51bVBhcmFtZXRlcnM7CisK
KyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXM7CisgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9k
ZTsKKyAgICBDb2RlVHlwZSBjb2RlVHlwZTsKKworICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExp
bmtUaW1lQ29uc3RhbnRDb3VudD4gbGlua1RpbWVDb25zdGFudHM7CisgICAgQ2FjaGVkTWV0YWRh
dGFUYWJsZSBtZXRhZGF0YTsKKworICAgIENhY2hlZE9wdGlvbmFsPENhY2hlZFJhcmVEYXRhPiBy
YXJlRGF0YTsKKworICAgIENhY2hlZFN0cmluZyBzb3VyY2VVUkxEaXJlY3RpdmU7CisgICAgQ2Fj
aGVkU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CisKKyAgICBDYWNoZWRQdHI8Q2Fj
aGVkSW5zdHJ1Y3Rpb25TdHJlYW0+IGluc3RydWN0aW9uczsKKyAgICBDYWNoZWRWZWN0b3I8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4ganVtcFRhcmdldHM7CisgICAgQ2FjaGVkVmVjdG9yPElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworICAg
IENhY2hlZFZlY3RvcjxDYWNoZWRKU1ZhbHVlPiBjb25zdGFudFJlZ2lzdGVyczsKKyAgICBDYWNo
ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBjb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb247CisgICAgQ2FjaGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IGV4cHJl
c3Npb25JbmZvOworICAgIENhY2hlZEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwg
aW50PiBvdXRPZkxpbmVKdW1wVGFyZ2V0czsKKworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRDb25z
dGFudElkZW50aWZpZXJTZXRFbnRyeT4gY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICBDYWNo
ZWRWZWN0b3I8Q2FjaGVkSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7CisgICAgQ2FjaGVkVmVjdG9y
PENhY2hlZEJpdFZlY3Rvcj4gYml0VmVjdG9yczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkV3Jp
dGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IGZ1bmN0aW9uRGVjbHM7CisgICAg
Q2FjaGVkVmVjdG9yPENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+
PiBmdW5jdGlvbkV4cHJzOworfTsKKworc3RydWN0IENhY2hlZFByb2dyYW1Db2RlQmxvY2sgOiBw
dWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaywgQ2FjaGVkUHJv
Z3JhbUNvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrLCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrPjsKKyAgICB1c2luZyBC
YXNlOjplbmNvZGU7CisKKyAgICBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IHZhckRlY2xhcmF0
aW9uczsKKyAgICBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IGxleGljYWxEZWNsYXJhdGlvbnM7
CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNv
ZGVyLCBjb2RlQmxvY2spOworICAgICAgICB2YXJEZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIs
IGNvZGVCbG9jay5tX3ZhckRlY2xhcmF0aW9ucyk7CisgICAgICAgIGxleGljYWxEZWNsYXJhdGlv
bnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2xleGljYWxEZWNsYXJhdGlvbnMpOworICAg
IH0KKworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNvZGVC
bG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
az4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soZGVjb2Rlciwg
KnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7
CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgdmFy
RGVjbGFyYXRpb25zLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFyRGVjbGFyYXRpb25z
KTsKKyAgICAgICAgbGV4aWNhbERlY2xhcmF0aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2Nr
LT5tX2xleGljYWxEZWNsYXJhdGlvbnMpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAg
IH0KK307CisKK3N0cnVjdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29k
ZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaywgQ2FjaGVkTW9kdWxlQ29kZUJs
b2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2ssIENhY2hlZE1vZHVsZUNvZGVCbG9jaz47CisgICAgdXNpbmcgQmFzZTo6
ZW5jb2RlOworCisgICAgaW50IG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJl
Z2lzdGVyT2Zmc2V0OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAg
ICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKKyAgICAgICAgbW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBjb2RlQmxvY2subV9tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKyAgICB9CisK
KyAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVh
dGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVC
bG9jayk7CisgICAgICAgIGNvZGVCbG9jay0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
Q29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25z
dGFudFJlZ2lzdGVyT2Zmc2V0OworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KK307
CisKK3N0cnVjdCBDYWNoZWRFdmFsQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxV
bmxpbmtlZEV2YWxDb2RlQmxvY2ssIENhY2hlZEV2YWxDb2RlQmxvY2s+IHsKKyAgICB1c2luZyBC
YXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9jaywgQ2FjaGVkRXZhbENv
ZGVCbG9jaz47CisgICAgdXNpbmcgQmFzZTo6ZW5jb2RlOworCisgICAgQ2FjaGVkVmVjdG9yPENh
Y2hlZElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiB2YXJpYWJsZXM7CisgICAg
Q2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBm
dW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFVubGlua2VkRXZhbENvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAg
ICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgICAgIHZhcmlhYmxl
cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fdmFyaWFibGVzKTsKKyAgICAgICAgZnVuY3Rp
b25Ib2lzdGluZ0NhbmRpZGF0ZXMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9u
SG9pc3RpbmdDYW5kaWRhdGVzKTsKKyAgICB9CisKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRF
dmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxp
bmtlZEV2YWxDb2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJs
b2NrKGRlY29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihk
ZWNvZGVyLnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7
CisgICAgICAgIHZhcmlhYmxlcy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX3ZhcmlhYmxl
cyk7CisgICAgICAgIGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzLmRlY29kZShkZWNvZGVyLCBj
b2RlQmxvY2stPm1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMpOworICAgICAgICByZXR1cm4g
Y29kZUJsb2NrOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayA6
IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaywgQ2FjaGVk
RnVuY3Rpb25Db2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2ssIENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrPjsKKworICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBj
b2RlQmxvY2spOworICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jaz4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVh
dGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVC
bG9jayk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorfTsKKworQUxXQVlTX0lO
TElORSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KERlY29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrJiBjYWNoZWRD
b2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw7CisKK2Vu
dW0gQ2FjaGVkQ29kZUJsb2NrVGFnIHsKKyAgICBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrVGFnLAor
ICAgIENhY2hlZE1vZHVsZUNvZGVCbG9ja1RhZywKKyAgICBDYWNoZWRFdmFsQ29kZUJsb2NrVGFn
LAorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jaz4geworICAgIHVzaW5nIHR5cGUgPSBDYWNoZWRQcm9ncmFtQ29k
ZUJsb2NrOworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENh
Y2hlZFByb2dyYW1Db2RlQmxvY2tUYWc7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVk
Q29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAg
dXNpbmcgdHlwZSA9IENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKyAgICBzdGF0aWMgY29uc3RleHBy
IENhY2hlZENvZGVCbG9ja1RhZyB0YWcgPSBDYWNoZWRNb2R1bGVDb2RlQmxvY2tUYWc7Cit9Owor
Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRFdmFs
Q29kZUJsb2NrPiB7CisgICAgdXNpbmcgdHlwZSA9IENhY2hlZEV2YWxDb2RlQmxvY2s7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDYWNoZWRDb2RlQmxvY2tUYWcgdGFnID0gQ2FjaGVkRXZhbENvZGVC
bG9ja1RhZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1c2luZyBDYWNoZWRDb2RlQmxv
Y2tUeXBlID0gdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VD46OnR5cGU7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5
cGU+CitBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhE
ZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgQ2FjaGVkQ29kZUJs
b2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+JiBjYWNoZWRDb2RlQmxvY2sp
CisgICAgOiBCYXNlKGRlY29kZXIudm0oKSwgc3RydWN0dXJlKQorICAgICwgbV9pbnN0cnVjdGlv
bnMoY2FjaGVkQ29kZUJsb2NrLmluc3RydWN0aW9ucy5kZWNvZGUoZGVjb2RlcikpCisgICAgLCBt
X2xpdmVuZXNzKG51bGxwdHIpCisgICAgLCBtX3RoaXNSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2su
dGhpc1JlZ2lzdGVyKQorICAgICwgbV9zY29wZVJlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay5zY29w
ZVJlZ2lzdGVyKQorICAgICwgbV9nbG9iYWxPYmplY3RSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2su
Z2xvYmFsT2JqZWN0UmVnaXN0ZXIpCisKKyAgICAsIG1fc291cmNlVVJMRGlyZWN0aXZlKGNhY2hl
ZENvZGVCbG9jay5zb3VyY2VVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKQorICAgICwgbV9z
b3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGNhY2hlZENvZGVCbG9jay5zb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKSkKKworICAgICwgbV91c2VzRXZhbChjYWNoZWRDb2Rl
QmxvY2sudXNlc0V2YWwpCisgICAgLCBtX2lzU3RyaWN0TW9kZShjYWNoZWRDb2RlQmxvY2suaXNT
dHJpY3RNb2RlKQorICAgICwgbV9pc0NvbnN0cnVjdG9yKGNhY2hlZENvZGVCbG9jay5pc0NvbnN0
cnVjdG9yKQorICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhjYWNoZWRDb2RlQmxvY2suaGFz
Q2FwdHVyZWRWYXJpYWJsZXMpCisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hlZENvZGVC
bG9jay5pc0J1aWx0aW5GdW5jdGlvbikKKyAgICAsIG1fc3VwZXJCaW5kaW5nKGNhY2hlZENvZGVC
bG9jay5zdXBlckJpbmRpbmcpCisgICAgLCBtX3NjcmlwdE1vZGUoY2FjaGVkQ29kZUJsb2NrLnNj
cmlwdE1vZGUpCisgICAgLCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQoY2FjaGVkQ29kZUJsb2Nr
LmlzQXJyb3dGdW5jdGlvbkNvbnRleHQpCisgICAgLCBtX2lzQ2xhc3NDb250ZXh0KGNhY2hlZENv
ZGVCbG9jay5pc0NsYXNzQ29udGV4dCkKKyAgICAsIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5n
T3Bjb2RlcyhjYWNoZWRDb2RlQmxvY2sud2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcykK
KyAgICAsIG1fY29uc3RydWN0b3JLaW5kKGNhY2hlZENvZGVCbG9jay5jb25zdHJ1Y3RvcktpbmQp
CisgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZGVyaXZlZENvbnRl
eHRUeXBlKQorICAgICwgbV9ldmFsQ29udGV4dFR5cGUoY2FjaGVkQ29kZUJsb2NrLmV2YWxDb250
ZXh0VHlwZSkKKyAgICAsIG1faGFzVGFpbENhbGxzKGNhY2hlZENvZGVCbG9jay5oYXNUYWlsQ2Fs
bHMpCisgICAgLCBtX2xpbmVDb3VudChjYWNoZWRDb2RlQmxvY2subGluZUNvdW50KQorICAgICwg
bV9lbmRDb2x1bW4oY2FjaGVkQ29kZUJsb2NrLmVuZENvbHVtbikKKyAgICAsIG1fbnVtVmFycyhj
YWNoZWRDb2RlQmxvY2subnVtVmFycykKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKGNhY2hlZENv
ZGVCbG9jay5udW1DYWxsZWVMb2NhbHMpCisgICAgLCBtX251bVBhcmFtZXRlcnMoY2FjaGVkQ29k
ZUJsb2NrLm51bVBhcmFtZXRlcnMpCisgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5m
ZWF0dXJlcykKKyAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUpCisg
ICAgLCBtX2NvZGVUeXBlKGNhY2hlZENvZGVCbG9jay5jb2RlVHlwZSkKKyAgICAsIG1fcmFyZURh
dGEoY2FjaGVkQ29kZUJsb2NrLnJhcmVEYXRhLmRlY29kZUFzUHRyKGRlY29kZXIpKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxv
Y2tUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBl
LCBDYWNoZWRDb2RlQmxvY2tUeXBlPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2Vk
Q29kZUJsb2NrJiBjb2RlQmxvY2spIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gTGlu
a1RpbWVDb25zdGFudENvdW50OyBpLS07KQorICAgICAgICBjb2RlQmxvY2subV9saW5rVGltZUNv
bnN0YW50c1tpXSA9IGxpbmtUaW1lQ29uc3RhbnRzW2ldOworCisgICAgbWV0YWRhdGEuZGVjb2Rl
KGRlY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMpOworICAgIGNvbnN0YW50UmVnaXN0ZXJzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2su
bV9jb25zdGFudFJlZ2lzdGVycywgJmNvZGVCbG9jayk7CisgICAgY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgIGV4cHJlc3Npb25JbmZvLmRlY29kZShkZWNvZGVy
LCBjb2RlQmxvY2subV9leHByZXNzaW9uSW5mbyk7CisgICAgb3V0T2ZMaW5lSnVtcFRhcmdldHMu
ZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX291dE9mTGluZUp1bXBUYXJnZXRzKTsKKyAgICBq
dW1wVGFyZ2V0cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fanVtcFRhcmdldHMpOworICAg
IGNvbnN0YW50SWRlbnRpZmllclNldHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0
YW50SWRlbnRpZmllclNldHMpOworICAgIGlkZW50aWZpZXJzLmRlY29kZShkZWNvZGVyLCBjb2Rl
QmxvY2subV9pZGVudGlmaWVycyk7CisgICAgYml0VmVjdG9ycy5kZWNvZGUoZGVjb2RlciwgY29k
ZUJsb2NrLm1fYml0VmVjdG9ycyk7CisgICAgZnVuY3Rpb25EZWNscy5kZWNvZGUoZGVjb2Rlciwg
Y29kZUJsb2NrLm1fZnVuY3Rpb25EZWNscywgJmNvZGVCbG9jayk7CisgICAgZnVuY3Rpb25FeHBy
cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25FeHBycywgJmNvZGVCbG9jayk7
Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkUHJvZ3JhbUNvZGVC
bG9jayYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCku
dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2sp
Cit7Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2Fj
aGVkTW9kdWxlQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIs
IGRlY29kZXIudm0oKS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEV2YWxD
b2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBD
YWNoZWRFdmFsQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIs
IGRlY29kZXIudm0oKS51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hl
ZENvZGVCbG9jaykKK3sKK30KKworQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlJiBleGVjdXRhYmxlKQoreworICAgIGZpcnN0TGluZU9mZnNldCA9IGV4ZWN1dGFi
bGUubV9maXJzdExpbmVPZmZzZXQ7CisgICAgbGluZUNvdW50ID0gZXhlY3V0YWJsZS5tX2xpbmVD
b3VudDsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0ID0gZXhlY3V0YWJsZS5tX3VubGlu
a2VkRnVuY3Rpb25OYW1lU3RhcnQ7CisgICAgdW5saW5rZWRCb2R5U3RhcnRDb2x1bW4gPSBleGVj
dXRhYmxlLm1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47CisgICAgdW5saW5rZWRCb2R5RW5kQ29s
dW1uID0gZXhlY3V0YWJsZS5tX3VubGlua2VkQm9keUVuZENvbHVtbjsKKyAgICBzdGFydE9mZnNl
dCA9IGV4ZWN1dGFibGUubV9zdGFydE9mZnNldDsKKyAgICBzb3VyY2VMZW5ndGggPSBleGVjdXRh
YmxlLm1fc291cmNlTGVuZ3RoOworICAgIHBhcmFtZXRlcnNTdGFydE9mZnNldCA9IGV4ZWN1dGFi
bGUubV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0
ID0gZXhlY3V0YWJsZS5tX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB0eXBlUHJvZmls
aW5nRW5kT2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAg
cGFyYW1ldGVyQ291bnQgPSBleGVjdXRhYmxlLm1fcGFyYW1ldGVyQ291bnQ7CisKKyAgICBmZWF0
dXJlcyA9IGV4ZWN1dGFibGUubV9mZWF0dXJlczsKKyAgICBzb3VyY2VQYXJzZU1vZGUgPSBleGVj
dXRhYmxlLm1fc291cmNlUGFyc2VNb2RlOworCisgICAgaXNJblN0cmljdENvbnRleHQgPSBleGVj
dXRhYmxlLm1faXNJblN0cmljdENvbnRleHQ7CisgICAgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBl
eGVjdXRhYmxlLm1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CisgICAgaXNCdWlsdGluRnVuY3Rpb24g
PSBleGVjdXRhYmxlLm1faXNCdWlsdGluRnVuY3Rpb247CisgICAgaXNCdWlsdGluRGVmYXVsdENs
YXNzQ29uc3RydWN0b3IgPSBleGVjdXRhYmxlLm1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3Ry
dWN0b3I7CisgICAgY29uc3RydWN0QWJpbGl0eSA9IGV4ZWN1dGFibGUubV9jb25zdHJ1Y3RBYmls
aXR5OworICAgIGNvbnN0cnVjdG9yS2luZCA9IGV4ZWN1dGFibGUubV9jb25zdHJ1Y3RvcktpbmQ7
CisgICAgZnVuY3Rpb25Nb2RlID0gZXhlY3V0YWJsZS5tX2Z1bmN0aW9uTW9kZTsKKyAgICBzY3Jp
cHRNb2RlID0gZXhlY3V0YWJsZS5tX3NjcmlwdE1vZGU7CisgICAgc3VwZXJCaW5kaW5nID0gZXhl
Y3V0YWJsZS5tX3N1cGVyQmluZGluZzsKKyAgICBkZXJpdmVkQ29udGV4dFR5cGUgPSBleGVjdXRh
YmxlLm1fZGVyaXZlZENvbnRleHRUeXBlOworCisgICAgY2xhc3NTb3VyY2UuZW5jb2RlKGVuY29k
ZXIsIGV4ZWN1dGFibGUubV9jbGFzc1NvdXJjZSk7CisKKyAgICBuYW1lLmVuY29kZShlbmNvZGVy
LCBleGVjdXRhYmxlLm5hbWUoKSk7CisgICAgZWNtYU5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1
dGFibGUuZWNtYU5hbWUoKSk7CisgICAgaW5mZXJyZWROYW1lLmVuY29kZShlbmNvZGVyLCBleGVj
dXRhYmxlLmluZmVycmVkTmFtZSgpKTsKKworICAgIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLmVu
Y29kZShlbmNvZGVyLCBleGVjdXRhYmxlLnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkpOworCisg
ICAgdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1f
dW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKKyAgICB1bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0
cnVjdC5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29u
c3RydWN0KTsKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QK
K3sKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IGVudjsKKyAgICBwYXJlbnRTY29wZVREWlZhcmlh
Ymxlcy5kZWNvZGUoZGVjb2RlciwgZW52KTsKKworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUoZGVjb2RlciwgZW52LCAqdGhpcyk7CisgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRp
b24oZGVjb2Rlci52bSgpKTsKKworICAgIGNsYXNzU291cmNlLmRlY29kZShkZWNvZGVyLCBleGVj
dXRhYmxlLT5tX2NsYXNzU291cmNlKTsKKyAgICB1bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZGVj
b2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLCBleGVj
dXRhYmxlKTsKKyAgICB1bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5kZWNvZGUoZGVjb2Rl
ciwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCwgZXhlY3V0YWJs
ZSk7CisKKyAgICByZXR1cm4gZXhlY3V0YWJsZTsKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYg
ZGVjb2RlciwgVmFyaWFibGVFbnZpcm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIGNv
bnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYgY2FjaGVkRXhlY3V0YWJsZSkKKyAgICA6IEJh
c2UoZGVjb2Rlci52bSgpLCBkZWNvZGVyLnZtKCkudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVT
dHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2ZpcnN0TGluZU9mZnNldChjYWNoZWRFeGVjdXRhYmxl
LmZpcnN0TGluZU9mZnNldCkKKyAgICAsIG1fbGluZUNvdW50KGNhY2hlZEV4ZWN1dGFibGUubGlu
ZUNvdW50KQorICAgICwgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KGNhY2hlZEV4ZWN1dGFi
bGUudW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydCkKKyAgICAsIG1fdW5saW5rZWRCb2R5U3RhcnRD
b2x1bW4oY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEJvZHlTdGFydENvbHVtbikKKyAgICAsIG1f
dW5saW5rZWRCb2R5RW5kQ29sdW1uKGNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRCb2R5RW5kQ29s
dW1uKQorICAgICwgbV9zdGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnN0YXJ0T2Zmc2V0KQor
ICAgICwgbV9zb3VyY2VMZW5ndGgoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VMZW5ndGgpCisgICAg
LCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnBhcmFtZXRlcnNTdGFy
dE9mZnNldCkKKyAgICAsIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1dGFi
bGUudHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KQorICAgICwgbV90eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KGNhY2hlZEV4ZWN1dGFibGUudHlwZVByb2ZpbGluZ0VuZE9mZnNldCkKKyAgICAsIG1fcGFy
YW1ldGVyQ291bnQoY2FjaGVkRXhlY3V0YWJsZS5wYXJhbWV0ZXJDb3VudCkKKyAgICAsIG1fZmVh
dHVyZXMoY2FjaGVkRXhlY3V0YWJsZS5mZWF0dXJlcykKKyAgICAsIG1fc291cmNlUGFyc2VNb2Rl
KGNhY2hlZEV4ZWN1dGFibGUuc291cmNlUGFyc2VNb2RlKQorICAgICwgbV9pc0luU3RyaWN0Q29u
dGV4dChjYWNoZWRFeGVjdXRhYmxlLmlzSW5TdHJpY3RDb250ZXh0KQorICAgICwgbV9oYXNDYXB0
dXJlZFZhcmlhYmxlcyhjYWNoZWRFeGVjdXRhYmxlLmhhc0NhcHR1cmVkVmFyaWFibGVzKQorICAg
ICwgbV9pc0J1aWx0aW5GdW5jdGlvbihjYWNoZWRFeGVjdXRhYmxlLmlzQnVpbHRpbkZ1bmN0aW9u
KQorICAgICwgbV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcihjYWNoZWRFeGVjdXRh
YmxlLmlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKQorICAgICwgbV9jb25zdHJ1Y3RB
YmlsaXR5KGNhY2hlZEV4ZWN1dGFibGUuY29uc3RydWN0QWJpbGl0eSkKKyAgICAsIG1fY29uc3Ry
dWN0b3JLaW5kKGNhY2hlZEV4ZWN1dGFibGUuY29uc3RydWN0b3JLaW5kKQorICAgICwgbV9mdW5j
dGlvbk1vZGUoY2FjaGVkRXhlY3V0YWJsZS5mdW5jdGlvbk1vZGUpCisgICAgLCBtX3NjcmlwdE1v
ZGUoY2FjaGVkRXhlY3V0YWJsZS5zY3JpcHRNb2RlKQorICAgICwgbV9zdXBlckJpbmRpbmcoY2Fj
aGVkRXhlY3V0YWJsZS5zdXBlckJpbmRpbmcpCisgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShj
YWNoZWRFeGVjdXRhYmxlLmRlcml2ZWRDb250ZXh0VHlwZSkKKworICAgICwgbV9uYW1lKGNhY2hl
ZEV4ZWN1dGFibGUubmFtZS5kZWNvZGUoZGVjb2RlcikpCisgICAgLCBtX2VjbWFOYW1lKGNhY2hl
ZEV4ZWN1dGFibGUuZWNtYU5hbWUuZGVjb2RlKGRlY29kZXIpKQorICAgICwgbV9pbmZlcnJlZE5h
bWUoY2FjaGVkRXhlY3V0YWJsZS5pbmZlcnJlZE5hbWUuZGVjb2RlKGRlY29kZXIpKQorCisgICAg
LCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzKGRlY29kZXIudm0oKS5tX2NvbXBhY3RWYXJpYWJs
ZU1hcC0+Z2V0KHBhcmVudFNjb3BlVERaVmFyaWFibGVzKSkKK3sKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJs
b2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZENvZGVCbG9j
ayYgY29kZUJsb2NrKQoreworICAgIHRoaXNSZWdpc3RlciA9IGNvZGVCbG9jay5tX3RoaXNSZWdp
c3RlcjsKKyAgICBzY29wZVJlZ2lzdGVyID0gY29kZUJsb2NrLm1fc2NvcGVSZWdpc3RlcjsKKyAg
ICBnbG9iYWxPYmplY3RSZWdpc3RlciA9IGNvZGVCbG9jay5tX2dsb2JhbE9iamVjdFJlZ2lzdGVy
OworICAgIHVzZXNFdmFsID0gY29kZUJsb2NrLm1fdXNlc0V2YWw7CisgICAgaXNTdHJpY3RNb2Rl
ID0gY29kZUJsb2NrLm1faXNTdHJpY3RNb2RlOworICAgIGlzQ29uc3RydWN0b3IgPSBjb2RlQmxv
Y2subV9pc0NvbnN0cnVjdG9yOworICAgIGhhc0NhcHR1cmVkVmFyaWFibGVzID0gY29kZUJsb2Nr
Lm1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CisgICAgaXNCdWlsdGluRnVuY3Rpb24gPSBjb2RlQmxv
Y2subV9pc0J1aWx0aW5GdW5jdGlvbjsKKyAgICBzdXBlckJpbmRpbmcgPSBjb2RlQmxvY2subV9z
dXBlckJpbmRpbmc7CisgICAgc2NyaXB0TW9kZSA9IGNvZGVCbG9jay5tX3NjcmlwdE1vZGU7Cisg
ICAgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNvZGVCbG9jay5tX2lzQXJyb3dGdW5jdGlvbkNv
bnRleHQ7CisgICAgaXNDbGFzc0NvbnRleHQgPSBjb2RlQmxvY2subV9pc0NsYXNzQ29udGV4dDsK
KyAgICB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzID0gY29kZUJsb2NrLm1fd2FzQ29t
cGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlczsKKyAgICBjb25zdHJ1Y3RvcktpbmQgPSBjb2RlQmxv
Y2subV9jb25zdHJ1Y3RvcktpbmQ7CisgICAgZGVyaXZlZENvbnRleHRUeXBlID0gY29kZUJsb2Nr
Lm1fZGVyaXZlZENvbnRleHRUeXBlOworICAgIGV2YWxDb250ZXh0VHlwZSA9IGNvZGVCbG9jay5t
X2V2YWxDb250ZXh0VHlwZTsKKyAgICBoYXNUYWlsQ2FsbHMgPSBjb2RlQmxvY2subV9oYXNUYWls
Q2FsbHM7CisgICAgbGluZUNvdW50ID0gY29kZUJsb2NrLm1fbGluZUNvdW50OworICAgIGVuZENv
bHVtbiA9IGNvZGVCbG9jay5tX2VuZENvbHVtbjsKKyAgICBudW1WYXJzID0gY29kZUJsb2NrLm1f
bnVtVmFyczsKKyAgICBudW1DYWxsZWVMb2NhbHMgPSBjb2RlQmxvY2subV9udW1DYWxsZWVMb2Nh
bHM7CisgICAgbnVtUGFyYW1ldGVycyA9IGNvZGVCbG9jay5tX251bVBhcmFtZXRlcnM7CisgICAg
ZmVhdHVyZXMgPSBjb2RlQmxvY2subV9mZWF0dXJlczsKKyAgICBwYXJzZU1vZGUgPSBjb2RlQmxv
Y2subV9wYXJzZU1vZGU7CisgICAgY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaS0tOykKKyAgICAg
ICAgbGlua1RpbWVDb25zdGFudHNbaV0gPSBjb2RlQmxvY2subV9saW5rVGltZUNvbnN0YW50c1tp
XTsKKworICAgIG1ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YSk7
CisgICAgcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhKTsKKwor
ICAgIHNvdXJjZVVSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fc291cmNl
VVJMRGlyZWN0aXZlLmltcGwoKSk7CisgICAgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNv
ZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fc291cmNlVVJMRGlyZWN0aXZlLmltcGwoKSk7CisKKyAg
ICBpbnN0cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2luc3RydWN0aW9ucy5n
ZXQoKSk7CisgICAgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTsKKyAgICBjb25zdGFudFJlZ2lz
dGVycy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRSZWdpc3RlcnMpOworICAg
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKyAgICBleHByZXNzaW9u
SW5mby5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lvbkluZm8pOworICAgIGp1
bXBUYXJnZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9qdW1wVGFyZ2V0cyk7CisgICAg
b3V0T2ZMaW5lSnVtcFRhcmdldHMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX291dE9mTGlu
ZUp1bXBUYXJnZXRzKTsKKworICAgIGNvbnN0YW50SWRlbnRpZmllclNldHMuZW5jb2RlKGVuY29k
ZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50SWRlbnRpZmllclNldHMpOworICAgIGlkZW50aWZpZXJz
LmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9pZGVudGlmaWVycyk7CisgICAgYml0VmVjdG9y
cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fYml0VmVjdG9ycyk7CisgICAgZnVuY3Rpb25E
ZWNscy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25EZWNscyk7CisgICAgZnVu
Y3Rpb25FeHBycy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25FeHBycyk7Cit9
CisKK3N0cnVjdCBDYWNoZWRTb3VyY2VDb2RlS2V5IDogcHVibGljIENhY2hlZE9iamVjdDxTb3Vy
Y2VDb2RlS2V5LCBDYWNoZWRTb3VyY2VDb2RlS2V5PiB7CisgICAgQ2FjaGVkVW5saW5rZWRTb3Vy
Y2VDb2RlIHNvdXJjZUNvZGU7CisgICAgQ2FjaGVkU3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQg
ZmxhZ3M7CisgICAgdW5zaWduZWQgaGFzaDsKKyAgICBpbnQgZnVuY3Rpb25Db25zdHJ1Y3RvclBh
cmFtZXRlcnNFbmRQb3NpdGlvbjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHNvdXJjZUNvZGUuZW5j
b2RlKGVuY29kZXIsIGtleS5tX3NvdXJjZUNvZGUpOworICAgICAgICBuYW1lLmVuY29kZShlbmNv
ZGVyLCBrZXkubV9uYW1lKTsKKyAgICAgICAgZmxhZ3MgPSBrZXkubV9mbGFncy5tX2ZsYWdzOwor
ICAgICAgICBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICAgICAgZnVuY3Rpb25Db25zdHJ1Y3RvclBh
cmFtZXRlcnNFbmRQb3NpdGlvbiA9IGtleS5tX2Z1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJz
RW5kUG9zaXRpb247CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
U291cmNlQ29kZUtleSYga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgc291cmNlQ29kZS5kZWNv
ZGUoZGVjb2Rlciwga2V5Lm1fc291cmNlQ29kZSk7CisgICAgICAgIG5hbWUuZGVjb2RlKGRlY29k
ZXIsIGtleS5tX25hbWUpOworICAgICAgICBrZXkubV9mbGFncy5tX2ZsYWdzID0gZmxhZ3M7Cisg
ICAgICAgIGtleS5tX2hhc2ggPSBoYXNoOworICAgICAgICBrZXkubV9mdW5jdGlvbkNvbnN0cnVj
dG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNF
bmRQb3NpdGlvbjsKKyAgICB9Cit9OworCitzdHJ1Y3QgR2VuZXJpY0NhY2hlRW50cnkgeworICAg
IENhY2hlZENvZGVCbG9ja1RhZyB0YWc7CisKKyAgICBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwg
VW5saW5rZWRDb2RlQmxvY2sqPiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0OworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorc3RydWN0IENhY2hlRW50cnkgOiBw
dWJsaWMgR2VuZXJpY0NhY2hlRW50cnkgeworICAgIENhY2hlZFNvdXJjZUNvZGVLZXkga2V5Owor
ICAgIENhY2hlZFB0cjxDYWNoZWRDb2RlQmxvY2tUeXBlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4+
IGNvZGVCbG9jazsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIHN0ZDo6cGFp
cjxTb3VyY2VDb2RlS2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBwYWlyKQorICAg
IHsKKyAgICAgICAgdGFnID0gQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlPjo6dGFnOworICAgICAgICBrZXkuZW5jb2RlKGVuY29kZXIsIHBhaXIuZmlyc3QpOwor
ICAgICAgICBjb2RlQmxvY2suZW5jb2RlKGVuY29kZXIsIHBhaXIuc2Vjb25kKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIEdlbmVyaWNDYWNoZUVudHJ5OworCisgICAgc3RkOjpwYWly
PFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+IGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlQ29kZUtleSBkZWNvZGVkS2V5Owor
ICAgICAgICBrZXkuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRLZXkpOworICAgICAgICByZXR1cm4g
eyBXVEZNb3ZlKGRlY29kZWRLZXkpLCBjb2RlQmxvY2suZGVjb2RlKGRlY29kZXIpIH07CisgICAg
fQorfTsKKworc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gR2Vu
ZXJpY0NhY2hlRW50cnk6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAoreworICAgIHN3
aXRjaCAodGFnKSB7CisgICAgY2FzZSBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrVGFnOgorICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDYWNoZUVudHJ5PFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jaz4qPih0aGlzKS0+ZGVjb2RlKGRlY29kZXIpOworICAgIGNhc2UgQ2FjaGVkTW9k
dWxlQ29kZUJsb2NrVGFnOgorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBD
YWNoZUVudHJ5PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4qPih0aGlzKS0+ZGVjb2Rl
KGRlY29kZXIpOworICAgIGNhc2UgQ2FjaGVkRXZhbENvZGVCbG9ja1RhZzoKKyAgICAgICAgLy8g
V2UgZG8gbm90IGNhY2hlIGV2YWwgY29kZSBibG9ja3MKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29k
ZUJsb2NrVHlwZT4KK3ZvaWQgZW5jb2RlQ29kZUJsb2NrKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICBhdXRvKiBlbnRyeSA9IGVuY29kZXIudGVtcGxhdGUgbWFsbG9jPENhY2hlRW50cnk8
VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4oKTsKKyAgICBlbnRyeS0+ZW5jb2RlKGVuY29kZXIsICB7
IGtleSwganNDYXN0PGNvbnN0IFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGNvZGVCbG9jaykgfSk7
Cit9CisKK3N0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29kZUJs
b2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gY29k
ZUJsb2NrLT5jbGFzc0luZm8odm0pOworCisgICAgRW5jb2RlciBlbmNvZGVyKHZtKTsKKyAgICBp
ZiAoY2xhc3NJbmZvID09IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAg
ICBlbmNvZGVDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBrZXks
IGNvZGVCbG9jayk7CisgICAgZWxzZSBpZiAoY2xhc3NJbmZvID09IFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICBlbmNvZGVDb2RlQmxvY2s8VW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBrZXksIGNvZGVCbG9jayk7CisgICAgZWxz
ZQorICAgICAgICBBU1NFUlQoY2xhc3NJbmZvID09IFVubGlua2VkRXZhbENvZGVCbG9jazo6aW5m
bygpKTsKKworICAgIHJldHVybiBlbmNvZGVyLnJlbGVhc2UoKTsKK30KKworVW5saW5rZWRDb2Rl
QmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBr
ZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgICAgY29uc3QgYXV0byog
Y2FjaGVkRW50cnkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdlbmVyaWNDYWNoZUVudHJ5Kj4o
YnVmZmVyKTsKKyAgICBEZWNvZGVyIGRlY29kZXIodm0sIGJ1ZmZlciwgc2l6ZSk7CisgICAgc3Rk
OjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZW50cnk7CisgICAgewor
ICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgICAgIGVudHJ5ID0gY2FjaGVk
RW50cnktPmRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKKyAgICBpZiAoZW50cnkuZmlyc3QgIT0g
a2V5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZW50cnkuc2Vjb25kOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlZFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYjhhY2I2Y2U1NzBlOTcyNjM4OWMyNmQ3MGJjYmEy
MWRhOGQ0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ2FzdC5o
IgorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFNvdXJjZUNvZGVLZXk7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKKworc3RkOjpwYWlyPE1h
bGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mLCBjb25zdCBTb3Vy
Y2VDb2RlS2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqKTsKK1VubGlua2VkQ29kZUJsb2Nr
KiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IHZv
aWQqLCBzaXplX3QpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlw
ZT4KK1VubGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3Qg
U291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorewor
ICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZGVjb2RlQ29kZUJsb2Nr
SW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAppbmRleCA0NjAxNzky
MWE0NmVmYzY0MTcyNWQwYTIzNTI1MjkwMzVhZjVmM2FkLi5jMzJkMjA0YjZjZDg5NjgxODFjYjBk
MWRmMGVhYjgzZWMxMTgxOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2RlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
ZGVDYWNoZS5jcHAKQEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5lU2xv
d0Nhc2UoKQogCiAgICAgd2hpbGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgfHwgIWNhblBydW5lUXVp
Y2tseSgpKSB7CiAgICAgICAgIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsK
KworICAgICAgICB3cml0ZUNvZGVCbG9jaygqaXQtPnZhbHVlLmNlbGwtPnZtKCksIGl0LT5rZXks
IGl0LT52YWx1ZSk7CisKICAgICAgICAgbV9zaXplIC09IGl0LT5rZXkubGVuZ3RoKCk7CiAgICAg
ICAgIG1fbWFwLnJlbW92ZShpdCk7CiAgICAgfQpAQCAtNTksOSArNjIsOCBAQCBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0mIHZt
LCBFeGVjdXRhYmxlVAogICAgICAgICB2bS50eXBlUHJvZmlsZXIoKSA/IFR5cGVQcm9maWxlckVu
YWJsZWQ6OlllcyA6IFR5cGVQcm9maWxlckVuYWJsZWQ6Ok5vLCAKICAgICAgICAgdm0uY29udHJv
bEZsb3dQcm9maWxlcigpID8gQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENvbnRy
b2xGbG93UHJvZmlsZXJFbmFibGVkOjpObywKICAgICAgICAgV1RGOjpudWxsb3B0KTsKLSAgICBT
b3VyY2VDb2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFn
ZShrZXkpOwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewotICAg
ICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0ganNDYXN0PFVu
bGlua2VkQ29kZUJsb2NrVHlwZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFu
ZFVwZGF0ZUFnZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkpOworICAgIGlmICh1bmxp
bmtlZENvZGVCbG9jayAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewogICAgICAgICB1bnNp
Z25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bGluZUNvdW50KCk7CiAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRDb2RlQmxvY2stPnN0YXJ0Q29sdW1uKCkg
KyBzb3VyY2Uuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpOwogICAgICAgICBib29sIGVuZENv
bHVtbklzT25TdGFydExpbmUgPSAhbGluZUNvdW50OwpAQCAtNzEsOSArNzMsOSBAQCBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0m
IHZtLCBFeGVjdXRhYmxlVAogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlTWFw
cGluZ1VSTERpcmVjdGl2ZSh1bmxpbmtlZENvZGVCbG9jay0+c291cmNlTWFwcGluZ1VSTERpcmVj
dGl2ZSgpKTsKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogICAgIH0KLSAgICAK
KwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7Ci0gICAgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRDb2Rl
QmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1dGFi
bGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwg
ZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIHVubGlua2VkQ29kZUJs
b2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4
ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRN
b2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRl
clREWik7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0aW9uczo6dXNlQ29kZUNh
Y2hlKCkpCiAgICAgICAgIG1fc291cmNlQ29kZS5hZGRDYWNoZShrZXksIFNvdXJjZUNvZGVWYWx1
ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fc291cmNlQ29kZS5hZ2UoKSkpOwpAQCAtMTEwLDkg
KzExMiw4IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldFVubGlu
a2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2CiAgICAgICAgIHZtLnR5cGVQcm9maWxl
cigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8s
IAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2ZpbGVy
RW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAgICBm
dW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKLSAgICBTb3VyY2VDb2Rl
VmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkpOwot
ICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewotICAgICAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVB
Z2U8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBrZXkpOworICAgIGlmIChleGVjdXRh
YmxlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAgIHNvdXJjZS5wcm92aWRl
cigpLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291cmNlVVJMRGlyZWN0aXZl
KCkpOwogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlTWFwcGluZ1VSTERpcmVj
dGl2ZShleGVjdXRhYmxlLT5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICBy
ZXR1cm4gZXhlY3V0YWJsZTsKQEAgLTE1NSw0ICsxNTYsMTAgQEAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUo
Vk0mIHYKICAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOwogfQogCit2b2lkIENvZGVDYWNo
ZTo6d3JpdGUoVk0mIHZtKQoreworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX3NvdXJjZUNv
ZGUpCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKHZtLCBpdC5rZXksIGl0LnZhbHVlKTsKK30KKwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRleCA4YTQ0MTlm
OTZjYThmYTRhNjI5YmUwZTlhNzgyN2NiYWY2OGNmZjg2Li45OTM5NWYyY2QyODQxMTM5YTAzNWM4
YjE1ODliYjkzOWM2OWM1NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2Rl
Q2FjaGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZUluZm8uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
LmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBA
IC04OSwxMyArOTEsNzYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VDb2Rl
VmFsdWUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisg
ICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFVubGlua2VkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNo
RnJvbURpc2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsKKyNp
ZiBPUyhEQVJXSU4pCisgICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRp
c2tDYWNoZVBhdGgoKTsKKyAgICAgICAgaWYgKCFjYWNoZVBhdGgpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICB1bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICAg
ICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgICAgICBpbnQgY291bnQgPSBzbnByaW50ZihmaWxl
bmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOworICAgICAgICBpZiAo
Y291bnQgPCAwIHx8IGNvdW50ID4gNTEyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworICAgICAgICBpZiAo
ZmQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbnQgcmMg
PSBmbG9jayhmZCwgTE9DS19TSCB8IExPQ0tfTkIpOworICAgICAgICBpZiAocmMpIHsKKyAgICAg
ICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisKKyAgICAgICAgc3RydWN0IHN0YXQgc2I7CisgICAgICAgIGludCByZXMgPSBmc3RhdChmZCwg
JnNiKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3Np
emUpOworICAgICAgICBpZiAocmVzIHx8ICFzaXplKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgY29uc3Qgdm9pZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXplLCBQ
Uk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2Nr
VHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlPih2bSwga2V5LCBidWZmZXIsIHNpemUpOworCisgICAgICAgIGlmICghdW5saW5rZWRD
b2RlQmxvY2spCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhZGRDYWNo
ZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fYWdlKSk7Cisg
ICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyNlbmRpZgorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29k
ZUJsb2NrVHlwZT4KKyAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtl
ZENvZGVCbG9jaywgVW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2Ft
ZTxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVlLCBV
bmxpbmtlZENvZGVCbG9ja1R5cGUqPgorICAgIGZldGNoRnJvbURpc2soVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlS2V5JiBrZXkpCisgICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jayA9IGZldGNoRnJvbURpc2tJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0s
IGtleSk7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpKSkK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBj
b2RlQmxvY2s7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGQ6OmVu
YWJsZV9pZl90PCFzdGQ6OmlzX2Jhc2Vfb2Y8VW5saW5rZWRDb2RlQmxvY2ssIFQ+Ojp2YWx1ZSB8
fCBzdGQ6OmlzX3NhbWU8VCwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFQqPgorICAg
IGZldGNoRnJvbURpc2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JikgeyByZXR1cm4gbnVsbHB0
cjsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorICAg
IFVubGlua2VkQ29kZUJsb2NrVHlwZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsKICAgICAgICAgcHJ1bmUoKTsKIAogICAgICAg
ICBpdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAoZmlu
ZFJlc3VsdCA9PSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgcmV0dXJuIGZldGNoRnJvbURpc2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwg
a2V5KTsKIAogICAgICAgICBpbnQ2NF90IGFnZSA9IG1fYWdlIC0gZmluZFJlc3VsdC0+dmFsdWUu
YWdlOwogICAgICAgICBpZiAoYWdlID4gbV9jYXBhY2l0eSkgewpAQCAtMTE1LDcgKzE4MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgZmluZFJlc3VsdC0+dmFsdWUuYWdlID0gbV9hZ2U7CiAgICAgICAg
IG1fYWdlICs9IGtleS5sZW5ndGgoKTsKIAotICAgICAgICByZXR1cm4gJmZpbmRSZXN1bHQtPnZh
bHVlOworICAgICAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGZpbmRS
ZXN1bHQtPnZhbHVlLmNlbGwuZ2V0KCkpOwogICAgIH0KIAogICAgIEFkZFJlc3VsdCBhZGRDYWNo
ZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYgdmFsdWUp
CkBAIC0xOTcsNiArMjYyLDcgQEAgcHVibGljOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBTb3VyY2VDb2RlJiwgRGVidWdnZXJNb2RlLCBPcHRpb25hbDxpbnQ+IGZ1
bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIFBhcnNlckVycm9yJik7CiAK
ICAgICB2b2lkIGNsZWFyKCkgeyBtX3NvdXJjZUNvZGUuY2xlYXIoKTsgfQorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgd3JpdGUoVk0mKTsKIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4gCkBAIC0yNTYs
NCArMzIyLDM2IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENvZGVC
bG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhCiAgICAgcmV0dXJuIHVubGlua2Vk
Q29kZUJsb2NrOwogfQogCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29kZUJsb2Nr
KFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFsdWUm
IHZhbHVlKQoreworI2lmIE9TKERBUldJTikKKyAgICBjb25zdCBjaGFyKiBjYWNoZVBhdGggPSBP
cHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7CisgICAgaWYgKExJS0VMWSghY2FjaGVQYXRoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpzRHlu
YW1pY0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5nZXQoKSk7CisgICAg
aWYgKCFjb2RlQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGhhc2ggPSBr
ZXkuaGFzaCgpOworICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICBpbnQgY291bnQgPSBzbnBy
aW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOworICAg
IGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0
ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2RlQ29kZUJs
b2NrKHZtLCBrZXksIGNvZGVCbG9jayk7CisKKyAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBP
X0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOworICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX0VY
IHwgTE9DS19OQik7CisgICAgaWYgKCFyYykKKyAgICAgICAgOjp3cml0ZShmZCwgcmVzdWx0LmZp
cnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKKyAgICBjbG9zZShmZCk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BBUkFN
KHZhbHVlKTsKKyNlbmRpZgorfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IGNhNTMxNjM2Yjc4MWU4NjllYTc4
Zjc2ZDI1YjVlNGFlYWQ0MTYxODUuLjJiY2FhOWI2NzYyZDI1MmYwYjMxZWUxYTg5NDljZGQ4Mzc0
NjgwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKQEAg
LTE2ODgsMTEgKzE2ODgsNiBAQCBib29sIEpTQmlnSW50OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhl
Y1N0YXRlKiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdQogICAgIHJldHVybiB0
cnVlOwogfQogCi1pbmxpbmUgc2l6ZV90IEpTQmlnSW50OjpvZmZzZXRPZkRhdGEoKQotewotICAg
IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpT
QmlnSW50KSk7Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEpTQmlnSW50KiBK
U0JpZ0ludDo6cGFyc2VJbnQoRXhlY1N0YXRlKiBleGVjLCBDaGFyVHlwZSogIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUpCiB7CkBAIC0xNzk1LDEx
ICsxNzkwLDYgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGwKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotaW5saW5lIEpTQmlnSW50OjpEaWdpdCogSlNCaWdJbnQ6OmRhdGFTdG9yYWdlKCkKLXsK
LSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOwotfQotCiBpbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0
IEpTQmlnSW50OjpkaWdpdCh1bnNpZ25lZCBuKQogewogICAgIEFTU0VSVChuIDwgbGVuZ3RoKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5kZXggMmIzYmY5MzA3
ZDhkYmJiMTEwNzUzM2VkODMwMzQ3YmNkZDRhNjEwYi4uZTJhNjU3ODEwNzE3Mjk0YTk0ZjgxNzg0
YTJlNzFjNDhhOGFkNWIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCaWdJbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNCaWdJbnQgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKKyAgICBmcmllbmQgc3RydWN0
IENhY2hlZEJpZ0ludDsKIAogcHVibGljOgogCkBAIC0yMjgsOCArMjI5LDE1IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpTQmlnSW50KiB4KTsK
IAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpOwotICAgIERpZ2l0KiBkYXRhU3RvcmFnZSgp
OworICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCisgICAgeworICAgICAg
ICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+KHNpemVvZihK
U0JpZ0ludCkpOworICAgIH0KKworICAgIGlubGluZSBEaWdpdCogZGF0YVN0b3JhZ2UoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RGlnaXQqPihyZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mRGF0YSgpKTsKKyAgICB9CiAKICAgICBEaWdpdCBk
aWdpdCh1bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1bnNpZ25lZCwgRGlnaXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCA2NmNlYzNhZjc5ZjZh
ODEzZDk4YjMwNjc4ZTdkNGZkZjg2ZWM2MTI2Li45NjJkODdlOTkyNmRhY2UzNzY2ZjU5NzNkMDk2
ZDg4MjI3ZTFkZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNw
cApAQCAtNTE3LDYgKzUxNywxMiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRp
b25zKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKICNlbmRpZgorCisg
ICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKKyAgICAgICAgT3B0aW9uczo6ZGlza0Nh
Y2hlUGF0aCgpID0gbnVsbHB0cjsKKworICAgIGlmICghT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgp
KQorICAgICAgICBPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CiB9CiAKIHZvaWQg
T3B0aW9uczo6aW5pdGlhbGl6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgKaW5kZXggZTY3ZDkzOTNlMGMyNjhmODkxN2M5ODIyOWMxYWYzNDhhZTIxZjM2MS4uNDhmNmU2
MmE3YTAyYjk0MWE5YzMxZTg4MWNhNmNiMWYyOWQyMjRiNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNTA4LDYgKzUwOCw4IEBAIGNvbnN0ZXhwciBib29sIGVu
YWJsZVdlYkFzc2VtYmx5U3RyZWFtaW5nQXBpID0gZmFsc2U7CiAgICAgdihib29sLCB0cmFjZUxM
SW50RXhlY3V0aW9uLCBmYWxzZSwgQ29uZmlndXJhYmxlLCBudWxscHRyKSBcCiAgICAgdihib29s
LCB0cmFjZUxMSW50U2xvd1BhdGgsIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24sIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKKyAgICB2KG9wdGlvblN0cmluZywgZGlza0NhY2hlUGF0aCwgbnVsbHB0ciwgUmVzdHJp
Y3RlZCwgIiIpIFwKKyAgICB2KGJvb2wsIGZvcmNlRGlza0NhY2hlLCBmYWxzZSwgUmVzdHJpY3Rl
ZCwgIiIpIFwKIAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwLmgKaW5kZXggODNhYWQzNTYwMzhlYjJlYzc2ZTZiOGJkMzdjNzQ3NmNl
YzkxMzUyZS4uODkzMDQ1NGE0YzIzYmE4OTg2OWVkNDY0Zjc0M2IyOWIzMmU5MDI5YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3Mg
Vk07CiBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBGbGFncyByZWdFeHBGbGFncyhjb25zdCBTdHJp
bmcmKTsKIAogY2xhc3MgUmVnRXhwIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5k
IHN0cnVjdCBDYWNoZWRSZWdFeHA7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCmluZGV4IDQwZTdjN2VjMmZk
NjBiNTg0MmE1NzI4NWFjOTdiMGY2YTk1OTM5NWQuLjVmNTAzNDRhMzA1Y2Q4ZjA3NzAxMzA3NGZk
ZTBmZGQyZWMzM2FkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaApAQCAtMzksNiArMzksOCBAQCBuYW1lc3BhY2UgSlND
IHsKIC8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25zIGFyZSBzbyB1bmNv
bW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQogLy8gImRlbGV0ZSBh
cmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9wZXJ0eS4KIGNsYXNz
IFNjb3BlZEFyZ3VtZW50c1RhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5k
IHN0cnVjdCBDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZTsKKwogcHVibGljOgogICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCmluZGV4IGVkOTgyZTMxZjU1YmJiYzkx
NjI4ZDIzNDE3ODEyYmI0ZjZjNjg3MTEuLjVlZWRlZTZmODE4NmRhZWEzMDQwOTgxM2Q0NTM0NmFj
MDc1ZWZkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNr
RnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJIZWFwLmgiCiAj
aW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAj
aW5jbHVkZSA8bGltaXRzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMDJhZjRhMDE2MDM0Yzk3YTMyNjIyYjUxYjA0ZmMyOTZl
NTJiZDc1MS4uN2JjYjQyZjJkN2VhMmU3MTEzYjlmMzg1NzhlNDViY2E3OGY0MWI4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNsdWRlICJT
dHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCmluZGV4IDkxNTdkNWI4MjkyMDBm
YjZhOTY1ZWEzYmM3ODY5NmU1MzJhOTJiOTUuLjIyMGYwMzdiYjFlMDFhODA5YTFkN2FlYjE5OTIw
ZWY3YWIzNWMyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaApAQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5
bWJvbE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50PgogLy8gY29weTog
ICAgIFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9s
VGFibGVFbnRyeSB7CisgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRTeW1ib2xUYWJsZUVudHJ5Owor
CiBwcml2YXRlOgogICAgIHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zmc2V0RnJvbUJpdHMoaW50cHRy
X3QgYml0cykKICAgICB7CkBAIC00MzYsNiArNDM4LDggQEAgc3RydWN0IFN5bWJvbFRhYmxlSW5k
ZXhIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxTeW1ib2xUYWJsZUVudHJ5PiB7CiB9OwogCiBjbGFz
cyBTeW1ib2xUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworICAgIGZyaWVuZCBzdHJ1Y3Qg
Q2FjaGVkU3ltYm9sVGFibGU7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKaW5kZXggNzU1Y2Q3YTlh
YTU3NmM2ZjdhNGRiMTRjMGQ5ZTMwMmM3OGRiNTE3OC4uNDFkOTcyMmU1ZjM3NDA0OWMyNDhjNWNl
YmI4MjY3OGEwNTM0Y2E1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgK
KysrIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CituYW1lc3BhY2UgSlNDIHsKK3N0cnVjdCBDYWNoZWRCaXRWZWN0b3I7Cit9CisKIG5hbWVzcGFj
ZSBXVEYgewogCiAvLyBUaGlzIGlzIGEgc3BhY2UtZWZmaWNpZW50LCByZXNpemVhYmxlIGJpdHZl
Y3RvciBjbGFzcy4gSW4gdGhlIGNvbW1vbiBjYXNlIGl0CkBAIC0zMzgsNiArMzQyLDggQEAgcHVi
bGljOgogICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9CiAgICAgICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IEpTQzo6Q2Fj
aGVkQml0VmVjdG9yOworCiAgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzZTY4ZjA3NmMxZTNmZmM2ZDhlOTc2
MzIxODdmOWJhOTdlM2E4ZGYyLi40ZTYxMTQ4MDlhMjZjMzJhNjc5NDc3NTdlMDc0Y2Y2YjFjZWI2
ZTY4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTktMDEtMDcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgdGVzdCBoZWxwZXIgdG8gZXhlY3V0ZSBieXRlY29kZS1jYWNoZSB0ZXN0
czogaXQgZXhlY3V0ZXMgZWFjaCB0ZXN0CisgICAgICAgIHR3aWNlLCB0aGUgZmlyc3Qgd2l0aCBK
U0NfZGlza0NhY2hlUGF0aCBzZXQgdG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICAgICAgIGFu
ZCBzZWNvbmQgd2l0aCBKU0NfZm9yY2VEaXNrQ2FjaGU9dHJ1ZSAoaW4gYWRkaXRpb24gdG8gdGhl
IGNhY2hlIHBhdGgpCisgICAgICAgIHRvIGd1YXJhbnRlZSB0aGF0IG9ubHkgdGhlIGRpc2sgY2Fj
aGUgaXMgYmVpbmcgdXNlZCBhbmQgbm8gbmV3CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrcyBh
cmUgYmVpbmcgY3JlYXRlZC4KKworICAgICAgICAqIFNjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhl
bHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXI6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDEtMDYgIEZ1amlpIEhpcm9ub3JpICA8
SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbl1bQ2xhbmddIEZpeCBjb21w
aWxhdGlvbiB3YXJuaW5ncyBvZiBNaW5pQnJvd3NlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlciBiL1Rv
b2xzL1NjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1o
ZWxwZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzhjOTI5MjFkYjhkNGRkMjUwMjc0NDBjNmNmNGZkMWY5ZmFmN2U4
OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBl
cnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIKQEAgLTAsMCArMSw0OCBAQAorIyEvdXNyL2Jp
bi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgJ3J1
YnlnZW1zJworcmVxdWlyZSAnZmlsZXV0aWxzJworcmVxdWlyZSAnanNvbicKK3JlcXVpcmUgJ3No
ZWxsd29yZHMnCityZXF1aXJlICd0bXBkaXInCisKK2RlZiBteXN5cygqY21kKQorICAgIHJhaXNl
ICJDb21tYW5kICN7Y21kLmluc3BlY3R9IGZhaWxlZDogI3skPy5pbnNwZWN0fSIgdW5sZXNzIHN5
c3RlbSgqY21kKQorZW5kCisKK3BhdGhUb1ZNID0gQVJHVlswXQoraW5wdXRGaWxlID0gQVJHVlsx
XQorZXh0cmFPcHRpb25zID0gQVJHVlsyLi4tMV0KK2Rpc2tDYWNoZVBhdGggPSBEaXIubWt0bXBk
aXIgW2lucHV0RmlsZSwgJ2J5dGVjb2RlLWNhY2hlJ10KKworYmVnaW4KKyAgICBFTlZbIkpTQ19k
aXNrQ2FjaGVQYXRoIl0gPSBkaXNrQ2FjaGVQYXRoCisgICAgbXlzeXMocGF0aFRvVk0sIGlucHV0
RmlsZSwgKmV4dHJhT3B0aW9ucykKKyAgICBFTlZbIkpTQ19mb3JjZURpc2tDYWNoZSJdID0gInRy
dWUiCisgICAgbXlzeXMocGF0aFRvVk0sIGlucHV0RmlsZSwgKmV4dHJhT3B0aW9ucykKK2Vuc3Vy
ZQorICAgIEZpbGVVdGlscy5ybV9yZihkaXNrQ2FjaGVQYXRoKQorZW5kCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cwppbmRleCAzNWE5ZWIxYzU1ZTEwMmI1MmRkNDU1NzAyM2Q5MmQxNjAzZTBj
NWExLi4zYWY0ZThjNThlYzhmZDI0ZTU1MzMwYjE0ZTRmM2YzMDU2YzJhMzliIDEwMDc1NQotLS0g
YS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTY1NSw2ICs2NTUsMTUgQEAgZGVmIHJ1bkRlZmF1bHQo
Km9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBydW4oImRlZmF1bHQiLCAqKEZUTF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCitkZWYgcnVuQnl0
ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQorICAgIHVubGVzcyAkaG9z
dE9TID09ICJkYXJ3aW4iCisgICAgICAgIHNraXAKKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisg
ICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMg
KyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucworICAgIGFkZFJ1bkNv
bW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJydWJ5IiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNv
ZGUtY2FjaGUtdGVzdC1oZWxwZXIiKS50b19zLCBwYXRoVG9WTS50b19zLCAkYmVuY2htYXJrLnRv
X3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyKQor
ZW5kCisKIGRlZiBydW5CaWdJbnRFbmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
CiAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQwMzMxMTIxPgogICAgIGlmICRyZW1vdGUg
b3IgKCRhcmNoaXRlY3R1cmUgIX4gL3g4Ni9pIGFuZCAkaG9zdE9TID09ICJkYXJ3aW4iKQpAQCAt
NzUxLDYgKzc2MCw3IEBAIGRlZiBkZWZhdWx0UnVuCiAgICAgICAgIGRlZmF1bHRRdWlja1J1bgog
ICAgIGVsc2UKICAgICAgICAgcnVuRGVmYXVsdAorICAgICAgICBydW5CeXRlY29kZUNhY2hlCiAg
ICAgICAgIGlmICRqaXRUZXN0cwogICAgICAgICAgICAgcnVuTm9MTEludAogICAgICAgICAgICAg
cnVuTm9DSklUVmFsaWRhdGVQaGFzZXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358679</attachid>
            <date>2019-01-09 00:02:06 -0800</date>
            <delta_ts>2019-01-16 15:01:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190109090201.patch</filename>
            <type>text/plain</type>
            <size>133124</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5Njc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZjQ2MDg5YTg1MGJkYzJhNDIwNmI1NTNkMGI1MjJlNWIxNmQ1ZWQ3Li5lZWZmNTFjOTA0YmZjNzk0
OTkxYTVlNWQ2YWM1MWM5ODdhYjQ0NzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDAgQEAKKzIwMTktMDEtMDggIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLiBBbHNvLCBkdXJpbmcgZGVjb2RpbmcsIHRoZSBjYWNoZWQgb2JqZWN0cworICAg
ICAgICBhcmUgbW1hcCdkIGZyb20gZGlzaywgYnV0IG9ubHkgdXNlZCBmb3IgY3JlYXRpbmcgaW5z
dGFuY2VzIG9mIHRoZSByZXNwZWN0aXZlCisgICAgICAgIGluLW1lbW9yeSB2ZXJzaW9uIG9mIGVh
Y2ggb2JqZWN0LiBJZGVhbGx5LCB0aGUgbW1hcCdkIG9iamVjdHMgc2hvdWxkIGJlIHVzZWQKKyAg
ICAgICAgYXQgcnVudGltZSBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyk6CisgICAgICAg
ICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRS
ZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkSGFuZGxlckluZm86
OlVubGlua2VkSGFuZGxlckluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uU3Ry
ZWFtLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFNldENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50SWRlbnRpZmllclNldHMpOgorICAgICAgICAqIGJ5
dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxpbmtlZEds
b2JhbENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGpzYy5jcHA6CisgICAg
ICAgIChmdW5jdGlvblF1aXQpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBwYXJzZXIv
U291cmNlQ29kZS5oOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VDb2RlS2V5Lmg6CisgICAgICAg
IChKU0M6OlNvdXJjZUNvZGVLZXk6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAqIHBhcnNl
ci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9u
bWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RW5jb2Rlcjo6RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkVuY29kZXI6On5FbmNv
ZGVyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6dm0pOgorICAgICAgICAoSlNDOjpFbmNvZGVy
OjptYWxsb2NPZmZzZXQpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjptYWxsb2MpOgorICAgICAg
ICAoSlNDOjpFbmNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkVuY29kZXI6OmNhY2hl
UHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6b2Zmc2V0Rm9yUHRyKToKKyAgICAgICAgKEpT
Qzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6OkRlY29kZXI6OkRlY29kZXIpOgor
ICAgICAgICAoSlNDOjpEZWNvZGVyOjp+RGVjb2Rlcik6CisgICAgICAgIChKU0M6OkRlY29kZXI6
OnZtKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpE
ZWNvZGVyOjpjYWNoZU9mZnNldCk6CisgICAgICAgIChKU0M6OkRlY29kZXI6OmFkZEZpbmFsaXpl
cik6CisgICAgICAgIChKU0M6OmVuY29kZSk6CisgICAgICAgIChKU0M6OmRlY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZE9iamVjdDo6c2l6ZU9mKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkT2Jq
ZWN0OjpjYXN0KToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6OmJ1ZmZlciBj
b25zdCk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YWxsb2NhdGUpOgorICAgICAgICAoSlND
OjpDYWNoZWRQdHI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFB0cjo6ZGVjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUHRyOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVm
UHRyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWZQdHI6OmRlY29kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZFdyaXRlQmFycmllcjo6ZW5jb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkV3JpdGVCYXJyaWVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRWZWN0b3I6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFZlY3Rvcjo6ZGVjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUGFpcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkUGFpcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaE1hcDo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaE1hcDo6ZGVjb2RlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw6OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdJ
bXBsOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmc6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZzo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkSWRlbnRpZmllcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSWRlbnRp
Zmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkT3B0aW9uYWw6OmVuY29k
ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlQXNQdHIgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRTaW1wbGVKdW1wVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNp
bXBsZUp1bXBUYWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5n
SnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdKdW1wVGFibGU6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJhcmVEYXRhOjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRSYXJlRGF0YTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkQml0VmVjdG9yOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRCaXRWZWN0
b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hTZXQ6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hTZXQ6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5OjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZGVjb2RlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudDo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkQXJyYXk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEFycmF5Ojpk
ZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN5bWJvbFRhYmxlRW50cnk6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZFN5bWJvbFRhYmxlRW50cnk6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFN5bWJvbFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpD
YWNoZWRTeW1ib2xUYWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1t
dXRhYmxlQnV0dGVyZmx5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRJbW11dGFibGVC
dXR0ZXJmbHk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZW5j
b2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVnRXhwOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmVuY29kZSk6CisgICAgICAg
IChKU0M6OkNhY2hlZFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6ZGVjb2RlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQmlnSW50OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRC
aWdJbnQ6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEpTVmFsdWU6OmVuY29k
ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEpTVmFsdWU6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZEluc3RydWN0aW9uU3RyZWFtOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpD
YWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkTWV0YWRhdGFUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkTWV0YWRhdGFU
YWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VPcmlnaW46OmRlY29kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZFRleHRQb3NpdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkVGV4dFBvc2l0aW9uOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRTb3VyY2VQcm92aWRlclNoYXBlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3Vy
Y2VQcm92aWRlclNoYXBlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJp
bmdTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nU291
cmNlUHJvdmlkZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFdlYkFzc2Vt
Ymx5U291cmNlUHJvdmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFdlYkFzc2Vt
Ymx5U291cmNlUHJvdmlkZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNv
dXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VQcm92aWRl
cjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5saW5rZWRTb3VyY2VDb2Rl
U2hhcGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291cmNlQ29kZVNo
YXBlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlOjplbmNv
ZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlND
OjpDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRNb2R1bGVDb2RlQmxvY2s6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1vZHVs
ZUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRXZhbENvZGVC
bG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRXZhbENvZGVCbG9jazo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrVHlwZT46OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRDb2RlQmxvY2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU291cmNlQ29kZUtleTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29k
ZUtleTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVFbnRyeTo6ZW5jb2RlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVFbnRyeTo6IGNvbnN0KToKKyAgICAgICAgKEpTQzo6IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6ZW5jb2RlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6ZGVjb2Rl
Q29kZUJsb2NrSW1wbCk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxv
Y2suaC4KKyAgICAgICAgKEpTQzo6ZGVjb2RlQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1l
L0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6cHJ1bmVTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVj
dXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjp3cml0ZSk6CisgICAgICAgICogcnVu
dGltZS9Db2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlTWFwOjpiZWdpbik6Cisg
ICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZW5kKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hl
TWFwOjpmZXRjaEZyb21EaXNrSW1wbCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6Zmlu
ZENhY2hlQW5kVXBkYXRlQWdlKToKKyAgICAgICAgKEpTQzo6d3JpdGVDb2RlQmxvY2spOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6b2Zm
c2V0T2ZEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmRhdGFTdG9yYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdF
eHAuaDoKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAg
ICogcnVudGltZS9TdGFja0ZyYW1lLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorCiAyMDE5LTAxLTA0ICBU
YWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAgIEJhc2VsaW5lIHZl
cnNpb24gb2YgZ2V0X2J5X2lkIG1heSBjb3JydXB0IG1ldGFkYXRhCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDlkZTBjNmIxMjFj
ODQxMjJkMmZlM2MwZGJjYjcxNTQyYjc5ZTBiYTguLjJlMTI5MjA0MmQ1Y2JiZDFjNWIxMzMzOGE2
OGIxOTVlZjkwZjIyMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDEtMDggIFRhZGV1IFph
Z2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8g
ZGlzaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTky
NzgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCaXRWZWN0b3JzIGhhdmUgdG8gYmUgZnJp
ZW5kcyB3aXRoIEpTQzo6Q2FjaGVCaXRWZWN0b3IgdG8gYWxsb3cKKyAgICAgICAgc2VyaWFsaXpp
bmcgaXRzIGJ1ZmZlciBhcyBwYXJ0IG9mIHRoZSBieXRlY29kZSBjYWNoZSBlbmNvZGluZy4KKwor
ICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKwogMjAxOS0wMS0wMiAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhvbW9ncmFwaCB3aXRoIExB
VElOIFNNQUxMIExFVFRFUiBSIFdJVEggRklTSEhPT0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCA3OWNhYjBiOTc4YmI5YzhlYmNkY2M2NGNlMmM5M2IwOWMzNDk1M2M1Li5k
MjY3N2EwNDZhYjc4Y2M5MjVlOGFhNzI5MWVhMjc0MGZlOGI2ZDRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC04MzYsNiArODM2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmgKICAgICBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKICAgICBydW50aW1lL0pT
R2xvYmFsT2JqZWN0SW5saW5lcy5oCisgICAgcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5o
CiAgICAgcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5oCiAgICAgcnVudGltZS9KU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmgKICAgICBydW50aW1lL0pTTWljcm90YXNrLmgKQEAgLTg1MSw2ICs4
NTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IHJ1bnRpbWUvSlNQcm9taXNlLmgKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmgK
ICAgICBydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmgKKyAgICBydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCiAgICAgcnVudGltZS9KU1Byb3h5LmgKICAgICBydW50aW1lL0pTUnVu
TG9vcFRpbWVyLmgKICAgICBydW50aW1lL0pTU2NvcGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAwMmMzNTJmMTBhMjcwODJmNThlMzM4ZDk2ZTViMmVjNTVlNzA5ZjY2Li45OTRi
NjQzMmM4Njg4OWIyMTEyY2JiOWI4ZmE5ODE0YmM5ZTk1Njg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtODMzLDcgKzgzMyw3IEBACiAJCTI2MkQ4NUI3MUMwRDY1MEYwMDZBQ0I2
MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MkQ4NUI1MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJG
aXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCAqLzsgfTsKIAkJMjY4NEQ0MzgxQzAwMTYxQzAwODFE
NjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCAqLzsg
fTsKIAkJMjY5RDYzNkUxQkZCRTVEMTAwMTAxQjFEIC8qIEZUTE91dHB1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY5RDYzNkQxQkZCRTVEMDAwMTAx
QjFEIC8qIEZUTE91dHB1dC5oICovOyB9OwotCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyog
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmggKi87IH07CisJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkyQTExMTI0NjE5MkZDRTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTExMTI0NDE5MkZD
RTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8q
IEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0
aW9uLmggKi87IH07CiAJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICov
OyB9OwpAQCAtMTA2NSw3ICsxMDY1LDcgQEAKIAkJNTNFOUUwQUMxRUFFODNERjAwRkVFMjUxIC8q
IFdhc21NYWNoaW5lVGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFk
cy5oICovOyB9OwogCQk1M0U5RTBBRjFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBB
RTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNFQUZFMkYyMDhERkFCNDAwN0Q1MjRC
IC8qIHRlc3RhcGkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovOyB9OwotCQk1
M0YxMUY0MTIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjExRjQwMjA5MTM4RDcw
MEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oICovOyB9OworCQk1M0YxMUY0MTIwOTEz
OEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjExRjQwMjA5MTM4RDcwMEU0MTFBNyAvKiBK
U0ltbXV0YWJsZUJ1dHRlcmZseS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0
MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLzsgfTsKIAkJNTNGNDBFOEIxRDU5
MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdh
c21GdW5jdGlvblBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYgLyog
V2FzbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLzsgfTsKQEAgLTEw
ODQsNiArMTA4NCw3IEBACiAJCTVEQkIxNTFCMTMxRDBCMzEwMDU2QUQzNiAvKiB0ZXN0YXBpLmpz
IGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi87IH07CiAJCTVEQkIx
NTI1MTMxRDBCRDcwMDU2QUQzNiAvKiBtaW5pZG9tLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxMjExMEQwQTQ4Nzg4NzAwNDgw
MjU1IC8qIG1pbmlkb20uanMgKi87IH07CiAJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJsZSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OworCQk1RTE1OEFDMzUwQkM0RUM3ODc3
REMwRjQgLyogT2JqZWN0UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkQwQ0M5RTFDQkMxNDlBQjhGNDAzNDM0IC8qIE9iamVj
dFByb3RvdHlwZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk2MjNBMzdFQzFCODdBN0MwMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyM0EzN0VCMUI4
N0E3QkQwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyNzY3MzI0MUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxs
TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjI3
NjczMjIxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8q
IEZ1bmN0aW9uUmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2MjQs
NyArMTYyNSw2IEBACiAJCUJDMThDNDQ0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjY4
MEM1MEUxNkQ0RTkwMEEwNkU5MiAvKiBOdW1iZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ0NTBFMTZGNUNEMDBCMzQ0
NjAgLyogT2JqZWN0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMjY4MEM3MEUxNkQ0RTkwMEEwNkU5MiAvKiBPYmplY3RDb25zdHJ1
Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDMThDNDQ2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjY4MEM5MEUxNkQ0RTkwMEEw
NkU5MiAvKiBPYmplY3RQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk1RTE1OEFDMzUwQkM0RUM3ODc3REMwRjQgLyogT2JqZWN0UHJv
dG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkQwQ0M5RTFDQkMxNDlBQjhGNDAzNDM0IC8qIE9iamVjdFByb3RvdHlwZUlubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4
QzQ0ODBFMTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY5MkE4NzgwMjU1NTk3RDAxRkY2MEY3IC8qIE9w
ZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlCQzE4QzQ0QjBFMTZGNUNEMDBCMzQ0NjAgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YwQjNBQTA5QkI0REMwMDA2OEZDRTMg
LyogUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkMxOEM0NTQwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5TmFtZUFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQwMEMxMDBBNjlC
QUYyMDA1MDk4ODcgLyogUHJvcGVydHlOYW1lQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzE0MCw2ICszMTQwLDcgQEAKIAkJMTQzODZB
NzMxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0Mzg2QTc2MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2
YWxFeGVjdXRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDM4NkE3NzFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBD
YWNoZWRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQwMDUxRjBBNTMxRDNCMDAwNUYw
NjEgLyogTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlLmg7IHBh
dGggPSB0ZXN0cy9Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNTIw
MEE1MzFEM0IwMDA1RjA2MSAvKiBOb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFt
ZSA9IE5vZGUuYzsgcGF0aCA9IHRlc3RzL05vZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQ0MDA3NDgwQTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5vZGVMaXN0Lmg7IHBhdGggPSB0ZXN0cy9Ob2RlTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI1NCw2ICszMjU1LDcgQEAKIAkJMTRE
ODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmphdmFzY3JpcHQ7IG5hbWUgPSB0ZXN0YXBpLmpzOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGku
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRG
QiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0xleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNERBRkE0NTIxRTNCODcxMDA0QjY4
RjcgLyogQ2FjaGVkVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FjaGVkVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERFMEQ2
ODBEMDI0MzE0MDBBQUNDQTIgLyogSlNHbG9iYWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVy
ID0geGNvZGUubGFuZy5jcHA7IH07CiAJCTE0REYwNEQ5MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0
aWNQcm9wZXJ0eUFuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
YXRpY1Byb3BlcnR5QW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRF
ODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzY2OSw2ICszNjcxLDcgQEAKIAkJNkEzOENGQTgxRTMyQjU4QjAwNjAyMDZGIC8q
IEFzeW5jU3RhY2tUcmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3lu
Y1N0YWNrVHJhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkFEMkNCNEMxOUI5
MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVidWdnZXJFdmFsRW5hYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2QkE5M0M5NTkwNDg0QzVCQUQ5MzE2RUEgLyogSlNTY3JpcHRGZXRjaGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2NyaXB0RmV0Y2hlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RDBDQzlFMUNCQzE0OUFCOEY0MDM0MzQgLyogT2Jq
ZWN0UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
YmplY3RQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcw
MTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0
ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVy
YXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxM0NBODkx
QjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQ0ODcsNyArNDQ5MCw2IEBACiAJCUJDMjY4MEM3MEUxNkQ0RTkwMEEwNkU5MiAvKiBP
YmplY3RDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmpl
Y3RDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI2ODBDODBF
MTZENEU5MDBBMDZFOTIgLyogT2JqZWN0UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE9iamVjdFByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDMjY4MEM5MEUxNkQ0RTkwMEEwNkU5MiAvKiBPYmplY3RQcm90b3R5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0UHJvdG90eXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZEMENDOUUxQ0JDMTQ5QUI4RjQwMzQzNCAvKiBP
YmplY3RQcm90b3R5cGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9iamVjdFByb3RvdHlwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMyNjgwRTYwRTE2RDUyMzAwQTA2RTkyIC8qIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdW1iZXJDb25zdHJ1Y3Rvci5sdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzMDQ2MDYwRTFGNDk3RjAwMzIzMkNGIC8qIEVy
cm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJT
ZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9
IEdldHRlclNldHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lm
aWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKQEAgLTY1ODMsNiArNjU4
NSw4IEBACiAJCQkJOUU3Mjk0MDkxOTBGMDMwNjAwMUE5MUI1IC8qIEJ1bmRsZVBhdGgubW0gKi8s
CiAJCQkJMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovLAogCQkJCTBG
QjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCisJCQkJMTRE
QUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8qIENhY2hlZFR5cGVzLmNwcCAqLywKKwkJCQkxNDNCRTI2
NTIxQzg1Nzc3MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLywKIAkJCQkwRkVDM0M1RjFGMzc5
RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggKi8sCiAJCQkJQkNBNjJERkUwRTI4MjYy
MzAwMDRGMzBEIC8qIENhbGxEYXRhLmNwcCAqLywKIAkJCQkxNDVDNTA3RjBEOURGNjNCMDA4OEY2
QjkgLyogQ2FsbERhdGEuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBjYmE0
YzRiYTYwMDRmOTMwZDVjYTg1NjMzMTBhNjI0M2UzNjQ0OWU1Li41ZTNlNzk3M2FjODA1YzBiYzIz
ZTI5YmM5ZjJjODZmNjYwMWM2YzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC03
MTAsNiArNzEwLDcgQEAgcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCiBydW50aW1lL0Jv
b2xlYW5PYmplY3QuY3BwCiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCiBydW50aW1lL0Nh
bGxEYXRhLmNwcAorcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKIHJ1bnRpbWUvQ2F0Y2hTY29wZS5j
cHAKIHJ1bnRpbWUvQ2xhc3NJbmZvLmNwcAogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4
IDQ1ZGU4MmU3Y2I1OGEyODNiMjBmY2FlNTk4MmJiYjVjMDRkYTkxNzUuLmEwZjg1M2E2ZTA1ZGM0
NjE4ZmYwNGRlNTkwMTliMWVhMTNkNmIzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCkBAIC02Myw2ICs2Myw3IEBAIEJ1aWx0aW5OYW1l
czo6QnVpbHRpbk5hbWVzKFZNKiB2bSwgQ29tbW9uSWRlbnRpZmllcnMqIGNvbW1vbklkZW50aWZp
ZXJzKQogICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05B
TUUoSU5JVElBTElaRV9QUklWQVRFX1RPX1BVQkxJQ19FTlRSWSkKICAgICBKU0NfRk9SRUFDSF9C
VUlMVElOX0ZVTkNUSU9OX05BTUUoSU5JVElBTElaRV9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkK
ICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElO
SVRJQUxJWkVfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCisgICAgSlNDX0NPTU1PTl9QUklWQVRF
X0lERU5USUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9TWU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFJJ
VkFURV9UT19QVUJMSUNfRU5UUlkpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJT
X0VBQ0hfV0VMTF9LTk9XTl9TWU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFVCTElDX1RPX1BSSVZB
VEVfRU5UUlkpCiAgICAgbV9wcml2YXRlVG9QdWJsaWNNYXAuYWRkKG1fZG9sbGFyVk1Qcml2YXRl
TmFtZS5pbXBsKCksICZtX2RvbGxhclZNTmFtZSk7CiAgICAgbV9wdWJsaWNUb1ByaXZhdGVNYXAu
YWRkKG1fZG9sbGFyVk1OYW1lLmltcGwoKSwgJm1fZG9sbGFyVk1Qcml2YXRlTmFtZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggZjY2Yjhj
YjUxZWI0MDJkODczNmZkN2RkMGQyZDBlN2EyOTJmNDUxMi4uODUzMWRiMjYwYmQwNzAxYjM3MTkw
MWI2NzRiZmY1ZGYwYmZiZDg3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9CdWlsdGluTmFtZXMuaApAQCAtMjEzLDYgKzIxMyw3IEBAIGV4dGVybiBTeW1ib2xJbXBsOjpT
dGF0aWNTeW1ib2xJbXBsIHBvbHlQcm90b1ByaXZhdGVOYW1lOwogLy8gV2UgY29tbWFuZGVlciB0
aGUgcHVibGljVG9Qcml2YXRlTWFwIHRvIGFsbG93IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1i
b2wgbmFtZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3ltYm9sLgogLy8gZS5nLiBAaXRlcmF0b3JT
eW1ib2wgcG9pbnRzIHRvIFN5bWJvbC5pdGVyYXRvciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0
byBhIGFuIGFjdHVhbCBwcml2YXRlIG5hbWUuCiAvLyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhh
Y2sgYW5kIHdlIHNob3VsZG4ndCBuZWVkIHRvIGRvIHRoaXMuCisjZGVmaW5lIElOSVRJQUxJWkVf
U1lNQk9MX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZKG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFw
LmFkZChtXyMjbmFtZSMjU3ltYm9sLmltcGwoKSwgJm1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRl
bnRpZmllcik7CiAjZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VO
VFJZKG5hbWUpIG1fcHVibGljVG9Qcml2YXRlTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sUHJpdmF0
ZUlkZW50aWZpZXIuaW1wbCgpLCAmbV8jI25hbWUjI1N5bWJvbCk7CiAKIGNsYXNzIEJ1aWx0aW5O
YW1lcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmlu
ZGV4IDg2ZGI4NjkzZjYwZTc3M2I2MWJhMzczNThjYTNlZTkzN2RjMGYzNWQuLjNiMDNiNGZiNTBj
MDQxOWRkNzk2Y2U4ZTI1MDBiYzFkODhhNzFjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04NjQsNyArODY0LDcgQEAgQ29kZUJsb2NrOjp+
Q29kZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6
c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENv
bnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cykKK3ZvaWQgQ29kZUJsb2NrOjpz
ZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29u
c3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCiB7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAppbmRleCA2Yzc2NmE4YWIyMjlkYjBmNjgzZTY2YzA2YjdkNWM1MGI4ZTgx
MjE3Li5iNzlmOTBmNGI3YmUzMGJhYmVjOWE5ODcxOGZkZDc0MDJhYzM3YWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC04ODYsNyArODg2LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVk
JiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVu
dGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJT
ZXRFbnRyeT4mIGNvbnN0YW50cyk7CisgICAgdm9pZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRS
ZWdpc3RlcnMoVk0mLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBj
b25zdGFudHMpOwogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8
V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAppbmRleCA2NmMz
Yjc2ODc3NTYyMDc3NmQyNjNmZjA5OGRlNmY0NmI2NmU3NzgzLi43ZjQ2NWQyYWU5Mzc5OWI5MWRm
Nzg3MTQxOTRmY2EzNGJkMmExYTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSGFuZGxlckluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSGFuZGxlckluZm8uaApAQCAtODksNiArODksMTAgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFz
ZSB7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5m
b0Jhc2UgeworICAgIFVubGlua2VkSGFuZGxlckluZm8oKQorICAgIHsKKyAgICB9CisKICAgICBV
bmxpbmtlZEhhbmRsZXJJbmZvKHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQsIHVpbnQzMl90
IHRhcmdldCwgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUpCiAgICAgewogICAgICAgICB0aGlzLT5z
dGFydCA9IHN0YXJ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luc3RydWN0aW9uU3RyZWFtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb25TdHJlYW0uaAppbmRleCA3MGVkZTNlNDFjNWQ1YzQ4OWQ3OTZmY2ZjMGMxY2NkOTk4
ZDI5ZWQ1Li5kOTMxNTRiYzZiNWMzNmQ0YTg0OTcxMjUyZDA2MzJlNDQwZDRhZDBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaApA
QCAtMzksNiArMzksNyBAQCBjbGFzcyBJbnN0cnVjdGlvblN0cmVhbSB7CiAgICAgdXNpbmcgSW5z
dHJ1Y3Rpb25CdWZmZXIgPSBWZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
OwogCiAgICAgZnJpZW5kIGNsYXNzIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyOworICAgIGZyaWVu
ZCBzdHJ1Y3QgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW07CiBwdWJsaWM6CiAgICAgc2l6ZV90IHNp
emVJbkJ5dGVzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggZjBlOWQ2NGM4NTRhM2Y1MzY3NTJkNDg3NDY5
MmQyNzg3N2Q2NzA0OS4uMGIyMzZhMDJkNTlkYzI1OGU5MDg5MGM5MjVhM2M4OGIwNWM1MDdmYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKQEAgLTY1LDEyICs2NSwxNSBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
OwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUlu
Zm87CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENv
ZGVCbG9ja1R5cGU+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrOworCiB0eXBlZGVmIHVuc2lnbmVk
IFVubGlua2VkVmFsdWVQcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJv
ZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwog
dHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRl
ZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcgQ29uc3RhbnRJbmRl
bnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3Vz
aW5nIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQs
IHVuc2lnbmVkPjsKIAogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1
Y3QgT2Zmc2V0TG9jYXRpb24gewpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
dW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAg
ICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMu
YXBwZW5kKENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgICAg
ICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5KHNldCwgcmVzdWx0KSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNW
YWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9u
ID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKQEAgLTIwMiw3ICsyMDUsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XTsKICAgICB9
CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0
ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFZlY3RvcjxD
b25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyBy
ZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPENvbnN0
YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJu
IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtu
b3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0u
Z2V0KCk7IH0KQEAgLTM2Nyw2ICszNzAsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAg
VW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVC
bG9jayhEZWNvZGVyJiwgU3RydWN0dXJlKiwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+Jik7CisKICAgICB+VW5saW5rZWRDb2RlQmxvY2so
KTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtMzc4LDYgKzM4NSw5IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CiAgICAgZnJpZW5k
IGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KKyAgICBmcmllbmQgc3RydWN0
IENhY2hlZENvZGVCbG9jazsKKwogICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVS
ZXdyaXRlciYsIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJik7CiAKICAgICB2b2lkIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKQpAQCAtNDQ0LDcgKzQ1NCw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9i
aXRWZWN0b3JzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRS
ZWdpc3RlcnM7Ci0gICAgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4gbV9jb25z
dGFudElkZW50aWZpZXJTZXRzOworICAgIFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRy
eT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwogICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVk
ZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0
aW9uRXhwcmVzc2lvblZlY3RvcjsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5j
dGlvbkRlY2xzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRXZhbENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRXZhbENvZGVCbG9jay5oCmluZGV4IDk5ODdiNDMxMzM0M2I2Y2I3NTJhNDIwYjM1OGQ5
YTM2MDMxNzJmMjYuLjJhYzc0YWU5OGI1MGNmMjI2MTdiYzk0Mjk0NWUwMjM4NGQxMmNmNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFs
Q29kZUJsb2NrLmgKQEAgLTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVj
dCBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmlu
YWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVk
ZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAgLTU5LDExICs2MSwxNSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0
aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsKICAgICB9CiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNo
ZWRFdmFsQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1v
ZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUs
IGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCisgICAgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJik7CisKICAgICBWZWN0
b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogICAg
IFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9mdW5jdGlvbkhv
aXN0aW5nQ2FuZGlkYXRlczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggYjU0ODJiNjVjOGI4
ZWZiM2FhMzA2YTQxM2JkNTQ2MDM0OTFhOTAxMy4uNmEzMGFhM2QxZTUyZWU5Njk2Y2U3OTYzMjVj
NTA1OWJmYmY5MjJjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKIGNs
YXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRDb2Rl
QmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKQEAg
LTQ0LDEwICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKICAg
ICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJN
b2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBl
LCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrJik7CiAg
ICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgKaW5kZXggNTI2ODk4Yzk1MWQ4MjE3NTk3OTg4MTEwMmY5ZGM3ZDYxNWIwMTUy
Mi4uMzc1ZjQ3ODk3ZGNkNWIwNjk1NzYyNTVlYzNjN2FlMWM3Y2Q0NTdkOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgKQEAgLTM5LDExICszOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgRGVjb2RlcjsKIGNsYXNzIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOwogY2xhc3MgRnVuY3Rpb25F
eGVjdXRhYmxlOwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIGNs
YXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlOwogCiBlbnVtIFVubGlua2VkRnVuY3Rpb25LaW5kIHsKICAgICBVbmxpbmtlZE5vcm1h
bEZ1bmN0aW9uLApAQCAtNTQsNiArNTYsNyBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBD
b2RlQ2FjaGU7CiAgICAgZnJpZW5kIGNsYXNzIFZNOworICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlv
bkV4ZWN1dGFibGU7CiAKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0
dXJlSXNJbW1vcnRhbDsKQEAgLTE0Nyw2ICsxNTAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29u
c3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBWYXJpYWJsZUVudmlyb25tZW50Jiwg
IEpTQzo6RGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0
cnVjdG9yKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiwgVmFyaWFi
bGVFbnZpcm9ubWVudCYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAg
dW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxD
b2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2Jh
bENvZGVCbG9jay5oCmluZGV4IDM0Mzg2MmU2NDcwZmUxYjFhNDI0ODVkODc2OWUyNzdkNzJjMTUw
OGUuLjg2OTk2MTU4N2NkZDUxNzE3ZmY2M2MxNjdkYmYyNDliZDYwZTM4NGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVC
bG9jay5oCkBAIC0zOCw2ICszOCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2Rl
QmxvY2tUeXBlPgorICAgIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlw
ZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT4mIGNhY2hlZENvZGVCbG9jaykKKyAgICAgICAgOiBCYXNl
KGRlY29kZXIsIHN0cnVjdHVyZSwgY2FjaGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICB9CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRN
ZXRhZGF0YVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRN
ZXRhZGF0YVRhYmxlLmgKaW5kZXggM2UzZThkZmI0ZDViYmM0NjRmNWU2YTIzNDRjYWFjYTk5NDk0
OWVmMS4uZDk5MGNkNzhjM2VkMWE2MzlmNjQxMDQ2OGRmYTNhZWJiMDY2ZDY5YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFi
bGUuaApAQCAtMzUsNiArMzUsNyBAQCBjbGFzcyBNZXRhZGF0YVRhYmxlOwogY2xhc3MgVW5saW5r
ZWRNZXRhZGF0YVRhYmxlIHsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogICAgIGZyaWVuZCBjbGFzcyBNZXRhZGF0YVRhYmxlOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2Fj
aGVkTWV0YWRhdGFUYWJsZTsKIAogcHVibGljOgogICAgIHN0cnVjdCBMaW5raW5nRGF0YSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKaW5kZXggMGU5YzVmNWJkZGU2Yzc1NjJiNjZhMDNi
YzBhOThjODdhZGJkOTMwMi4uZTY0ZGNlNjEyNTQ3N2RkNWM1NDEyY2VkOTJiZTI1NjA0YjVmMzg0
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaApAQCAtMjksNiArMjksOSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKK3N0cnVjdCBDYWNoZWRNb2R1bGVDb2Rl
QmxvY2s7CisKIGNsYXNzIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1
YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxp
bmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAtNzQsMTEgKzc3LDE1IEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKwogICAg
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIE1vZHVsZUNvZGUsIGluZm8sIGRlYnVn
Z2VyTW9kZSkKICAgICB7CiAgICAgfQogCisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2smKTsKKwogICAgIGludCBt
X21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9
OwogCiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgKaW5kZXggYWZlMjZhZWQxYTUwM2FiMjNmZDhm
NDQ3ZjlkZWMyZGMwNmNhNTgyNi4uOWQ3ZTQzNWFmZDhjYTVmYjBhNzRlOTU1ZDM2MjU5MTFhNjI4
YWExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorc3RydWN0IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAt
NTAsMTEgKzUyLDE1IEBAIHB1YmxpYzoKICAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBs
ZXhpY2FsRGVjbGFyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25z
OyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CisKICAg
ICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAg
ICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1v
ZGUpCiAgICAgewogICAgIH0KIAorICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVy
JiwgY29uc3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jayYpOworCiAgICAgVmFyaWFibGVFbnZpcm9u
bWVudCBtX3ZhckRlY2xhcmF0aW9uczsKICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNh
bERlY2xhcmF0aW9uczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKaW5kZXggYWQ2NTM2MThiNDI4ZmNhMDZiZTA0ZGRiNjZjMGYzZDMx
ZDJiMjY0Yy4uOGU4MjU2MDI4YjEwMzdkYjJiMzA3YWNkMTdkMDViN2YzNThmNDdkMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUg
IkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQ2Fj
aGUuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAj
aW5jbHVkZSAiRGVidWdnZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZjk0NWUxNzhlNThj
NTNmMWZjMzkyNzAwZTI2NTUwOGI4ZmNkMmYyZS4uYmU5NTc1MWY3NTk3NTUyZmMyNDU4NGI2ZWI3
ODlhY2RiN2NmZjJmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNv
bXBsZXRpb24uaCIKICNpbmNsdWRlICJDb25maWdGaWxlLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1i
bGVyLmgiCkBAIC0xOTg1LDggKzE5ODYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29kZUJsb2NrKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAgIGpzY0V4
aXQoRVhJVF9TVUNDRVNTKTsKIAogI2lmIENPTVBJTEVSKE1TVkMpCkBAIC0yODQ5LDYgKzI4NTMs
OCBAQCBpbnQgcnVuSlNDKGNvbnN0IENvbW1hbmRMaW5lJiBvcHRpb25zLCBib29sIGlzV29ya2Vy
LCBjb25zdCBGdW5jJiBmdW5jKQogI2VuZGlmCiAgICAgfQogCisgICAgdm0uY29kZUNhY2hlKCkt
PndyaXRlKHZtKTsKKwogICAgIGlmIChpc1dvcmtlcikgewogICAgICAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtKTsKICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBkb24ndCB3
YW50IHRoZSB3b3JrZXIncyBtYWluCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZUNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
Q29kZS5oCmluZGV4IDMxM2NmYTQ1YWFmOTIyYjA3YjA0NWJiZWUwMzYzODU5Y2JkNGMwOWIuLjAx
MzQ5NTVkZWZkYWYxNzIxNWRiNWE5NjMzZTYwMjIzNTdiOTY3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCkBAIC0zMyw2ICszMyw4IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIFNvdXJjZUNvZGUgOiBwdWJsaWMgVW5saW5rZWRTb3VyY2VDb2Rl
IHsKKyAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRTb3VyY2VDb2RlOworCiAgICAgcHVibGlj
OgogICAgICAgICBTb3VyY2VDb2RlKCkKICAgICAgICAgICAgIDogVW5saW5rZWRTb3VyY2VDb2Rl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtl
eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKaW5kZXgg
YThlNjAzYzI2YTBiNjAzNjJhMDJkZWFjMDUxNjE2OWQ1NzU1ODAyMS4uMzg0ODEyMTdiYWYzOTM1
ZDUwMWFjMjUxNTU5YjBkNDI2OGI0ZGI4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Tb3VyY2VDb2RlS2V5LmgKQEAgLTM3LDYgKzM3LDggQEAgZW51bSBjbGFzcyBUeXBlUHJv
ZmlsZXJFbmFibGVkIHsgTm8sIFllcyB9OwogZW51bSBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVy
RW5hYmxlZCB7IE5vLCBZZXMgfTsKIAogY2xhc3MgU291cmNlQ29kZUZsYWdzIHsKKyAgICBmcmll
bmQgc3RydWN0IENhY2hlZFNvdXJjZUNvZGVLZXk7CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2Rl
RmxhZ3MoKSA9IGRlZmF1bHQ7CiAKQEAgLTcwLDYgKzcyLDggQEAgcHJpdmF0ZToKIH07CiAKIGNs
YXNzIFNvdXJjZUNvZGVLZXkgeworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkU291cmNlQ29kZUtl
eTsKKwogcHVibGljOgogICAgIFNvdXJjZUNvZGVLZXkoKQogICAgIHsKQEAgLTExNCw2ICsxMTgs
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgJiYgc3RyaW5nKCkgPT0gb3RoZXIuc3RyaW5nKCk7
CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUNvZGVLZXkmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0K
KwogICAgIHN0cnVjdCBIYXNoIHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
U291cmNlQ29kZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CiAgICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGEsIGNvbnN0IFNvdXJjZUNvZGVLZXkm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKaW5kZXggNmVjNTkwYjUzZTZjOWMzMjdlNDI0NGQwYjEx
OWIzNmQwOTZmYzgxZS4uNDkwYTg4YWE4MzFkMWNiN2FmNWZmMWE2YTcxY2UwY2E5MjY3YWYxYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNv
ZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29k
ZS5oCkBAIC0zNSw2ICszNSw5IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFVubGlu
a2VkU291cmNlQ29kZSB7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5
cGVuYW1lIENhY2hlVHlwZT4KKyAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRVbmxpbmtlZFNv
dXJjZUNvZGVTaGFwZTsKKwogICAgIHB1YmxpYzoKICAgICAgICAgVW5saW5rZWRTb3VyY2VDb2Rl
KCkKICAgICAgICAgICAgIDogbV9wcm92aWRlcigwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAppbmRleCAxMjliNWVhNmJkOWI3MjZh
MWQ5YTQwMTFlZjk2OTBmOGNjNmIwZGQzLi4zNmY5ZGRmODE3NzZjY2IwYTc2ZmVlMDhhMGE1OGMz
ODA3YTkzNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Zhcmlh
YmxlRW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Zhcmlh
YmxlRW52aXJvbm1lbnQuaApAQCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICBib29sIGlz
RXZlcnl0aGluZ0NhcHR1cmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJl
ZDsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkVmFyaWFibGVFbnZpcm9u
bWVudDsKKwogICAgIE1hcCBtX21hcDsKICAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQg
eyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44YTY2NjMzZjE0YTA3NTJmMGI2ODAyM2ZlOTUwMjk2ZDk3NjNl
ODM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCkBAIC0wLDAgKzEsMTgzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNo
ZWRUeXBlcy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5j
bHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKKyNpbmNs
dWRlICJKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3Vt
ZW50c1RhYmxlLmgiCisjaW5jbHVkZSAiU291cmNlQ29kZUtleS5oIgorI2luY2x1ZGUgIlVubGlu
a2VkRXZhbENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2su
aCIKKyNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZ0ltcGwuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgU291cmNlVHlwZUltcGwgeworICAg
IHVzaW5nIHR5cGUgPSBUOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTb3Vy
Y2VUeXBlSW1wbDxULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFQ+Ojp2
YWx1ZSAmJiAhc3RkOjppc19zYW1lPHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfLCB2b2lkPjo6dmFs
dWU+PiB7CisgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfOworCit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgU291cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJj
ZVR5cGVJbXBsPFQ+Ojp0eXBlOworCitjbGFzcyBFbmNvZGVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShFbmNvZGVyKTsKKworcHVibGljOgorICAgIEVuY29kZXIoVk0mIHZtKQorICAgICAg
ICA6IG1fdm0odm0pCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgICAgIG1fYnVm
ZmVyID0gKHVpbnQ4X3QqKWZhc3RaZXJvZWRNYWxsb2Moc19tYXhTaXplKTsKKyAgICB9CisKKyAg
ICB+RW5jb2RlcigpCisgICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisgICAgICAgICAgICBm
YXN0RnJlZShtX2J1ZmZlcik7CisgICAgfQorCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsg
fQorCisgICAgcHRyZGlmZl90IG1hbGxvY09mZnNldCh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAg
ICAgICAgbV9vZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZW9mKHZvaWQqKSwg
bV9vZmZzZXQpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX29mZnNldCAr
IHNpemUpIDwgc19tYXhTaXplKTsKKyAgICAgICAgcHRyZGlmZl90IHJlc3VsdCA9IG1fb2Zmc2V0
OworICAgICAgICBtX29mZnNldCArPSBzaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHVpbnQ4X3QqIG1hbGxvYyh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAg
cHRyZGlmZl90IG9mZnNldCA9IG1hbGxvY09mZnNldChzaXplKTsKKyAgICAgICAgcmV0dXJuIG1f
YnVmZmVyICsgb2Zmc2V0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
VCogbWFsbG9jKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPiht
YWxsb2Moc2l6ZW9mKFQpKSk7CisgICAgfQorCisgICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0
IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFkZHJlc3MpOworICAgICAgICBBU1NFUlQoYWRkciA+
PSBtX2J1ZmZlciAmJiBhZGRyIDwgbV9idWZmZXIgKyBtX29mZnNldCk7CisgICAgICAgIHJldHVy
biBhZGRyIC0gbV9idWZmZXI7CisgICAgfQorCisgICAgdm9pZCBjYWNoZVB0cihjb25zdCB2b2lk
KiBwdHIsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBtX3B0clRvT2Zmc2V0TWFw
LmFkZChwdHIsIG9mZnNldCk7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+
IG9mZnNldEZvclB0cihjb25zdCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBhdXRvIGl0ID0g
bV9wdHJUb09mZnNldE1hcC5maW5kKHB0cik7CisgICAgICAgIGlmIChpdCA9PSBtX3B0clRvT2Zm
c2V0TWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHsgaXQtPnZhbHVlIH07CisgICAgfQorCisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1
aW50OF90Piwgc2l6ZV90PiByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIE1hbGxvY1B0cjx1aW50
OF90PiBidWZmZXIgPSBhZG9wdE1hbGxvY1B0cihtX2J1ZmZlcik7CisgICAgICAgIG1fYnVmZmVy
ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBtX29mZnNldCB9
OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBzX21heFNpemUgPSAxMCAqIE1COwor
CisgICAgVk0mIG1fdm07CisgICAgdWludDhfdCogbV9idWZmZXI7CisgICAgcHRyZGlmZl90IG1f
b2Zmc2V0OworICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIHB0cmRpZmZfdD4gbV9wdHJUb09mZnNl
dE1hcDsKK307CisKK2NsYXNzIERlY29kZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERl
Y29kZXIpOworCitwdWJsaWM6CisgICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VB
ZGRyZXNzLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fYmFz
ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYmFzZUFkZHJlc3MpKQor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyNlbmRpZgorICAgIHsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIH0KKworICAgIH5EZWNvZGVyKCkKKyAgICB7
CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fZmluYWxpemVycykKKyAgICAgICAgICAgIHBh
aXIudmFsdWUoKTsKKyAgICB9CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX3ZtOyB9CisKKyAg
ICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29uc3Qgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgY29u
c3QgdWludDhfdCogYWRkciA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdHIpOworICAg
ICAgICBBU1NFUlQoYWRkciA+PSBtX2Jhc2VBZGRyZXNzICYmIGFkZHIgPCBtX2Jhc2VBZGRyZXNz
ICsgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIGFkZHIgLSBtX2Jhc2VBZGRyZXNzOworICAgIH0K
KworICAgIHZvaWQgY2FjaGVPZmZzZXQocHRyZGlmZl90IG9mZnNldCwgdm9pZCogcHRyKQorICAg
IHsKKyAgICAgICAgbV9vZmZzZXRUb1B0ck1hcC5hZGQob2Zmc2V0LCBwdHIpOworICAgIH0KKwor
ICAgIFdURjo6T3B0aW9uYWw8dm9pZCo+IHB0ckZvck9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgYXV0byBpdCA9IG1fb2Zmc2V0VG9QdHJNYXAuZmluZChvZmZzZXQpOwor
ICAgICAgICBpZiAoaXQgPT0gbV9vZmZzZXRUb1B0ck1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBhZGRGaW5hbGl6ZXIo
cHRyZGlmZl90IG9mZnNldCwgY29uc3QgRnVuY3RvciYgZm4pCisgICAgeworICAgICAgICBtX2Zp
bmFsaXplcnMuYWRkKG9mZnNldCwgZm4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWTSYgbV92
bTsKKyAgICBjb25zdCB1aW50OF90KiBtX2Jhc2VBZGRyZXNzOworI2lmbmRlZiBOREVCVUcKKyAg
ICBzaXplX3QgbV9zaXplOworI2VuZGlmCisgICAgSGFzaE1hcDxwdHJkaWZmX3QsIHZvaWQqPiBt
X29mZnNldFRvUHRyTWFwOworICAgIEhhc2hNYXA8cHRyZGlmZl90LCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4+IG1fZmluYWxpemVyczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMg
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBl
bmNvZGUoRW5jb2RlciYsIFQmIGRzdCwgY29uc3QgU291cmNlVHlwZTxUPiYgc3JjKQoreworICAg
IGRzdCA9IHNyYzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJs
ZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgVCYgZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+JiBzcmMpCit7CisgICAg
ZHN0LmVuY29kZShlbmNvZGVyLCBzcmMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZS4uLiBBcmdzPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNv
dXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVjb2RlKERlY29kZXImLCBjb25zdCBUJiBzcmMsIFNvdXJj
ZVR5cGU8VD4mIGRzdCwgQXJncy4uLikKK3sKKyAgICBkc3QgPSBzcmM7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDwh
c3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIGNvbnN0IFQmIHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uIGFyZ3MpCit7
CisgICAgc3JjLmRlY29kZShkZWNvZGVyLCBkc3QsIGFyZ3MuLi4pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNvdXJj
ZVR5cGU8VD4+Ojp2YWx1ZSwgVD4gZGVjb2RlKERlY29kZXImLCBUIHNyYykKK3sKKyAgICByZXR1
cm4gc3JjOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWUsIFNvdXJjZVR5cGU8VD4+
JiYgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIGNvbnN0IFQmIHNyYykKK3sKKyAgICByZXR1cm4g
c3JjLmRlY29kZShkZWNvZGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlLCB0eXBl
bmFtZSBEc3Q+CitzdHJ1Y3QgQ2FjaGVkT2JqZWN0IHsKKyAgICB1c2luZyBTb3VyY2VUeXBlXyA9
IFNvdXJjZTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBzaXplT2YoY29uc3QgU291cmNlJiBzb3Vy
Y2UpCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICAgICAgY29tcHV0ZU91
dE9mTGluZVNpemUoc2l6ZSwgc291cmNlKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgVCYgY2FzdChUKiBzb3VyY2Up
CisgICAgeworICAgICAgICByZXR1cm4gKnNvdXJjZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfcG9pbnRlcjxU
Pjo6dmFsdWU+PgorICAgIHN0YXRpYyBUJiBjYXN0KFQmIHNvdXJjZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzb3VyY2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBz
dGF0aWMgY29uc3QgVCYgY2FzdChjb25zdCBUKiBjb25zdCBzb3VyY2UpCisgICAgeworICAgICAg
ICByZXR1cm4gKnNvdXJjZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+PgorICAg
IHN0YXRpYyBjb25zdCBUJiBjYXN0KGNvbnN0IFQmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzb3VyY2U7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlLCB0eXBl
bmFtZSBEc3Q+CitzdHJ1Y3QgVmFyaWFibGVMZW5ndGhPYmplY3QgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFNvdXJjZSwgRHN0PiB7Citwcml2YXRlOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlm
Zl90IHNfaW52YWxpZE9mZnNldCA9IFBUUkRJRkZfTUFYOworcHVibGljOgorICAgIHB0cmRpZmZf
dCBvZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZl
cigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0ICE9IHNfaW52YWxpZE9mZnNl
dCk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih0aGlz
KSArIG9mZnNldDsKKyAgICB9CisKKyAgICB1aW50OF90KiBidWZmZXIoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG9mZnNldCAhPSBzX2ludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGhpcykgKyBvZmZzZXQ7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGJ1ZmZlcigpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oYnVmZmVyKCkpOworICAgIH0KKworICAg
IHVpbnQ4X3QqIGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIsIHNpemVfdCBzaXplKQorICAgIHsK
KyAgICAgICAgcHRyZGlmZl90IG9mZnNldE9mZnNldCA9IGVuY29kZXIub2Zmc2V0T2YoJm9mZnNl
dCk7CisgICAgICAgIHB0cmRpZmZfdCBhbGxvY2F0aW9uT2Zmc2V0ID0gZW5jb2Rlci5tYWxsb2NP
ZmZzZXQoc2l6ZSk7CisgICAgICAgIG9mZnNldCA9IGFsbG9jYXRpb25PZmZzZXQgLSBvZmZzZXRP
ZmZzZXQ7CisgICAgICAgIHJldHVybiBidWZmZXIoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQqIGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIsIHVuc2lnbmVkIHNp
emUgPSAxKQorICAgIHsKKyAgICAgICAgYWxsb2NhdGUoZW5jb2Rlciwgc2l6ZW9mKFQpICogc2l6
ZSk7CisgICAgICAgIHJldHVybiBidWZmZXI8VD4oKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBTVCA9IFNvdXJjZVR5cGU8VD4+CitzdHJ1Y3QgQ2FjaGVkUHRy
IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNUKiwgQ2FjaGVkUHRyPFQ+PiB7CisgICAg
Ym9vbCBpc0VtcHR5OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
U1QqIHNyYykKKyAgICB7CisgICAgICAgIGlzRW1wdHkgPSAhc3JjOworICAgICAgICBpZiAoaXNF
bXB0eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoV1RGOjpPcHRpb25hbDxw
dHJkaWZmX3Q+IG9mZnNldCA9IGVuY29kZXIub2Zmc2V0Rm9yUHRyKHNyYykpIHsKKyAgICAgICAg
ICAgIHRoaXMtPm9mZnNldCA9ICpvZmZzZXQgLSBlbmNvZGVyLm9mZnNldE9mKCZ0aGlzLT5vZmZz
ZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVCogY2FjaGVk
T2JqZWN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlcik7CisgICAgICAgIGNh
Y2hlZE9iamVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOworICAgICAgICBlbmNvZGVyLmNhY2hl
UHRyKHNyYywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFNUKiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwdHJkaWZmX3QgYnVmZmVyT2Zmc2V0
ID0gZGVjb2Rlci5vZmZzZXRPZih0aGlzLT5idWZmZXIoKSk7CisgICAgICAgIGlmIChXVEY6Ok9w
dGlvbmFsPHZvaWQqPiBwdHIgPSBkZWNvZGVyLnB0ckZvck9mZnNldChidWZmZXJPZmZzZXQpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U1QqPigqcHRyKTsKKworICAgICAg
ICBTVCogcHRyID0gb3BlcmF0b3ItPigpLT5kZWNvZGUoZGVjb2RlciwgYXJncy4uLik7CisgICAg
ICAgIGRlY29kZXIuY2FjaGVPZmZzZXQoYnVmZmVyT2Zmc2V0LCBwdHIpOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIFQqIG9wZXJhdG9yLT4oKQorICAgIHsKKyAgICAgICAgaWYg
KGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRo
aXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgIH0KKworICAgIGNvbnN0IFQqIG9wZXJhdG9y
LT4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNUID0gU291cmNlVHlw
ZTxUPj4KK3N0cnVjdCBDYWNoZWRSZWZQdHIgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFJlZlB0cjxT
VD4sIENhY2hlZFJlZlB0cjxUPj4geworICAgIENhY2hlZFB0cjxULCBTVD4gcHRyOworCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU1QqIHNyYykKKyAgICB7CisgICAg
ICAgIHB0ci5lbmNvZGUoZW5jb2Rlciwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8U1Q+IHNyYykKKyAgICB7CisgICAgICAgIGVu
Y29kZShlbmNvZGVyLCBzcmMuZ2V0KCkpOworICAgIH0KKworICAgIFJlZlB0cjxTVD4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTVCogZGVjb2RlZFB0ciA9
IHB0ci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGRlY29kZXIuYWRkRmluYWxpemVyKGRlY29k
ZXIub2Zmc2V0T2YocHRyLmJ1ZmZlcigpKSwgWz1dIHsgZGVyZWZJZk5vdE51bGwoZGVjb2RlZFB0
cik7IH0pOworICAgICAgICByZWZJZk5vdE51bGwoZGVjb2RlZFB0cik7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihkZWNvZGVkUHRyKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBSZWZQdHI8U1Q+JiBzcmMpIGNvbnN0CisgICAgeworICAgICAgICBzcmMgPSBk
ZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgU1QgPSBTb3VyY2VUeXBlPFQ+Pgorc3RydWN0IENhY2hlZFdyaXRlQmFycmllciA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNUPiwgQ2FjaGVkV3JpdGVCYXJyaWVyPFQ+PiB7
CisgICAgQ2FjaGVkUHRyPFQsIFNUPiBwdHI7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8U1Q+IHNyYykKKyAgICB7CisgICAgICAgIHB0ci5l
bmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8U1Q+JiBzcmMsIGNvbnN0IEpTQ2VsbCogb3duZXIp
IGNvbnN0CisgICAgeworICAgICAgICBTVCogZGVjb2RlZFB0ciA9IHB0ci5kZWNvZGUoZGVjb2Rl
cik7CisgICAgICAgIGlmIChkZWNvZGVkUHRyKQorICAgICAgICAgICAgc3JjLnNldChkZWNvZGVy
LnZtKCksIG93bmVyLCBkZWNvZGVkUHRyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgSUMgPSAwLCB0eXBlbmFtZSBPSCA9IENyYXNoT25PdmVyZmxvdz4KK3N0cnVj
dCBDYWNoZWRWZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VmVjdG9yPFNvdXJj
ZVR5cGU8VD4sIElDLCBPSD4sIENhY2hlZFZlY3RvcjxULCBJQywgT0g+PiB7CisgICAgdW5zaWdu
ZWQgc2l6ZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3Rv
cjxTb3VyY2VUeXBlPFQ+LCBJQywgT0g+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBzaXplID0g
dmVjdG9yLnNpemUoKTsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2Nh
dGU8VD4oZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGJ1ZmZlcltpXSwg
dmVjdG9yW2ldKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJQywg
T0g+JiB2ZWN0b3IsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHZlY3Rvci5y
ZXNpemVUb0ZpdChzaXplKTsKKyAgICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxh
dGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCisgICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9y
W2ldLCBhcmdzLi4uKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGc3QsIHR5cGVu
YW1lIFNuZD4KK3N0cnVjdCBDYWNoZWRQYWlyIDogcHVibGljIENhY2hlZE9iamVjdDxzdGQ6OnBh
aXI8U291cmNlVHlwZTxGc3Q+LCBTb3VyY2VUeXBlPFNuZD4+LCBDYWNoZWRQYWlyPEZzdCwgU25k
Pj4geworICAgIEZzdCBmc3Q7CisgICAgU25kIHNuZDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZzdD4sIFNvdXJjZVR5cGU8
U25kPj4mIHBhaXIpCisgICAgeworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGZzdCwg
c3RkOjpnZXQ8MD4ocGFpcikpOworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIHNuZCwg
c3RkOjpnZXQ8MT4ocGFpcikpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZzdD4sIFNvdXJjZVR5cGU8U25kPj4mIHBhaXIp
IGNvbnN0CisgICAgeworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGZzdCwgc3RkOjpn
ZXQ8MD4ocGFpcikpOworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIHNuZCwgc3RkOjpn
ZXQ8MT4ocGFpcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxTb3VyY2VU
eXBlPEtleT4+OjpIYXNoLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFNvdXJj
ZVR5cGU8S2V5Pj4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNl
VHlwZTxWYWx1ZT4+Pgorc3RydWN0IENhY2hlZEhhc2hNYXAgOiBwdWJsaWMgVmFyaWFibGVMZW5n
dGhPYmplY3Q8SGFzaE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+LCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4sIENhY2hlZEhhc2hNYXA8S2V5LCBW
YWx1ZSwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7CisKKyAgICBD
YWNoZWRWZWN0b3I8Q2FjaGVkUGFpcjxLZXksIFZhbHVlPj4gZW50cmllczsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+CisgICAgdXNpbmcgTWFwID0gSGFzaE1hcDxLLCBW
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz47CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VU
eXBlPFZhbHVlPj4mIG1hcCkKKyAgICB7CisgICAgICAgIGVudHJpZXMuc2l6ZSA9IG1hcC5zaXpl
KCk7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50cmllcyk+IGVudHJpZXNWZWN0b3Io
bWFwLnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGl0IDogbWFwKQorICAgICAgICAgICAgZW50cmllc1ZlY3RvcltpKytdID0geyBpdC5r
ZXksIGl0LnZhbHVlIH07CisgICAgICAgIGVudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNW
ZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hcDxT
b3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKSBjb25zdAorICAgIHsKKyAg
ICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShlbnRyaWVzKT4gZGVjb2RlZEVudHJpZXM7CisgICAg
ICAgIGVudHJpZXMuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRFbnRyaWVzKTsKKyAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBwYWlyIDogZGVjb2RlZEVudHJpZXMpCisgICAgICAgICAgICBtYXAuc2V0
KHN0ZDo6Z2V0PDA+KHBhaXIpLCBzdGQ6OmdldDwxPihwYWlyKSk7CisgICAgfQorfTsKKworc3Ry
dWN0IENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0
PFVuaXF1ZWRTdHJpbmdJbXBsLCBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4geworICAgIGJvb2wg
aXM4Qml0IDogMTsKKyAgICBib29sIGlzU3ltYm9sIDogMTsKKyAgICBib29sIGlzQXRvbWljIDog
MTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCisgICAgeworICAgICAgICBpc0F0b21pYyA9
IHN0cmluZy5pc0F0b21pYygpOworICAgICAgICBpc1N5bWJvbCA9IHN0cmluZy5pc1N5bWJvbCgp
OworICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29uc3RfY2FzdDxTdHJpbmdJbXBsKj4oJnN0
cmluZyk7CisgICAgICAgIGlmIChpc1N5bWJvbCkgeworICAgICAgICAgICAgU3ltYm9sSW1wbCog
c3ltYm9sID0gc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCo+KGltcGwpOworICAgICAgICAgICAgaWYg
KCFzeW1ib2wtPmlzTnVsbFN5bWJvbCgpKSB7CisgICAgICAgICAgICAgICAgSWRlbnRpZmllciB1
aWQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZlbmNvZGVyLnZtKCksIHN5bWJvbCk7CisgICAgICAg
ICAgICAgICAgaW1wbCA9IGVuY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQdWJsaWNO
YW1lKHVpZCkuc3RyaW5nKCkuaW1wbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaXM4Qml0ID0gaW1wbC0+aXM4Qml0KCk7CisgICAgICAgIGxlbmd0aCA9IGltcGwtPmxl
bmd0aCgpOworCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHVuc2lnbmVkIHNpemUgPSBsZW5ndGg7CisgICAgICAgIGNvbnN0IHZvaWQqIHBheWxv
YWQ7CisgICAgICAgIGlmIChpczhCaXQpCisgICAgICAgICAgICBwYXlsb2FkID0gaW1wbC0+Y2hh
cmFjdGVyczgoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXlsb2FkID0gaW1wbC0+
Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBzaXplICo9IDI7CisgICAgICAgIH0KKworICAg
ICAgICB1aW50OF90KiBidWZmZXIgPSB0aGlzLT5hbGxvY2F0ZShlbmNvZGVyLCBzaXplKTsKKyAg
ICAgICAgbWVtY3B5KGJ1ZmZlciwgcGF5bG9hZCwgc2l6ZSk7CisgICAgfQorCisgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgYXV0byBjcmVhdGUgPSBbJl0oY29uc3QgYXV0byogYnVmZmVyKSAtPiBVbmlxdWVkU3RyaW5n
SW1wbCogeworICAgICAgICAgICAgaWYgKCFpc1N5bWJvbCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gQXRvbWljU3RyaW5nSW1wbDo6YWRkKGJ1ZmZlciwgbGVuZ3RoKS5sZWFrUmVmKCk7CisKKyAg
ICAgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiAmU3ltYm9sSW1w
bDo6Y3JlYXRlTnVsbFN5bWJvbCgpLmxlYWtSZWYoKTsKKworICAgICAgICAgICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmRlY29kZXIudm0oKSwgYnVmZmVyLCBs
ZW5ndGgpOworICAgICAgICAgICAgU3RyaW5nIHN0ciA9IGRlY29kZXIudm0oKS5wcm9wZXJ0eU5h
bWVzLT5sb29rVXBQcml2YXRlTmFtZShpZGVudCktPnN0cmluZygpOworICAgICAgICAgICAgU3Ry
aW5nSW1wbCogaW1wbCA9IHN0ci5yZWxlYXNlSW1wbCgpLmdldCgpOworICAgICAgICAgICAgQVNT
RVJUKGltcGwtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVu
aXF1ZWRTdHJpbmdJbXBsKj4oaW1wbCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGlzOEJp
dCkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVmZmVyPExDaGFyPigpKTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZSh0aGlzLT5idWZmZXI8VUNoYXI+KCkpOworICAgIH0KK307CisK
K3N0cnVjdCBDYWNoZWRTdHJpbmdJbXBsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFN0
cmluZ0ltcGwsIENhY2hlZFN0cmluZ0ltcGw+IHsKKyAgICBDYWNoZWRVbmlxdWVkU3RyaW5nSW1w
bCB1bmlxdWVkU3RyaW5nSW1wbDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFN0cmluZ0ltcGwmIGltcGwpCisgICAgeworICAgICAgICB1bmlxdWVkU3RyaW5nSW1w
bC5lbmNvZGUoZW5jb2RlciwgaW1wbCk7CisgICAgfQorCisgICAgU3RyaW5nSW1wbCogZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdW5pcXVlZFN0
cmluZ0ltcGwuZGVjb2RlKGRlY29kZXIpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTdHJp
bmcgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U3RyaW5nLCBDYWNoZWRTdHJpbmc+IHsK
KyAgICBDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+IGltcGw7CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7
CisgICAgICAgIGltcGwuZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PFVuaXF1ZWRTdHJpbmdJ
bXBsKj4oc3RyaW5nLmltcGwoKSkpOworICAgIH0KKworICAgIFN0cmluZyBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoKFJlZlB0cjxT
dHJpbmdJbXBsPilpbXBsLmRlY29kZShkZWNvZGVyKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiBkc3QpIGNvbnN0CisgICAgeworICAgICAgICBk
c3QgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZElkZW50aWZp
ZXIgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmllciwgQ2FjaGVkSWRlbnRp
Zmllcj4geworICAgIENhY2hlZFN0cmluZyBzdHJpbmc7CisKKyAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgc3RyaW5nLmVuY29kZShlbmNvZGVyLCBpZGVudGlmaWVyLnN0cmluZygpKTsKKyAgICB9CisK
KyAgICBJZGVudGlmaWVyIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgU3RyaW5nIHN0ciA9IHN0cmluZy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChz
dHIuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcigpOworCisgICAgICAg
IHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVyLnZtKCksIChVbmlxdWVkU3RyaW5n
SW1wbCopc3RyLmltcGwoKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CisgICAgeworICAgICAgICBpZGVudCA9IGRl
Y29kZShkZWNvZGVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0
IENhY2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdURjo6T3B0aW9u
YWw8U291cmNlVHlwZTxUPj4sIENhY2hlZE9wdGlvbmFsPFQ+PiB7CisgICAgYm9vbCBpc0VtcHR5
OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpPcHRpb25h
bDxTb3VyY2VUeXBlPFQ+PiYgc291cmNlKQorICAgIHsKKyAgICAgICAgaXNFbXB0eSA9ICFzb3Vy
Y2U7CisKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAq
c291cmNlKTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+IGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7IHRoaXMt
PnRlbXBsYXRlIGJ1ZmZlcjxUPigpLT5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9CisKKyAgICB2
b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+
JiBkc3QpIGNvbnN0CisgICAgeworICAgICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAg
fQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjp1bmlxdWVf
cHRyPFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIXNvdXJjZSkK
KyAgICAgICAgICAgIGVuY29kZShlbmNvZGVyLCBXVEY6Om51bGxvcHQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbmNvZGUoZW5jb2RlciwgeyAqc291cmNlIH0pOworICAgIH0KKworICAg
IFNvdXJjZVR5cGU8VD4qIGRlY29kZUFzUHRyKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIHJldHVybiB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKS0+ZGVjb2RlKGRlY29kZXIp
OworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTaW1wbGVKdW1wVGFibGUgOiBwdWJsaWMgQ2Fj
aGVkT2JqZWN0PFVubGlua2VkU2ltcGxlSnVtcFRhYmxlLCBDYWNoZWRTaW1wbGVKdW1wVGFibGU+
IHsKKyAgICBpbnQzMl90IG1pbjsKKyAgICBDYWNoZWRWZWN0b3I8aW50MzJfdD4gYnJhbmNoT2Zm
c2V0czsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUpCisgICAgeworICAgICAgICBtaW4gPSBqdW1wVGFi
bGUubWluOworICAgICAgICBicmFuY2hPZmZzZXRzLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUu
YnJhbmNoT2Zmc2V0cyk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIGp1bXBUYWJsZS5taW4gPSBtaW47CisgICAgICAgIGJyYW5jaE9mZnNldHMuZGVjb2RlKGRl
Y29kZXIsIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2Fj
aGVkU3RyaW5nSnVtcFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSwgQ2FjaGVkU3RyaW5nSnVtcFRhYmxlPiB7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNo
ZWRSZWZQdHI8Q2FjaGVkU3RyaW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjogT2Zm
c2V0TG9jYXRpb24+IG9mZnNldFRhYmxlOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSkKKyAgICB7Cisg
ICAgICAgIG9mZnNldFRhYmxlLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUub2Zmc2V0VGFibGUp
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU3Ry
aW5nSnVtcFRhYmxlJiBqdW1wVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBvZmZzZXRUYWJs
ZS5kZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKKyAgICB9Cit9OworCitz
dHJ1Y3QgQ2FjaGVkUmFyZURhdGEgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJs
b2NrOjpSYXJlRGF0YSwgQ2FjaGVkUmFyZURhdGE+IHsKKyAgICBDYWNoZWRWZWN0b3I8VW5saW5r
ZWRIYW5kbGVySW5mbz4gZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAgICAvLyBKdW1wIFRhYmxlcwor
ICAgIENhY2hlZFZlY3RvcjxDYWNoZWRTaW1wbGVKdW1wVGFibGU+IHN3aXRjaEp1bXBUYWJsZXM7
CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKKworICAgIENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3Np
dGlvbj4gZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisKKyAgICBDYWNoZWRIYXNoTWFwPHVu
c2lnbmVkLCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Np
b25SYW5nZT4gdHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldD4gb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CisK
KworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJs
b2NrOjpSYXJlRGF0YSYgcmFyZURhdGEpCisgICAgeworICAgICAgICBleGNlcHRpb25IYW5kbGVy
cy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgICAg
IHN3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3dpdGNoSnVtcFRh
Ymxlcyk7CisgICAgICAgIHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJh
cmVEYXRhLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIGV4cHJlc3Npb25JbmZv
RmF0UG9zaXRpb25zLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX2V4cHJlc3Npb25JbmZvRmF0
UG9zaXRpb25zKTsKKyAgICAgICAgdHlwZVByb2ZpbGVySW5mb01hcC5lbmNvZGUoZW5jb2Rlciwg
cmFyZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICAgICAgb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fb3BQcm9maWxl
Q29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOworICAgIH0KKworICAgIFVubGlua2VkQ29kZUJs
b2NrOjpSYXJlRGF0YSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEqIHJhcmVEYXRhID0gbmV3IFVubGlua2Vk
Q29kZUJsb2NrOjpSYXJlRGF0YSB7IH07CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJzLmRlY29k
ZShkZWNvZGVyLCByYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgICAgIHN3aXRj
aEp1bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMp
OworICAgICAgICBzdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0
YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgZXhwcmVzc2lvbkluZm9GYXRQ
b3NpdGlvbnMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9z
aXRpb25zKTsKKyAgICAgICAgdHlwZVByb2ZpbGVySW5mb01hcC5kZWNvZGUoZGVjb2RlciwgcmFy
ZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAgIG9wUHJvZmlsZUNvbnRyb2xG
bG93Qnl0ZWNvZGVPZmZzZXRzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9vcFByb2ZpbGVD
b250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7CisgICAgICAgIHJldHVybiByYXJlRGF0YTsKKyAg
ICB9CisKK307CisKK3N0cnVjdCBDYWNoZWRCaXRWZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5n
dGhPYmplY3Q8Qml0VmVjdG9yLCBDYWNoZWRCaXRWZWN0b3I+IHsKKyAgICB1bnNpZ25lZCBzaXpl
OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQml0VmVjdG9yJiBi
aXRWZWN0b3IpCisgICAgeworICAgICAgICBzaXplID0gYml0VmVjdG9yLnNpemUoKTsKKyAgICAg
ICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7CisgICAg
ICAgIG1lbWNweShidWZmZXIsIGJpdFZlY3Rvci5iaXRzKCksIHNpemUpOworICAgIH0KKworICAg
IHZvaWQgZGVjb2RlKERlY29kZXImLCBCaXRWZWN0b3ImIGJpdFZlY3RvcikgY29uc3QKKyAgICB7
CisgICAgICAgIGJpdFZlY3Rvci5lbnN1cmVTaXplKHNpemUpOworICAgICAgICBtZW1jcHkoYml0
VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVmZmVyKCksIHNpemUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxU
Pjo6SGFzaD4KK3N0cnVjdCBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxIYXNo
U2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+LCBDYWNoZWRIYXNoU2V0PFQsIEhhc2hBcmc+PiB7
CisgICAgQ2FjaGVkVmVjdG9yPFQ+IGVudHJpZXM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+JiBzZXQpCisg
ICAgeworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKGVudHJpZXMpPiBlbnRyaWVzVmVjdG9y
KHNldC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBpdGVtIDogc2V0KQorICAgICAgICAgICAgZW50cmllc1ZlY3RvcltpKytdID0gaXRl
bTsKKyAgICAgICAgZW50cmllcy5lbmNvZGUoZW5jb2RlciwgZW50cmllc1ZlY3Rvcik7CisgICAg
fQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldDxTb3VyY2VUeXBl
PFQ+LCBIYXNoQXJnPiYgc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNs
dHlwZShlbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKKyAgICAgICAgZW50cmllcy5kZWNvZGUoZGVj
b2RlciwgZW50cmllc1ZlY3Rvcik7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGVu
dHJpZXNWZWN0b3IpCisgICAgICAgICAgICBzZXQuYWRkKGl0ZW0pOworICAgIH0KK307CisKK3N0
cnVjdCBDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1YmxpYyBWYXJpYWJsZUxl
bmd0aE9iamVjdDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSwgQ2FjaGVkQ29uc3RhbnRJZGVu
dGlmaWVyU2V0RW50cnk+IHsKKyAgICB1bnNpZ25lZCBjb25zdGFudDsKKyAgICBDYWNoZWRIYXNo
U2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXBI
YXNoPiBzZXQ7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb25z
dGFudElkZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpCisgICAgeworICAgICAgICBjb25zdGFudCA9
IHN0ZDo6Z2V0PDE+KGVudHJ5KTsKKyAgICAgICAgc2V0LmVuY29kZShlbmNvZGVyLCBzdGQ6Omdl
dDwwPihlbnRyeSkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBlbnRyeSkgY29uc3QKKyAgICB7CisgICAgICAg
IHN0ZDo6Z2V0PDE+KGVudHJ5KSA9IGNvbnN0YW50OworICAgICAgICBzZXQuZGVjb2RlKGRlY29k
ZXIsIHN0ZDo6Z2V0PDA+KGVudHJ5KSk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFZhcmlh
YmxlRW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFZhcmlhYmxlRW52aXJvbm1lbnQs
IENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ+IHsKKworICAgIGJvb2wgaXNFdmVyeXRoaW5nQ2Fw
dHVyZWQ7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmlu
Z0ltcGw+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBIYXNo
VHJhaXRzPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+LCBWYXJpYWJsZUVudmlyb25tZW50RW50
cnlIYXNoVHJhaXRzPiBtYXA7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCisgICAgeworICAgICAgICBpc0V2ZXJ5dGhp
bmdDYXB0dXJlZCA9IGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkOworICAgICAgICBtYXAuZW5j
b2RlKGVuY29kZXIsIGVudi5tX21hcCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52KSBjb25zdAorICAgIHsKKyAgICAg
ICAgZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgPSBpc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKKyAg
ICAgICAgbWFwLmRlY29kZShkZWNvZGVyLCBlbnYubV9tYXApOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNUID0gU291cmNlVHlwZTxUPj4KK3N0cnVjdCBDYWNo
ZWRBcnJheSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTVCosIENhY2hlZEFycmF5PFQs
IFNUPj4geworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNUKiBhcnJh
eSwgdW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIFQqIGRzdCA9IHRoaXMtPnRlbXBsYXRl
IGFsbG9jYXRlPFQ+KGVuY29kZXIsIHNpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBkc3Rb
aV0sIGFycmF5W2ldKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgor
ICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNUKiBhcnJheSwgdW5zaWduZWQgc2l6
ZSwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgVCogYnVmZmVyID0g
dGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZl
cltpXSwgYXJyYXlbaV0sIGFyZ3MuLi4pOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTY29w
ZWRBcmd1bWVudHNUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U2NvcGVkQXJndW1lbnRzVGFi
bGUsIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiB7CisgICAgdWludDMyX3QgbGVuZ3RoOwor
ICAgIENhY2hlZEFycmF5PFNjb3BlT2Zmc2V0PiBhcmd1bWVudHM7CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTY29wZWRBcmd1bWVudHNUYWJsZSYgc2NvcGVkQXJn
dW1lbnRzVGFibGUpCisgICAgeworICAgICAgICBsZW5ndGggPSBzY29wZWRBcmd1bWVudHNUYWJs
ZS5tX2xlbmd0aDsKKyAgICAgICAgYXJndW1lbnRzLmVuY29kZShlbmNvZGVyLCBzY29wZWRBcmd1
bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBTY29w
ZWRBcmd1bWVudHNUYWJsZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1lbnRzVGFibGUgPSBTY29w
ZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSwgbGVuZ3RoKTsKKyAgICAgICAg
YXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS0+bV9hcmd1bWVu
dHMuZ2V0KCksIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBzY29wZWRBcmd1bWVudHNUYWJsZTsK
KyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSA6IHB1YmxpYyBDYWNo
ZWRPYmplY3Q8U3ltYm9sVGFibGVFbnRyeSwgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeT4geworICAg
IGludHB0cl90IGJpdHM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU3ltYm9s
VGFibGVFbnRyeSYgc3ltYm9sVGFibGVFbnRyeSkKKyAgICB7CisgICAgICAgIGJpdHMgPSBzeW1i
b2xUYWJsZUVudHJ5Lm1fYml0cyB8IFN5bWJvbFRhYmxlRW50cnk6OlNsaW1GbGFnOworICAgIH0K
KworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBTeW1ib2xUYWJsZUVudHJ5JiBzeW1ib2xUYWJs
ZUVudHJ5KSBjb25zdAorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMgPSBi
aXRzOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTeW1ib2xUYWJsZSA6IHB1YmxpYyBDYWNo
ZWRPYmplY3Q8U3ltYm9sVGFibGUsIENhY2hlZFN5bWJvbFRhYmxlPiB7CisgICAgQ2FjaGVkSGFz
aE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+LCBDYWNoZWRTeW1ib2xU
YWJsZUVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8VW5pcXVlZFN0
cmluZ0ltcGw+PiwgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHM+IG1hcDsKKyAgICBTY29wZU9m
ZnNldCBtYXhTY29wZU9mZnNldDsKKyAgICB1bnNpZ25lZCB1c2VzTm9uU3RyaWN0RXZhbCA6IDE7
CisgICAgdW5zaWduZWQgbmVzdGVkTGV4aWNhbFNjb3BlIDogMTsKKyAgICB1bnNpZ25lZCBzY29w
ZVR5cGUgOiAzOworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGNhY2hlZCB0aGlzIGV2ZW50
dWFsbHk/CisgICAgLy8gQ2FjaGVkUHRyPFN5bWJvbFRhYmxlUmFyZURhdGE+IHJhcmVEYXRhOwor
ICAgIENhY2hlZFB0cjxDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZT4gYXJndW1lbnRzOworCisg
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFzeW1ib2xUYWJsZS5tX3JhcmVEYXRhKTsK
KyAgICAgICAgbWFwLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX21hcCk7CisgICAgICAg
IG1heFNjb3BlT2Zmc2V0ID0gc3ltYm9sVGFibGUubV9tYXhTY29wZU9mZnNldDsKKyAgICAgICAg
dXNlc05vblN0cmljdEV2YWwgPSBzeW1ib2xUYWJsZS5tX3VzZXNOb25TdHJpY3RFdmFsOworICAg
ICAgICBuZXN0ZWRMZXhpY2FsU2NvcGUgPSBzeW1ib2xUYWJsZS5tX25lc3RlZExleGljYWxTY29w
ZTsKKyAgICAgICAgc2NvcGVUeXBlID0gc3ltYm9sVGFibGUubV9zY29wZVR5cGU7CisgICAgICAg
IGFyZ3VtZW50cy5lbmNvZGUoZW5jb2Rlciwgc3ltYm9sVGFibGUubV9hcmd1bWVudHMuZ2V0KCkp
OworICAgIH0KKworICAgIFN5bWJvbFRhYmxlKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxl
OjpjcmVhdGUoZGVjb2Rlci52bSgpKTsKKyAgICAgICAgbWFwLmRlY29kZShkZWNvZGVyLCBzeW1i
b2xUYWJsZS0+bV9tYXApOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9tYXhTY29wZU9mZnNldCA9
IG1heFNjb3BlT2Zmc2V0OworICAgICAgICBzeW1ib2xUYWJsZS0+bV91c2VzTm9uU3RyaWN0RXZh
bCA9IHVzZXNOb25TdHJpY3RFdmFsOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9uZXN0ZWRMZXhp
Y2FsU2NvcGUgPSBuZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX3Nj
b3BlVHlwZSA9IHNjb3BlVHlwZTsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNjb3Bl
ZEFyZ3VtZW50c1RhYmxlID0gYXJndW1lbnRzLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYg
KHNjb3BlZEFyZ3VtZW50c1RhYmxlKQorICAgICAgICAgICAgc3ltYm9sVGFibGUtPm1fYXJndW1l
bnRzLnNldChkZWNvZGVyLnZtKCksIHN5bWJvbFRhYmxlLCBzY29wZWRBcmd1bWVudHNUYWJsZSk7
CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVk
SlNWYWx1ZTsKK3N0cnVjdCBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHkgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5LCBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHk+IHsK
KyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAg
ICB1bmlvbiB7CisgICAgICAgIENhY2hlZEFycmF5PGRvdWJsZT4gY2FjaGVkRG91YmxlczsKKyAg
ICAgICAgQ2FjaGVkQXJyYXk8Q2FjaGVkSlNWYWx1ZSwgV3JpdGVCYXJyaWVyPFVua25vd24+PiBj
YWNoZWRWYWx1ZXM7CisgICAgfTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IEpTSW1tdXRhYmxlQnV0dGVyZmx5JiBpbW11dGFibGVCdXR0ZXJmbHkpCisgICAgeworICAgICAg
ICBsZW5ndGggPSBpbW11dGFibGVCdXR0ZXJmbHkubGVuZ3RoKCk7CisgICAgICAgIGluZGV4aW5n
VHlwZSA9IGltbXV0YWJsZUJ1dHRlcmZseS5pbmRleGluZ01vZGUoKTsgLy8gdGhpcyBpcyBjb25m
dXNpbmcsIG5vdCBzdXJlIHdoeSB3ZSBoYXZlIHRvIHVzZSBpbmRleGluZ01vZGUgdnMgaW5kZXhp
bmdUeXBlCisgICAgICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgICAg
IGNhY2hlZERvdWJsZXMuZW5jb2RlKGVuY29kZXIsIGltbXV0YWJsZUJ1dHRlcmZseS50b0J1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBsZW5ndGgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjYWNoZWRWYWx1ZXMuZW5jb2RlKGVuY29kZXIsIGltbXV0YWJsZUJ1dHRl
cmZseS50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBsZW5ndGgpOworICAgIH0K
KworICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJm
bHkgPSBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y3JlYXRlKGRlY29kZXIudm0oKSwgaW5kZXhpbmdU
eXBlLCBsZW5ndGgpOworICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAg
ICAgICAgICBjYWNoZWREb3VibGVzLmRlY29kZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHkt
PnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIGxlbmd0aCwgaW1tdXRh
YmxlQnV0dGVyZmx5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FjaGVkVmFsdWVzLmRl
Y29kZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXMoKS5kYXRhKCksIGxlbmd0aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJu
IGltbXV0YWJsZUJ1dHRlcmZseTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkUmVnRXhwIDog
cHVibGljIENhY2hlZE9iamVjdDxSZWdFeHAsIENhY2hlZFJlZ0V4cD4geworICAgIENhY2hlZFN0
cmluZyBwYXR0ZXJuU3RyaW5nOworICAgIFJlZ0V4cEZsYWdzIGZsYWdzOworCisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVnRXhwJiByZWdFeHApCisgICAgeworICAg
ICAgICBwYXR0ZXJuU3RyaW5nLmVuY29kZShlbmNvZGVyLCByZWdFeHAubV9wYXR0ZXJuU3RyaW5n
KTsKKyAgICAgICAgZmxhZ3MgPSByZWdFeHAubV9mbGFnczsKKyAgICB9CisKKyAgICBSZWdFeHAq
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nIHBh
dHRlcm4geyBwYXR0ZXJuU3RyaW5nLmRlY29kZShkZWNvZGVyKSB9OworICAgICAgICByZXR1cm4g
UmVnRXhwOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgfQorfTsK
Kworc3RydWN0IENhY2hlZFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA6IHB1YmxpYyBDYWNoZWRP
YmplY3Q8VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLCBDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2Ny
aXB0b3I+IHsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkU3RyaW5nLCA0PiByYXdTdHJpbmdzOwor
ICAgIENhY2hlZFZlY3RvcjxDYWNoZWRPcHRpb25hbDxDYWNoZWRTdHJpbmc+LCA0PiBjb29rZWRT
dHJpbmdzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGVtcGxh
dGVPYmplY3REZXNjcmlwdG9yJiB0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IpCisgICAgeworICAg
ICAgICByYXdTdHJpbmdzLmVuY29kZShlbmNvZGVyLCB0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Iu
cmF3U3RyaW5ncygpKTsKKyAgICAgICAgY29va2VkU3RyaW5ncy5lbmNvZGUoZW5jb2RlciwgdGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yLmNvb2tlZFN0cmluZ3MoKSk7CisgICAgfQorCisgICAgUmVm
PFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0
CisgICAgeworICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OlN0cmluZ1ZlY3RvciBk
ZWNvZGVkUmF3U3RyaW5nczsKKyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpPcHRp
b25hbFN0cmluZ1ZlY3RvciBkZWNvZGVkQ29va2VkU3RyaW5nczsKKyAgICAgICAgcmF3U3RyaW5n
cy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZFJhd1N0cmluZ3MpOworICAgICAgICBjb29rZWRTdHJp
bmdzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkQ29va2VkU3RyaW5ncyk7CisgICAgICAgIHJldHVy
biBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShXVEZNb3ZlKGRlY29kZWRSYXdTdHJp
bmdzKSwgV1RGTW92ZShkZWNvZGVkQ29va2VkU3RyaW5ncykpOworICAgIH0KK307CisKK3N0cnVj
dCBDYWNoZWRCaWdJbnQgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQsIENh
Y2hlZEJpZ0ludD4geworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBib29sIHNpZ247CisKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0JpZ0ludCYgYmlnSW50KQorICAgIHsK
KyAgICAgICAgbGVuZ3RoID0gYmlnSW50Lmxlbmd0aCgpOworICAgICAgICBzaWduID0gYmlnSW50
LnNpZ24oKTsKKworICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBsZW5ndGg7
CisgICAgICAgIHRoaXMtPmFsbG9jYXRlKGVuY29kZXIsIHNpemUpOworICAgICAgICBtZW1jcHko
dGhpcy0+YnVmZmVyKCksIGJpZ0ludC5kYXRhU3RvcmFnZSgpLCBzaXplKTsKKyAgICB9CisKKyAg
ICBKU0JpZ0ludCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQo
ZGVjb2Rlci52bSgpLCBsZW5ndGgpOworICAgICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7Cisg
ICAgICAgIG1lbWNweShiaWdJbnQtPmRhdGFTdG9yYWdlKCksIHRoaXMtPmJ1ZmZlcigpLCBzaXpl
b2YoSlNCaWdJbnQ6OkRpZ2l0KSAqIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBiaWdJbnQ7Cisg
ICAgfQorfTsKKworc3RydWN0IENhY2hlZEpTVmFsdWUgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhP
YmplY3Q8V3JpdGVCYXJyaWVyPFVua25vd24+LCBDYWNoZWRKU1ZhbHVlPiB7CisgICAgZW51bSBj
bGFzcyBFbmNvZGVkVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBKU1ZhbHVlLAorICAgICAgICBT
eW1ib2xUYWJsZSwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBJbW11dGFibGVCdXR0ZXJmbHks
CisgICAgICAgIFJlZ0V4cCwKKyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLAorICAg
ICAgICBCaWdJbnQsCisgICAgfTsKKworICAgIEVuY29kZWRUeXBlIHR5cGU7CisKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4gdmFs
dWUpCisgICAgeworICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZS5nZXQoKTsKKworICAgICAgICBp
ZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNv
ZGVkVHlwZTo6SlNWYWx1ZTsKKyAgICAgICAgICAgICp0aGlzLT5hbGxvY2F0ZTxFbmNvZGVkSlNW
YWx1ZT4oZW5jb2RlcikgPSBKU1ZhbHVlOjplbmNvZGUodik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2LmFzQ2VsbCgpOworICAgICAg
ICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IGNlbGwtPmNsYXNzSW5mbyhlbmNvZGVyLnZt
KCkpOworCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gU3ltYm9sVGFibGU6OmluZm8oKSkgewor
ICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpTeW1ib2xUYWJsZTsKKyAgICAgICAgICAg
IHRoaXMtPmFsbG9jYXRlPENhY2hlZFN5bWJvbFRhYmxlPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29k
ZXIsICpqc0Nhc3Q8U3ltYm9sVGFibGUqPihjZWxsKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09IEpTU3RyaW5nOjppbmZvKCkpIHsK
KyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6U3RyaW5nOworICAgICAgICAgICAgU3Ry
aW5nSW1wbCogaW1wbCA9IGFzU3RyaW5nKGNlbGwpLT50cnlHZXRWYWx1ZSgpLmltcGwoKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaW1wbCB8fCAhaW1wbC0+aXNTeW1ib2woKSk7CisgICAgICAgICAg
ICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4oZW5jb2RlciktPmVuY29k
ZShlbmNvZGVyLCAqaW1wbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY2xhc3NJbmZvID09IEpTSW1tdXRhYmxlQnV0dGVyZmx5OjppbmZvKCkpIHsKKyAg
ICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OworICAgICAg
ICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PihlbmNvZGVyKS0+
ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09
IFJlZ0V4cDo6aW5mbygpKSB7CisgICAgICAgICAgICB0eXBlID0gRW5jb2RlZFR5cGU6OlJlZ0V4
cDsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFJlZ0V4cD4oZW5jb2RlciktPmVu
Y29kZShlbmNvZGVyLCAqanNDYXN0PFJlZ0V4cCo+KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gSlNUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3I6OmluZm8oKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNo
ZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwganND
YXN0PEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yKj4oY2VsbCktPmRlc2NyaXB0b3IoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xhc3NJbmZvID09
IEpTQmlnSW50OjppbmZvKCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlwZTo6Qmln
SW50OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkQmlnSW50PihlbmNvZGVyKS0+
ZW5jb2RlKGVuY29kZXIsICpqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWUsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBKU1ZhbHVlIHY7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVu
Y29kZWRUeXBlOjpKU1ZhbHVlOgorICAgICAgICAgICAgdiA9IEpTVmFsdWU6OmRlY29kZSgqdGhp
cy0+YnVmZmVyPEVuY29kZWRKU1ZhbHVlPigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVuY29kZWRUeXBlOjpTeW1ib2xUYWJsZToKKyAgICAgICAgICAgIHYgPSB0aGlzLT5i
dWZmZXI8Q2FjaGVkU3ltYm9sVGFibGU+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsID0gdGhpcy0+YnVmZmVyPENhY2hlZFVuaXF1ZWRTdHJp
bmdJbXBsPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICB2ID0gSlNTdHJpbmc6OmNy
ZWF0ZShkZWNvZGVyLnZtKCksIGFkb3B0UmVmKCppbXBsKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpJbW11dGFibGVCdXR0ZXJmbHk6
CisgICAgICAgICAgICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZEltbXV0YWJsZUJ1dHRlcmZseT4o
KS0+ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5j
b2RlZFR5cGU6OlJlZ0V4cDoKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkUmVn
RXhwPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFbmNvZGVkVHlwZTo6VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOgorICAgICAgICAgICAgdiA9
IEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUoZGVjb2Rlci52bSgpLCB0aGlzLT5i
dWZmZXI8Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPigpLT5kZWNvZGUoZGVjb2Rlcikp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkJpZ0ludDoK
KyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkQmlnSW50PigpLT5kZWNvZGUoZGVj
b2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUu
c2V0KGRlY29kZXIudm0oKSwgb3duZXIsIHYpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRJ
bnN0cnVjdGlvblN0cmVhbSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SW5zdHJ1Y3Rpb25TdHJlYW0s
IENhY2hlZEluc3RydWN0aW9uU3RyZWFtPiB7CisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3QsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBpbnN0cnVjdGlvbnM7CisKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgc3RyZWFtKQorICAgIHsK
KyAgICAgICAgaW5zdHJ1Y3Rpb25zLmVuY29kZShlbmNvZGVyLCBzdHJlYW0ubV9pbnN0cnVjdGlv
bnMpOworICAgIH0KKworICAgIEluc3RydWN0aW9uU3RyZWFtKiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4gaW5zdHJ1Y3Rpb25zVmVjdG9yOworICAgICAgICBpbnN0cnVjdGlvbnMuZGVj
b2RlKGRlY29kZXIsIGluc3RydWN0aW9uc1ZlY3Rvcik7CisgICAgICAgIHJldHVybiBuZXcgSW5z
dHJ1Y3Rpb25TdHJlYW0oV1RGTW92ZShpbnN0cnVjdGlvbnNWZWN0b3IpKTsKKyAgICB9Cit9Owor
CitzdHJ1Y3QgQ2FjaGVkTWV0YWRhdGFUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5r
ZWRNZXRhZGF0YVRhYmxlLCBDYWNoZWRNZXRhZGF0YVRhYmxlPiB7CisgICAgYm9vbCBoYXNNZXRh
ZGF0YTsKKyAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBVbmxpbmtlZE1ldGFkYXRhVGFibGU6OnNf
b2Zmc2V0VGFibGVFbnRyaWVzPiBtZXRhZGF0YTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
LCBjb25zdCBVbmxpbmtlZE1ldGFkYXRhVGFibGUmIG1ldGFkYXRhVGFibGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobWV0YWRhdGFUYWJsZS5tX2lzRmluYWxpemVkKTsKKyAgICAgICAgaGFzTWV0
YWRhdGEgPSBtZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGE7CisgICAgICAgIGlmICghaGFzTWV0
YWRhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IFVu
bGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM7IGktLTspCisgICAgICAg
ICAgICBtZXRhZGF0YVtpXSA9IG1ldGFkYXRhVGFibGUuYnVmZmVyKClbaV07CisgICAgfQorCisg
ICAgdm9pZCBkZWNvZGUoRGVjb2RlciYsIFVubGlua2VkTWV0YWRhdGFUYWJsZSYgbWV0YWRhdGFU
YWJsZSkgY29uc3QKKyAgICB7CisgICAgICAgIG1ldGFkYXRhVGFibGUubV9pc0ZpbmFsaXplZCA9
IHRydWU7CisgICAgICAgIG1ldGFkYXRhVGFibGUubV9pc0xpbmtlZCA9IGZhbHNlOworICAgICAg
ICBtZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGEgPSBoYXNNZXRhZGF0YTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmll
czsgaS0tOykKKyAgICAgICAgICAgIG1ldGFkYXRhVGFibGUuYnVmZmVyKClbaV0gPSBtZXRhZGF0
YVtpXTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU291cmNlT3JpZ2luIDogcHVibGljIENh
Y2hlZE9iamVjdDxTb3VyY2VPcmlnaW4sIENhY2hlZFNvdXJjZU9yaWdpbj4geworICAgIENhY2hl
ZFN0cmluZyBzdHJpbmc7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKKyAgICB7CisgICAgICAgIHN0cmluZy5lbmNv
ZGUoZW5jb2Rlciwgc291cmNlT3JpZ2luLnN0cmluZygpKTsKKyAgICB9CisKKyAgICBTb3VyY2VP
cmlnaW4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU291cmNlT3JpZ2luIHsgc3RyaW5nLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KK307CisK
K3N0cnVjdCBDYWNoZWRUZXh0UG9zaXRpb24gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFRleHRQb3Np
dGlvbiwgQ2FjaGVkVGV4dFBvc2l0aW9uPiB7CisgICAgaW50IGxpbmU7CisgICAgaW50IGNvbHVt
bjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9u
KQorICAgIHsKKyAgICAgICAgbGluZSA9IHRleHRQb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50
KCk7CisgICAgICAgIGNvbHVtbiA9IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQo
KTsKKyAgICB9CisKKyAgICBUZXh0UG9zaXRpb24gZGVjb2RlKERlY29kZXImKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbiB7IE9yZGluYWxOdW1iZXI6OmZyb21aZXJv
QmFzZWRJbnQobGluZSksIE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29sdW1uKSB9
OworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTVCwgdHlwZW5hbWUgQ2FjaGVkVHlw
ZT4KK3N0cnVjdCBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlIDogcHVibGljIENhY2hlZE9iamVj
dDxTVCwgQ2FjaGVkVHlwZT4geworICAgIGJvb2wgdmFsaWRhdGVkIDogMTsKKyAgICBDYWNoZWRT
b3VyY2VPcmlnaW4gc291cmNlT3JpZ2luOworICAgIENhY2hlZFN0cmluZyB1cmw7CisgICAgQ2Fj
aGVkU3RyaW5nIHNvdXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRTdHJpbmcgc291cmNlTWFw
cGluZ1VSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbjsK
KworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3ZpZGVy
JiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIHZhbGlkYXRlZCA9IHNvdXJjZVByb3Zp
ZGVyLmlzVmFsaWQoKTsKKyAgICAgICAgc291cmNlT3JpZ2luLmVuY29kZShlbmNvZGVyLCBzb3Vy
Y2VQcm92aWRlci5zb3VyY2VPcmlnaW4oKSk7CisgICAgICAgIHVybC5lbmNvZGUoZW5jb2Rlciwg
c291cmNlUHJvdmlkZXIudXJsKCkpOworICAgICAgICBzb3VyY2VVUkxEaXJlY3RpdmUuZW5jb2Rl
KGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZVVSTCgpKTsKKyAgICAgICAgc291cmNlTWFw
cGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlTWFw
cGluZ1VSTCgpKTsKKyAgICAgICAgc3RhcnRQb3NpdGlvbi5lbmNvZGUoZW5jb2Rlciwgc291cmNl
UHJvdmlkZXIuc3RhcnRQb3NpdGlvbigpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAodmFsaWRhdGVkKQorICAgICAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0
VmFsaWQoKTsKKyAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNlVVJMRGlyZWN0aXZlKHNv
dXJjZVVSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOworICAgICAgICBzb3VyY2VQcm92aWRl
ci5zZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUu
ZGVjb2RlKGRlY29kZXIpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nU291cmNl
UHJvdmlkZXIgOiBwdWJsaWMgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQ
cm92aWRlciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0g
Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRlciwgQ2FjaGVkU3Ry
aW5nU291cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZTsKKworICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVyJiBz
b3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3Vy
Y2VQcm92aWRlcik7CisgICAgICAgIHNvdXJjZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlk
ZXIuc291cmNlKCkudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgU3RyaW5nU291cmNlUHJvdmlk
ZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGUgc291
cmNlVHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBkZWNvZGVkU291cmNlID0gc291
cmNlLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRTb3VyY2VP
cmlnaW4gPSBzb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOworICAgICAgICBTdHJpbmcgZGVj
b2RlZFVSTCA9IHVybC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFRleHRQb3NpdGlvbiBkZWNv
ZGVkU3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24uZGVjb2RlKGRlY29kZXIpOworCisgICAg
ICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3Vy
Y2VQcm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVS
TChVUkwoKSwgZGVjb2RlZFVSTCksIGRlY29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsK
KyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKyAg
ICAgICAgcmV0dXJuICZzb3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CisgICAgfQorfTsKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKK3N0cnVjdCBDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3Zp
ZGVyIDogcHVibGljIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8V2ViQXNzZW1ibHlTb3VyY2VQ
cm92aWRlciwgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4geworICAgIHVzaW5nIEJh
c2UgPSBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIs
IENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAg
IEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIGRhdGEuZW5j
b2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLmRhdGEoKSk7CisgICAgfQorCisgICAgV2ViQXNz
ZW1ibHlTb3VyY2VQcm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGVjb2RlZERhdGE7CisgICAgICAgIFNvdXJjZU9y
aWdpbiBkZWNvZGVkU291cmNlT3JpZ2luID0gc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgU3RyaW5nIGRlY29kZWRVUkwgPSB1cmwuZGVjb2RlKGRlY29kZXIpOworCisgICAg
ICAgIGRhdGEuZGVjb2RlKGRlY29kZXIsIGRlY29kZWREYXRhKTsKKworICAgICAgICBSZWY8V2Vi
QXNzZW1ibHlTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBXZWJBc3NlbWJseVNvdXJj
ZVByb3ZpZGVyOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkRGF0YSksIGRlY29kZWRTb3VyY2VPcmln
aW4sIFVSTChVUkwoKSwgZGVjb2RlZFVSTCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rl
ciwgc291cmNlUHJvdmlkZXIuZ2V0KCkpOworCisgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlk
ZXIubGVha1JlZigpOworICAgIH0KK307CisjZW5kaWYKKworc3RydWN0IENhY2hlZFNvdXJjZVBy
b3ZpZGVyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZVByb3ZpZGVyLCBDYWNo
ZWRTb3VyY2VQcm92aWRlcj4geworICAgIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VU
eXBlOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJv
dmlkZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgc291cmNlVHlwZSA9IHNvdXJj
ZVByb3ZpZGVyLnNvdXJjZVR5cGUoKTsKKyAgICAgICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7Cisg
ICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBj
YXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgdGhpcy0+
YWxsb2NhdGU8Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5j
b2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmdTb3VyY2VQcm92aWRlciY+KHNvdXJj
ZVByb3ZpZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseToKKyAg
ICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+
KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXZWJBc3Nl
bWJseVNvdXJjZVByb3ZpZGVyJj4oc291cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgICAgIGJyZWFr
OworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgU291cmNlUHJvdmlkZXIqIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChzb3Vy
Y2VUeXBlKSB7CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFt
OgorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj4oKS0+
ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVR5cGUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5OgorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVy
PigpLT5kZWNvZGUoZGVjb2Rlcik7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTVCwgdHlwZW5hbWUgQ2FjaGVUeXBlPgorc3RydWN0IENhY2hl
ZFVubGlua2VkU291cmNlQ29kZVNoYXBlIDogcHVibGljIENhY2hlZE9iamVjdDxTVCwgIENhY2hl
VHlwZT4geworICAgIENhY2hlZFB0cjxDYWNoZWRTb3VyY2VQcm92aWRlcj4gcHJvdmlkZXI7Cisg
ICAgaW50IHN0YXJ0T2Zmc2V0OworICAgIGludCBlbmRPZmZzZXQ7CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUp
CisgICAgeworICAgICAgICBwcm92aWRlci5lbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZS5tX3By
b3ZpZGVyLmdldCgpKTsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBzb3VyY2VDb2RlLnN0YXJ0T2Zm
c2V0KCk7CisgICAgICAgIGVuZE9mZnNldCA9IHNvdXJjZUNvZGUuZW5kT2Zmc2V0KCk7CisgICAg
fQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVW5saW5rZWRTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgc291cmNlQ29kZS5tX3Byb3ZpZGVy
ID0gcHJvdmlkZXIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBzb3VyY2VDb2RlLm1fc3RhcnRP
ZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICAgICAgc291cmNlQ29kZS5tX2VuZE9mZnNldCA9IGVu
ZE9mZnNldDsKKyAgICB9Cit9OworCisKK3N0cnVjdCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGUg
OiBwdWJsaWMgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8VW5saW5rZWRTb3VyY2VDb2Rl
LCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGU+IHsgfTsKKworc3RydWN0IENhY2hlZFNvdXJjZUNv
ZGUgOiBwdWJsaWMgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8U291cmNlQ29kZSwgQ2Fj
aGVkU291cmNlQ29kZT4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRVbmxpbmtlZFNvdXJjZUNv
ZGVTaGFwZTxTb3VyY2VDb2RlLCBDYWNoZWRTb3VyY2VDb2RlPjsKKworICAgIGludCBmaXJzdExp
bmU7CisgICAgaW50IHN0YXJ0Q29sdW1uOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIEJhc2U6
OmVuY29kZShlbmNvZGVyLCBzb3VyY2VDb2RlKTsKKyAgICAgICAgZmlyc3RMaW5lID0gc291cmNl
Q29kZS5maXJzdExpbmUoKS56ZXJvQmFzZWRJbnQoKTsKKyAgICAgICAgc3RhcnRDb2x1bW4gPSBz
b3VyY2VDb2RlLnN0YXJ0Q29sdW1uKCkuemVyb0Jhc2VkSW50KCk7CisgICAgfQorCisgICAgdm9p
ZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlQ29kZSYgc291cmNlQ29kZSkgY29uc3QK
KyAgICB7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VDb2RlKTsKKyAgICAg
ICAgc291cmNlQ29kZS5tX2ZpcnN0TGluZSA9IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJ
bnQoZmlyc3RMaW5lKTsKKyAgICAgICAgc291cmNlQ29kZS5tX3N0YXJ0Q29sdW1uID0gT3JkaW5h
bE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChzdGFydENvbHVtbik7CisgICAgfQorfTsKKworc3Ry
dWN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUsIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZT4geworCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlJik7
CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGRlY29kZShEZWNvZGVyJikgY29uc3Q7
CisKKyAgICB1bnNpZ25lZCBmaXJzdExpbmVPZmZzZXQ7CisgICAgdW5zaWduZWQgbGluZUNvdW50
OworICAgIHVuc2lnbmVkIHVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7CisgICAgdW5zaWduZWQg
dW5saW5rZWRCb2R5U3RhcnRDb2x1bW47CisgICAgdW5zaWduZWQgdW5saW5rZWRCb2R5RW5kQ29s
dW1uOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0
aDsKKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgdHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdFbmRPZmZz
ZXQ7CisgICAgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQ7CisgICAgQ29kZUZlYXR1cmVzIGZlYXR1
cmVzOworICAgIFNvdXJjZVBhcnNlTW9kZSBzb3VyY2VQYXJzZU1vZGU7CisgICAgdW5zaWduZWQg
aXNJblN0cmljdENvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIGhhc0NhcHR1cmVkVmFyaWFibGVz
IDogMTsKKyAgICB1bnNpZ25lZCBpc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWduZWQg
aXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgOiAxOworICAgIHVuc2lnbmVkIGNvbnN0
cnVjdEFiaWxpdHk6IDE7CisgICAgdW5zaWduZWQgY29uc3RydWN0b3JLaW5kIDogMjsKKyAgICB1
bnNpZ25lZCBmdW5jdGlvbk1vZGUgOiAyOyAvLyBGdW5jdGlvbk1vZGUKKyAgICB1bnNpZ25lZCBz
Y3JpcHRNb2RlOiAxOyAvLyBKU1BhcnNlclNjcmlwdE1vZGUKKyAgICB1bnNpZ25lZCBzdXBlckJp
bmRpbmcgOiAxOworICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZTogMjsKKworICAgIENh
Y2hlZFNvdXJjZUNvZGUgY2xhc3NTb3VyY2U7CisKKyAgICBDYWNoZWRJZGVudGlmaWVyIG5hbWU7
CisgICAgQ2FjaGVkSWRlbnRpZmllciBlY21hTmFtZTsKKyAgICBDYWNoZWRJZGVudGlmaWVyIGlu
ZmVycmVkTmFtZTsKKworICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgcGFyZW50U2NvcGVU
RFpWYXJpYWJsZXM7CisKKyAgICBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2Rl
QmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IHVubGlua2VkQ29kZUJsb2NrRm9yQ2Fs
bDsKKyAgICBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s+IHVubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0OworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJs
b2NrVHlwZT4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PENv
ZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+IHsKKyAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2smKTsKKyAgICB2b2lkIGRlY29kZShEZWNvZGVy
JiwgVW5saW5rZWRDb2RlQmxvY2smKSBjb25zdDsKKworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlz
UmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXI7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyOworCisgICAgdW5zaWduZWQgdXNlc0V2YWwg
OiAxOworICAgIHVuc2lnbmVkIGlzU3RyaWN0TW9kZSA6IDE7CisgICAgdW5zaWduZWQgaXNDb25z
dHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOworICAg
IHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICB1bnNpZ25lZCBzdXBlckJpbmRp
bmcgOiAxOworICAgIHVuc2lnbmVkIHNjcmlwdE1vZGU6IDE7CisgICAgdW5zaWduZWQgaXNBcnJv
d0Z1bmN0aW9uQ29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgaXNDbGFzc0NvbnRleHQgOiAxOwor
ICAgIHVuc2lnbmVkIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOworICAgIHVu
c2lnbmVkIGNvbnN0cnVjdG9yS2luZCA6IDI7CisgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRU
eXBlIDogMjsKKyAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUgOiAyOworICAgIHVuc2lnbmVk
IGhhc1RhaWxDYWxscyA6IDE7CisKKyAgICB1bnNpZ25lZCBsaW5lQ291bnQ7CisgICAgdW5zaWdu
ZWQgZW5kQ29sdW1uOworCisgICAgaW50IG51bVZhcnM7CisgICAgaW50IG51bUNhbGxlZUxvY2Fs
czsKKyAgICBpbnQgbnVtUGFyYW1ldGVyczsKKworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlczsK
KyAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlOworICAgIENvZGVUeXBlIGNvZGVUeXBlOwor
CisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGlua1RpbWVDb25zdGFudENvdW50PiBsaW5rVGlt
ZUNvbnN0YW50czsKKyAgICBDYWNoZWRNZXRhZGF0YVRhYmxlIG1ldGFkYXRhOworCisgICAgQ2Fj
aGVkT3B0aW9uYWw8Q2FjaGVkUmFyZURhdGE+IHJhcmVEYXRhOworCisgICAgQ2FjaGVkU3RyaW5n
IHNvdXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRTdHJpbmcgc291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZTsKKworICAgIENhY2hlZFB0cjxDYWNoZWRJbnN0cnVjdGlvblN0cmVhbT4gaW5zdHJ1
Y3Rpb25zOworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBqdW1w
VGFyZ2V0czsKKyAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZEpTVmFsdWU+
IGNvbnN0YW50UmVnaXN0ZXJzOworICAgIENhY2hlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24+IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKKyAgICBDYWNoZWRWZWN0
b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gZXhwcmVzc2lvbkluZm87CisgICAgQ2FjaGVkSGFzaE1h
cDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+IG91dE9mTGluZUp1bXBUYXJnZXRzOwor
CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBjb25z
dGFudElkZW50aWZpZXJTZXRzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVyPiBp
ZGVudGlmaWVyczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkQml0VmVjdG9yPiBiaXRWZWN0b3Jz
OworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlPj4gZnVuY3Rpb25EZWNsczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkV3JpdGVCYXJy
aWVyPENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IGZ1bmN0aW9uRXhwcnM7Cit9OworCitzdHJ1
Y3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrLCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdXNpbmcg
QmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2ssIENhY2hlZFBy
b2dyYW1Db2RlQmxvY2s+OworICAgIHVzaW5nIEJhc2U6OmVuY29kZTsKKworICAgIENhY2hlZFZh
cmlhYmxlRW52aXJvbm1lbnQgdmFyRGVjbGFyYXRpb25zOworICAgIENhY2hlZFZhcmlhYmxlRW52
aXJvbm1lbnQgbGV4aWNhbERlY2xhcmF0aW9uczsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayYgY29kZUJsb2NrKQorICAg
IHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgICAgIHZh
ckRlY2xhcmF0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fdmFyRGVjbGFyYXRpb25z
KTsKKyAgICAgICAgbGV4aWNhbERlY2xhcmF0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2Nr
Lm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7CisgICAgfQorCisgICAgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAgIGNvZGVCbG9jay0+
ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29k
ZXIsICpjb2RlQmxvY2spOworICAgICAgICB2YXJEZWNsYXJhdGlvbnMuZGVjb2RlKGRlY29kZXIs
IGNvZGVCbG9jay0+bV92YXJEZWNsYXJhdGlvbnMpOworICAgICAgICBsZXhpY2FsRGVjbGFyYXRp
b25zLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7Cisg
ICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZE1vZHVs
ZUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNlID0gQ2Fj
aGVkQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaywgQ2FjaGVkTW9kdWxl
Q29kZUJsb2NrPjsKKyAgICB1c2luZyBCYXNlOjplbmNvZGU7CisKKyAgICBpbnQgbW9kdWxlRW52
aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2Rl
QmxvY2spOworICAgICAgICBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdp
c3Rlck9mZnNldCA9IGNvZGVCbG9jay5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25z
dGFudFJlZ2lzdGVyT2Zmc2V0OworICAgIH0KKworICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4oZGVjb2Rlci52bSgp
LmhlYXApKSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOwor
ICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAg
IEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgY29kZUJsb2NrLT5t
X21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0ID0gbW9k
dWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7CisgICAgICAg
IHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEV2YWxDb2RlQmxv
Y2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9jaywgQ2FjaGVk
RXZhbENvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5r
ZWRFdmFsQ29kZUJsb2NrLCBDYWNoZWRFdmFsQ29kZUJsb2NrPjsKKyAgICB1c2luZyBCYXNlOjpl
bmNvZGU7CisKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSWRlbnRpZmllciwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IHZhcmlhYmxlczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSWRlbnRpZmll
ciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzOwor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrKTsKKyAgICAgICAgdmFyaWFibGVzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV92YXJpYWJsZXMpOworICAgICAgICBmdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcy5lbmNvZGUo
ZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMpOworICAgIH0K
KworICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNv
bnN0CisgICAgeworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRXZhbENvZGVCbG9jaz4oZGVjb2Rlci52
bSgpLmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAg
ICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6
OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgdmFyaWFibGVzLmRlY29kZShk
ZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFyaWFibGVzKTsKKyAgICAgICAgZnVuY3Rpb25Ib2lzdGlu
Z0NhbmRpZGF0ZXMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV9mdW5jdGlvbkhvaXN0aW5n
Q2FuZGlkYXRlcyk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorfTsKKworc3Ry
dWN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrLCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jaz4geworICAgIHVz
aW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaywgQ2Fj
aGVkRnVuY3Rpb25Db2RlQmxvY2s+OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAg
ICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgfQorCisgICAgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPihkZWNvZGVy
LnZtKCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOwor
ICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAg
IEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGNvZGVC
bG9jazsKKyAgICB9Cit9OworCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2Fj
aGVkRnVuY3Rpb25Db2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rl
ciwgZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IGNhY2hlZENvZGVCbG9jaykKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBD
YWNoZWRDb2RlQmxvY2tUeXBlSW1wbDsKKworZW51bSBDYWNoZWRDb2RlQmxvY2tUYWcgeworICAg
IENhY2hlZFByb2dyYW1Db2RlQmxvY2tUYWcsCisgICAgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFn
LAorICAgIENhY2hlZEV2YWxDb2RlQmxvY2tUYWcsCit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3Qg
Q2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAg
dXNpbmcgdHlwZSA9IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBDYWNoZWRDb2RlQmxvY2tUYWcgdGFnID0gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzsKK307
CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBlID0gQ2FjaGVkTW9kdWxlQ29k
ZUJsb2NrOworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENh
Y2hlZE1vZHVsZUNvZGVCbG9ja1RhZzsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRD
b2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBl
ID0gQ2FjaGVkRXZhbENvZGVCbG9jazsKKyAgICBzdGF0aWMgY29uc3RleHByIENhY2hlZENvZGVC
bG9ja1RhZyB0YWcgPSBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3VzaW5nIENhY2hlZENvZGVCbG9ja1R5cGUgPSB0eXBlbmFtZSBDYWNoZWRDb2Rl
QmxvY2tUeXBlSW1wbDxUPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgVW5saW5rZWRD
b2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29k
ZUJsb2NrVHlwZT4mIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rlci52bSgpLCBz
dHJ1Y3R1cmUpCisgICAgLCBtX2luc3RydWN0aW9ucyhjYWNoZWRDb2RlQmxvY2suaW5zdHJ1Y3Rp
b25zLmRlY29kZShkZWNvZGVyKSkKKyAgICAsIG1fbGl2ZW5lc3MobnVsbHB0cikKKyAgICAsIG1f
dGhpc1JlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay50aGlzUmVnaXN0ZXIpCisgICAgLCBtX3Njb3Bl
UmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnNjb3BlUmVnaXN0ZXIpCisgICAgLCBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay5nbG9iYWxPYmplY3RSZWdpc3RlcikKKworICAg
ICwgbV9zb3VyY2VVUkxEaXJlY3RpdmUoY2FjaGVkQ29kZUJsb2NrLnNvdXJjZVVSTERpcmVjdGl2
ZS5kZWNvZGUoZGVjb2RlcikpCisgICAgLCBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoY2Fj
aGVkQ29kZUJsb2NrLnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKQor
CisgICAgLCBtX3VzZXNFdmFsKGNhY2hlZENvZGVCbG9jay51c2VzRXZhbCkKKyAgICAsIG1faXNT
dHJpY3RNb2RlKGNhY2hlZENvZGVCbG9jay5pc1N0cmljdE1vZGUpCisgICAgLCBtX2lzQ29uc3Ry
dWN0b3IoY2FjaGVkQ29kZUJsb2NrLmlzQ29uc3RydWN0b3IpCisgICAgLCBtX2hhc0NhcHR1cmVk
VmFyaWFibGVzKGNhY2hlZENvZGVCbG9jay5oYXNDYXB0dXJlZFZhcmlhYmxlcykKKyAgICAsIG1f
aXNCdWlsdGluRnVuY3Rpb24oY2FjaGVkQ29kZUJsb2NrLmlzQnVpbHRpbkZ1bmN0aW9uKQorICAg
ICwgbV9zdXBlckJpbmRpbmcoY2FjaGVkQ29kZUJsb2NrLnN1cGVyQmluZGluZykKKyAgICAsIG1f
c2NyaXB0TW9kZShjYWNoZWRDb2RlQmxvY2suc2NyaXB0TW9kZSkKKyAgICAsIG1faXNBcnJvd0Z1
bmN0aW9uQ29udGV4dChjYWNoZWRDb2RlQmxvY2suaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCkKKyAg
ICAsIG1faXNDbGFzc0NvbnRleHQoY2FjaGVkQ29kZUJsb2NrLmlzQ2xhc3NDb250ZXh0KQorICAg
ICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKGNhY2hlZENvZGVCbG9jay53YXND
b21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2Fj
aGVkQ29kZUJsb2NrLmNvbnN0cnVjdG9yS2luZCkKKyAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBl
KGNhY2hlZENvZGVCbG9jay5kZXJpdmVkQ29udGV4dFR5cGUpCisgICAgLCBtX2V2YWxDb250ZXh0
VHlwZShjYWNoZWRDb2RlQmxvY2suZXZhbENvbnRleHRUeXBlKQorICAgICwgbV9oYXNUYWlsQ2Fs
bHMoY2FjaGVkQ29kZUJsb2NrLmhhc1RhaWxDYWxscykKKyAgICAsIG1fbGluZUNvdW50KGNhY2hl
ZENvZGVCbG9jay5saW5lQ291bnQpCisgICAgLCBtX2VuZENvbHVtbihjYWNoZWRDb2RlQmxvY2su
ZW5kQ29sdW1uKQorICAgICwgbV9udW1WYXJzKGNhY2hlZENvZGVCbG9jay5udW1WYXJzKQorICAg
ICwgbV9udW1DYWxsZWVMb2NhbHMoY2FjaGVkQ29kZUJsb2NrLm51bUNhbGxlZUxvY2FscykKKyAg
ICAsIG1fbnVtUGFyYW1ldGVycyhjYWNoZWRDb2RlQmxvY2subnVtUGFyYW1ldGVycykKKyAgICAs
IG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKQorICAgICwgbV9wYXJzZU1vZGUo
Y2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSkKKyAgICAsIG1fY29kZVR5cGUoY2FjaGVkQ29kZUJs
b2NrLmNvZGVUeXBlKQorICAgICwgbV9yYXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURhdGEu
ZGVjb2RlQXNQdHIoZGVjb2RlcikpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQg
Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgVW5saW5rZWRDb2RlQmxvY2smIGNvZGVCbG9jaykgY29uc3QK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGktLTspCisg
ICAgICAgIGNvZGVCbG9jay5tX2xpbmtUaW1lQ29uc3RhbnRzW2ldID0gbGlua1RpbWVDb25zdGFu
dHNbaV07CisKKyAgICBtZXRhZGF0YS5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fbWV0YWRh
dGEpOworICAgIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyLCBjb2Rl
QmxvY2subV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk7CisgICAgY29uc3RhbnRSZWdpc3Rl
cnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50UmVnaXN0ZXJzLCAmY29kZUJs
b2NrKTsKKyAgICBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uZGVjb2RlKGRlY29k
ZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAg
ZXhwcmVzc2lvbkluZm8uZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2V4cHJlc3Npb25JbmZv
KTsKKyAgICBvdXRPZkxpbmVKdW1wVGFyZ2V0cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1f
b3V0T2ZMaW5lSnVtcFRhcmdldHMpOworICAgIGp1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBj
b2RlQmxvY2subV9qdW1wVGFyZ2V0cyk7CisgICAgY29uc3RhbnRJZGVudGlmaWVyU2V0cy5kZWNv
ZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRJZGVudGlmaWVyU2V0cyk7CisgICAgaWRl
bnRpZmllcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2lkZW50aWZpZXJzKTsKKyAgICBi
aXRWZWN0b3JzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0b3JzKTsKKyAgICBm
dW5jdGlvbkRlY2xzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkRlY2xzLCAm
Y29kZUJsb2NrKTsKKyAgICBmdW5jdGlvbkV4cHJzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2su
bV9mdW5jdGlvbkV4cHJzLCAmY29kZUJsb2NrKTsKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiBkZWNv
ZGVyLCBjb25zdCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAg
OiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKworQUxXQVlTX0lOTElORSBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2smIGNhY2hlZENv
ZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQor
CitBTFdBWVNfSU5MSU5FIFVubGlua2VkRXZhbENvZGVCbG9jazo6VW5saW5rZWRFdmFsQ29kZUJs
b2NrKERlY29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hlZEV2YWxDb2RlQmxvY2smIGNhY2hlZENv
ZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkRXZhbENv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUmIGV4ZWN1dGFibGUpCit7Cisg
ICAgZmlyc3RMaW5lT2Zmc2V0ID0gZXhlY3V0YWJsZS5tX2ZpcnN0TGluZU9mZnNldDsKKyAgICBs
aW5lQ291bnQgPSBleGVjdXRhYmxlLm1fbGluZUNvdW50OworICAgIHVubGlua2VkRnVuY3Rpb25O
YW1lU3RhcnQgPSBleGVjdXRhYmxlLm1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKKyAgICB1
bmxpbmtlZEJvZHlTdGFydENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEJvZHlTdGFydENv
bHVtbjsKKyAgICB1bmxpbmtlZEJvZHlFbmRDb2x1bW4gPSBleGVjdXRhYmxlLm1fdW5saW5rZWRC
b2R5RW5kQ29sdW1uOworICAgIHN0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3N0YXJ0T2Zmc2V0
OworICAgIHNvdXJjZUxlbmd0aCA9IGV4ZWN1dGFibGUubV9zb3VyY2VMZW5ndGg7CisgICAgcGFy
YW1ldGVyc1N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3BhcmFtZXRlcnNTdGFydE9mZnNldDsK
KyAgICB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGlu
Z1N0YXJ0T2Zmc2V0OworICAgIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBleGVjdXRhYmxlLm1f
dHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKKyAgICBwYXJhbWV0ZXJDb3VudCA9IGV4ZWN1dGFibGUu
bV9wYXJhbWV0ZXJDb3VudDsKKworICAgIGZlYXR1cmVzID0gZXhlY3V0YWJsZS5tX2ZlYXR1cmVz
OworICAgIHNvdXJjZVBhcnNlTW9kZSA9IGV4ZWN1dGFibGUubV9zb3VyY2VQYXJzZU1vZGU7CisK
KyAgICBpc0luU3RyaWN0Q29udGV4dCA9IGV4ZWN1dGFibGUubV9pc0luU3RyaWN0Q29udGV4dDsK
KyAgICBoYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGV4ZWN1dGFibGUubV9oYXNDYXB0dXJlZFZhcmlh
YmxlczsKKyAgICBpc0J1aWx0aW5GdW5jdGlvbiA9IGV4ZWN1dGFibGUubV9pc0J1aWx0aW5GdW5j
dGlvbjsKKyAgICBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGV4ZWN1dGFibGUu
bV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcjsKKyAgICBjb25zdHJ1Y3RBYmlsaXR5
ID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdEFiaWxpdHk7CisgICAgY29uc3RydWN0b3JLaW5kID0g
ZXhlY3V0YWJsZS5tX2NvbnN0cnVjdG9yS2luZDsKKyAgICBmdW5jdGlvbk1vZGUgPSBleGVjdXRh
YmxlLm1fZnVuY3Rpb25Nb2RlOworICAgIHNjcmlwdE1vZGUgPSBleGVjdXRhYmxlLm1fc2NyaXB0
TW9kZTsKKyAgICBzdXBlckJpbmRpbmcgPSBleGVjdXRhYmxlLm1fc3VwZXJCaW5kaW5nOworICAg
IGRlcml2ZWRDb250ZXh0VHlwZSA9IGV4ZWN1dGFibGUubV9kZXJpdmVkQ29udGV4dFR5cGU7CisK
KyAgICBjbGFzc1NvdXJjZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX2NsYXNzU291cmNl
KTsKKworICAgIG5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubmFtZSgpKTsKKyAgICBl
Y21hTmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5lY21hTmFtZSgpKTsKKyAgICBpbmZl
cnJlZE5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUuaW5mZXJyZWROYW1lKCkpOworCisg
ICAgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUucGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMoKSk7CisKKyAgICB1bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwu
ZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwpOwor
ICAgIHVubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmVuY29kZShlbmNvZGVyLCBleGVjdXRh
YmxlLm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworfQorCitBTFdBWVNfSU5MSU5F
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAoreworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQg
ZW52OworICAgIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLmRlY29kZShkZWNvZGVyLCBlbnYpOwor
CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgp
LmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBlbnYsICp0aGlzKTsK
KyAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworCisgICAgY2xh
c3NTb3VyY2UuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fY2xhc3NTb3VyY2UpOworICAg
IHVubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV91
bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwsIGV4ZWN1dGFibGUpOworICAgIHVubGlua2VkQ29kZUJs
b2NrRm9yQ29uc3RydWN0LmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX3VubGlua2VkQ29k
ZUJsb2NrRm9yQ29uc3RydWN0LCBleGVjdXRhYmxlKTsKKworICAgIHJldHVybiBleGVjdXRhYmxl
OworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVudmlyb25tZW50
JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxl
JiBjYWNoZWRFeGVjdXRhYmxlKQorICAgIDogQmFzZShkZWNvZGVyLnZtKCksIGRlY29kZXIudm0o
KS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fZmly
c3RMaW5lT2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUuZmlyc3RMaW5lT2Zmc2V0KQorICAgICwgbV9s
aW5lQ291bnQoY2FjaGVkRXhlY3V0YWJsZS5saW5lQ291bnQpCisgICAgLCBtX3VubGlua2VkRnVu
Y3Rpb25OYW1lU3RhcnQoY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0
KQorICAgICwgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbihjYWNoZWRFeGVjdXRhYmxlLnVubGlu
a2VkQm9keVN0YXJ0Q29sdW1uKQorICAgICwgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW4oY2FjaGVk
RXhlY3V0YWJsZS51bmxpbmtlZEJvZHlFbmRDb2x1bW4pCisgICAgLCBtX3N0YXJ0T2Zmc2V0KGNh
Y2hlZEV4ZWN1dGFibGUuc3RhcnRPZmZzZXQpCisgICAgLCBtX3NvdXJjZUxlbmd0aChjYWNoZWRF
eGVjdXRhYmxlLnNvdXJjZUxlbmd0aCkKKyAgICAsIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KGNh
Y2hlZEV4ZWN1dGFibGUucGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KQorICAgICwgbV90eXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQp
CisgICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJv
ZmlsaW5nRW5kT2Zmc2V0KQorICAgICwgbV9wYXJhbWV0ZXJDb3VudChjYWNoZWRFeGVjdXRhYmxl
LnBhcmFtZXRlckNvdW50KQorICAgICwgbV9mZWF0dXJlcyhjYWNoZWRFeGVjdXRhYmxlLmZlYXR1
cmVzKQorICAgICwgbV9zb3VyY2VQYXJzZU1vZGUoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VQYXJz
ZU1vZGUpCisgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KGNhY2hlZEV4ZWN1dGFibGUuaXNJblN0
cmljdENvbnRleHQpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGNhY2hlZEV4ZWN1dGFi
bGUuaGFzQ2FwdHVyZWRWYXJpYWJsZXMpCisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hl
ZEV4ZWN1dGFibGUuaXNCdWlsdGluRnVuY3Rpb24pCisgICAgLCBtX2lzQnVpbHRpbkRlZmF1bHRD
bGFzc0NvbnN0cnVjdG9yKGNhY2hlZEV4ZWN1dGFibGUuaXNCdWlsdGluRGVmYXVsdENsYXNzQ29u
c3RydWN0b3IpCisgICAgLCBtX2NvbnN0cnVjdEFiaWxpdHkoY2FjaGVkRXhlY3V0YWJsZS5jb25z
dHJ1Y3RBYmlsaXR5KQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVkRXhlY3V0YWJsZS5j
b25zdHJ1Y3RvcktpbmQpCisgICAgLCBtX2Z1bmN0aW9uTW9kZShjYWNoZWRFeGVjdXRhYmxlLmZ1
bmN0aW9uTW9kZSkKKyAgICAsIG1fc2NyaXB0TW9kZShjYWNoZWRFeGVjdXRhYmxlLnNjcmlwdE1v
ZGUpCisgICAgLCBtX3N1cGVyQmluZGluZyhjYWNoZWRFeGVjdXRhYmxlLnN1cGVyQmluZGluZykK
KyAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNhY2hlZEV4ZWN1dGFibGUuZGVyaXZlZENvbnRl
eHRUeXBlKQorCisgICAgLCBtX25hbWUoY2FjaGVkRXhlY3V0YWJsZS5uYW1lLmRlY29kZShkZWNv
ZGVyKSkKKyAgICAsIG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0YWJsZS5lY21hTmFtZS5kZWNvZGUo
ZGVjb2RlcikpCisgICAgLCBtX2luZmVycmVkTmFtZShjYWNoZWRFeGVjdXRhYmxlLmluZmVycmVk
TmFtZS5kZWNvZGUoZGVjb2RlcikpCisKKyAgICAsIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMo
ZGVjb2Rlci52bSgpLm1fY29tcGFjdFZhcmlhYmxlTWFwLT5nZXQocGFyZW50U2NvcGVURFpWYXJp
YWJsZXMpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFt
ZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9j
azxDb2RlQmxvY2tUeXBlLCBDYWNoZWRDb2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJiBjb2RlQmxvY2spCit7CisgICAgdGhpc1Jl
Z2lzdGVyID0gY29kZUJsb2NrLm1fdGhpc1JlZ2lzdGVyOworICAgIHNjb3BlUmVnaXN0ZXIgPSBj
b2RlQmxvY2subV9zY29wZVJlZ2lzdGVyOworICAgIGdsb2JhbE9iamVjdFJlZ2lzdGVyID0gY29k
ZUJsb2NrLm1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisgICAgdXNlc0V2YWwgPSBjb2RlQmxvY2su
bV91c2VzRXZhbDsKKyAgICBpc1N0cmljdE1vZGUgPSBjb2RlQmxvY2subV9pc1N0cmljdE1vZGU7
CisgICAgaXNDb25zdHJ1Y3RvciA9IGNvZGVCbG9jay5tX2lzQ29uc3RydWN0b3I7CisgICAgaGFz
Q2FwdHVyZWRWYXJpYWJsZXMgPSBjb2RlQmxvY2subV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAg
ICBpc0J1aWx0aW5GdW5jdGlvbiA9IGNvZGVCbG9jay5tX2lzQnVpbHRpbkZ1bmN0aW9uOworICAg
IHN1cGVyQmluZGluZyA9IGNvZGVCbG9jay5tX3N1cGVyQmluZGluZzsKKyAgICBzY3JpcHRNb2Rl
ID0gY29kZUJsb2NrLm1fc2NyaXB0TW9kZTsKKyAgICBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID0g
Y29kZUJsb2NrLm1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dDsKKyAgICBpc0NsYXNzQ29udGV4dCA9
IGNvZGVCbG9jay5tX2lzQ2xhc3NDb250ZXh0OworICAgIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2lu
Z09wY29kZXMgPSBjb2RlQmxvY2subV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOwor
ICAgIGNvbnN0cnVjdG9yS2luZCA9IGNvZGVCbG9jay5tX2NvbnN0cnVjdG9yS2luZDsKKyAgICBk
ZXJpdmVkQ29udGV4dFR5cGUgPSBjb2RlQmxvY2subV9kZXJpdmVkQ29udGV4dFR5cGU7CisgICAg
ZXZhbENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZXZhbENvbnRleHRUeXBlOworICAgIGhhc1Rh
aWxDYWxscyA9IGNvZGVCbG9jay5tX2hhc1RhaWxDYWxsczsKKyAgICBsaW5lQ291bnQgPSBjb2Rl
QmxvY2subV9saW5lQ291bnQ7CisgICAgZW5kQ29sdW1uID0gY29kZUJsb2NrLm1fZW5kQ29sdW1u
OworICAgIG51bVZhcnMgPSBjb2RlQmxvY2subV9udW1WYXJzOworICAgIG51bUNhbGxlZUxvY2Fs
cyA9IGNvZGVCbG9jay5tX251bUNhbGxlZUxvY2FsczsKKyAgICBudW1QYXJhbWV0ZXJzID0gY29k
ZUJsb2NrLm1fbnVtUGFyYW1ldGVyczsKKyAgICBmZWF0dXJlcyA9IGNvZGVCbG9jay5tX2ZlYXR1
cmVzOworICAgIHBhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKKyAgICBjb2RlVHlw
ZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1Rp
bWVDb25zdGFudENvdW50OyBpLS07KQorICAgICAgICBsaW5rVGltZUNvbnN0YW50c1tpXSA9IGNv
ZGVCbG9jay5tX2xpbmtUaW1lQ29uc3RhbnRzW2ldOworCisgICAgbWV0YWRhdGEuZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhKTsKKyAgICByYXJlRGF0YS5lbmNvZGUoZW5jb2Rl
ciwgY29kZUJsb2NrLm1fcmFyZURhdGEpOworCisgICAgc291cmNlVVJMRGlyZWN0aXZlLmVuY29k
ZShlbmNvZGVyLCBjb2RlQmxvY2subV9zb3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsKKyAgICBz
b3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9zb3Vy
Y2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsKKworICAgIGluc3RydWN0aW9ucy5lbmNvZGUoZW5jb2Rl
ciwgY29kZUJsb2NrLm1faW5zdHJ1Y3Rpb25zLmdldCgpKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbnMpOworICAgIGNvbnN0YW50UmVnaXN0ZXJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24pOworICAgIGV4cHJlc3Npb25JbmZvLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9leHByZXNzaW9uSW5mbyk7CisgICAganVtcFRhcmdldHMuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBvdXRPZkxpbmVKdW1wVGFyZ2V0cy5lbmNvZGUo
ZW5jb2RlciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOworCisgICAgY29uc3Rh
bnRJZGVudGlmaWVyU2V0cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRJZGVu
dGlmaWVyU2V0cyk7CisgICAgaWRlbnRpZmllcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X2lkZW50aWZpZXJzKTsKKyAgICBiaXRWZWN0b3JzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9iaXRWZWN0b3JzKTsKKyAgICBmdW5jdGlvbkRlY2xzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9mdW5jdGlvbkRlY2xzKTsKKyAgICBmdW5jdGlvbkV4cHJzLmVuY29kZShlbmNvZGVyLCBj
b2RlQmxvY2subV9mdW5jdGlvbkV4cHJzKTsKK30KKworc3RydWN0IENhY2hlZFNvdXJjZUNvZGVL
ZXkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZUNvZGVLZXksIENhY2hlZFNvdXJjZUNvZGVL
ZXk+IHsKKyAgICBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGUgc291cmNlQ29kZTsKKyAgICBDYWNo
ZWRTdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBmbGFnczsKKyAgICB1bnNpZ25lZCBoYXNoOwor
ICAgIGludCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQor
ICAgIHsKKyAgICAgICAgc291cmNlQ29kZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fc291cmNlQ29k
ZSk7CisgICAgICAgIG5hbWUuZW5jb2RlKGVuY29kZXIsIGtleS5tX25hbWUpOworICAgICAgICBm
bGFncyA9IGtleS5tX2ZsYWdzLm1fZmxhZ3M7CisgICAgICAgIGhhc2ggPSBrZXkuaGFzaCgpOwor
ICAgICAgICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0ga2V5Lm1f
ZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsKKyAgICB9CisKKyAgICB2
b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlS2V5JiBrZXkpIGNvbnN0Cisg
ICAgeworICAgICAgICBzb3VyY2VDb2RlLmRlY29kZShkZWNvZGVyLCBrZXkubV9zb3VyY2VDb2Rl
KTsKKyAgICAgICAgbmFtZS5kZWNvZGUoZGVjb2Rlciwga2V5Lm1fbmFtZSk7CisgICAgICAgIGtl
eS5tX2ZsYWdzLm1fZmxhZ3MgPSBmbGFnczsKKyAgICAgICAga2V5Lm1faGFzaCA9IGhhc2g7Cisg
ICAgICAgIGtleS5tX2Z1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBm
dW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAgIH0KK307CisKK3N0
cnVjdCBHZW5lcmljQ2FjaGVFbnRyeSB7CisgICAgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZzsKKwor
ICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtlZENvZGVCbG9jayo+IGRlY29kZShE
ZWNvZGVyJikgY29uc3Q7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9j
a1R5cGU+CitzdHJ1Y3QgQ2FjaGVFbnRyeSA6IHB1YmxpYyBHZW5lcmljQ2FjaGVFbnRyeSB7Cisg
ICAgQ2FjaGVkU291cmNlQ29kZUtleSBrZXk7CisgICAgQ2FjaGVkUHRyPENhY2hlZENvZGVCbG9j
a1R5cGU8VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4gY29kZUJsb2NrOworCisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2Rlciwgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIGNvbnN0IFVubGlu
a2VkQ29kZUJsb2NrVHlwZSo+IHBhaXIpCisgICAgeworICAgICAgICB0YWcgPSBDYWNoZWRDb2Rl
QmxvY2tUeXBlSW1wbDxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp0YWc7CisgICAgICAgIGtleS5l
bmNvZGUoZW5jb2RlciwgcGFpci5maXJzdCk7CisgICAgICAgIGNvZGVCbG9jay5lbmNvZGUoZW5j
b2RlciwgcGFpci5zZWNvbmQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgR2VuZXJp
Y0NhY2hlRW50cnk7CisKKyAgICBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBTb3VyY2VDb2RlS2V5IGRlY29kZWRLZXk7CisgICAgICAgIGtleS5kZWNvZGUoZGVjb2Rlciwg
ZGVjb2RlZEtleSk7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUoZGVjb2RlZEtleSksIGNvZGVC
bG9jay5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9Cit9OworCitzdGQ6OnBhaXI8U291cmNlQ29k
ZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBHZW5lcmljQ2FjaGVFbnRyeTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0YWcpIHsKKyAgICBjYXNlIENhY2hl
ZFByb2dyYW1Db2RlQmxvY2tUYWc6CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IENhY2hlRW50cnk8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUo
ZGVjb2Rlcik7CisgICAgY2FzZSBDYWNoZWRNb2R1bGVDb2RlQmxvY2tUYWc6CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgY2FzZSBDYWNoZWRF
dmFsQ29kZUJsb2NrVGFnOgorICAgICAgICAvLyBXZSBkbyBub3QgY2FjaGUgZXZhbCBjb2RlIGJs
b2NrcworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyNpZiBD
T01QSUxFUihNU1ZDKQorICAgIC8vIFdpdGhvdXQgdGhpcywgTVNWQyB3aWxsIGNvbXBsYWluIHRo
YXQgdGhpcyBwYXRoIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLgorICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRFdmFsQ29kZUJsb2NrPio+KHRoaXMp
LT5kZWNvZGUoZGVjb2Rlcik7CisjZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlPgordm9pZCBlbmNvZGVDb2RlQmxvY2soRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIGF1dG8qIGVudHJ5ID0gZW5jb2Rlci50ZW1wbGF0ZSBtYWxsb2M8Q2FjaGVF
bnRyeTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+PigpOworICAgIGVudHJ5LT5lbmNvZGUoZW5jb2Rl
ciwgIHsga2V5LCBqc0Nhc3Q8Y29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY29kZUJsb2Nr
KSB9KTsKK30KKworc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVD
b2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8g
PSBjb2RlQmxvY2stPmNsYXNzSW5mbyh2bSk7CisKKyAgICBFbmNvZGVyIGVuY29kZXIodm0pOwor
ICAgIGlmIChjbGFzc0luZm8gPT0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisg
ICAgICAgIGVuY29kZUNvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KGVuY29kZXIs
IGtleSwgY29kZUJsb2NrKTsKKyAgICBlbHNlIGlmIChjbGFzc0luZm8gPT0gVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIGVuY29kZUNvZGVCbG9jazxVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KGVuY29kZXIsIGtleSwgY29kZUJsb2NrKTsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVChjbGFzc0luZm8gPT0gVW5saW5rZWRFdmFsQ29kZUJsb2Nr
OjppbmZvKCkpOworCisgICAgcmV0dXJuIGVuY29kZXIucmVsZWFzZSgpOworfQorCitVbmxpbmtl
ZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBjb25zdCBh
dXRvKiBjYWNoZWRFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR2VuZXJpY0NhY2hlRW50
cnkqPihidWZmZXIpOworICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXplKTsKKyAg
ICBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBlbnRyeTsKKyAg
ICB7CisgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgZW50cnkgPSBj
YWNoZWRFbnRyeS0+ZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworICAgIGlmIChlbnRyeS5maXJz
dCAhPSBrZXkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBlbnRyeS5zZWNv
bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNiOGFjYjZjZTU3MGU5NzI2Mzg5YzI2ZDcw
YmNiYTIxZGE4ZDRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlND
YXN0LmgiCisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgU291cmNlQ29kZUtleTsKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrOworCitzdGQ6OnBh
aXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IGVuY29kZUNvZGVCbG9jayhWTSYsIGNvbnN0
IFNvdXJjZUNvZGVLZXkmLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayopOworVW5saW5rZWRDb2Rl
QmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29u
c3Qgdm9pZCosIHNpemVfdCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlPgorVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBkZWNvZGVDb2RlQmxvY2soVk0mIHZtLCBj
b25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUp
Cit7CisgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihkZWNvZGVDb2Rl
QmxvY2tJbXBsKHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCmluZGV4IDQ2
MDE3OTIxYTQ2ZWZjNjQxNzI1ZDBhMjM1MjUyOTAzNWFmNWYzYWQuLmMzMmQyMDRiNmNkODk2ODE4
MWNiMGQxZGYwZWFiODNlYzExODE5ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29kZUNhY2hlLmNwcApAQCAtNDMsNiArNDMsOSBAQCB2b2lkIENvZGVDYWNoZU1hcDo6cHJ1
bmVTbG93Q2FzZSgpCiAKICAgICB3aGlsZSAobV9zaXplID4gbV9jYXBhY2l0eSB8fCAhY2FuUHJ1
bmVRdWlja2x5KCkpIHsKICAgICAgICAgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOworCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKCppdC0+dmFsdWUuY2VsbC0+dm0oKSwgaXQt
PmtleSwgaXQtPnZhbHVlKTsKKwogICAgICAgICBtX3NpemUgLT0gaXQtPmtleS5sZW5ndGgoKTsK
ICAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKICAgICB9CkBAIC01OSw5ICs2Miw4IEBAIFVubGlu
a2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhW
TSYgdm0sIEV4ZWN1dGFibGVUCiAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8gVHlwZVByb2Zp
bGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAgICAgICB2bS5j
b250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDog
Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAgICBXVEY6Om51bGxvcHQpOwot
ICAgIFNvdXJjZUNvZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBk
YXRlQWdlKGtleSk7Ci0gICAgaWYgKGNhY2hlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7
Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBqc0Nh
c3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY2FjaGUtPmNlbGwuZ2V0KCkpOworICAgIFVubGlu
a2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3NvdXJjZUNvZGUuZmluZENh
Y2hlQW5kVXBkYXRlQWdlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7CisgICAgaWYg
KHVubGlua2VkQ29kZUJsb2NrICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAg
IHVuc2lnbmVkIGxpbmVDb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5saW5lQ291bnQoKTsKICAg
ICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZENvZGVCbG9jay0+c3RhcnRDb2x1
bW4oKSArIHNvdXJjZS5zdGFydENvbHVtbigpLm9uZUJhc2VkSW50KCk7CiAgICAgICAgIGJvb2wg
ZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9ICFsaW5lQ291bnQ7CkBAIC03MSw5ICs3Myw5IEBAIFVu
bGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayhWTSYgdm0sIEV4ZWN1dGFibGVUCiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3Vy
Y2VNYXBwaW5nVVJMRGlyZWN0aXZlKHVubGlua2VkQ29kZUJsb2NrLT5zb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKCkpOwogICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7CiAgICAgfQot
ICAgIAorCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJsZXNVbmRlclREWjsKLSAgICBV
bmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtl
ZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBlPih2bSwgZXhl
Y3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVy
cm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7CisgICAgdW5saW5rZWRD
b2RlQmxvY2sgPSBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlw
ZSwgRXhlY3V0YWJsZVR5cGU+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNj
cmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxl
c1VuZGVyVERaKTsKIAogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jayAmJiBPcHRpb25zOjp1c2VD
b2RlQ2FjaGUoKSkKICAgICAgICAgbV9zb3VyY2VDb2RlLmFkZENhY2hlKGtleSwgU291cmNlQ29k
ZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgbV9zb3VyY2VDb2RlLmFnZSgpKSk7CkBAIC0x
MTAsOSArMTEyLDggQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0
VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHYKICAgICAgICAgdm0udHlwZVBy
b2ZpbGVyKCkgPyBUeXBlUHJvZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJvZmlsZXJFbmFibGVk
OjpObywgCiAgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJv
ZmlsZXJFbmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCiAgICAg
ICAgIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwotICAgIFNvdXJj
ZUNvZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBkYXRlQWdlKGtl
eSk7Ci0gICAgaWYgKGNhY2hlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7Ci0gICAgICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FjaGUtPmNlbGwuZ2V0KCkpOworICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVw
ZGF0ZUFnZTxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGtleSk7CisgICAgaWYgKGV4
ZWN1dGFibGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpIHsKICAgICAgICAgc291cmNlLnBy
b3ZpZGVyKCktPnNldFNvdXJjZVVSTERpcmVjdGl2ZShleGVjdXRhYmxlLT5zb3VyY2VVUkxEaXJl
Y3RpdmUoKSk7CiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKGV4ZWN1dGFibGUtPnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoKSk7CiAgICAg
ICAgIHJldHVybiBleGVjdXRhYmxlOwpAQCAtMTU1LDQgKzE1NiwxMCBAQCBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0
YWJsZShWTSYgdgogICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7CiB9CiAKK3ZvaWQgQ29k
ZUNhY2hlOjp3cml0ZShWTSYgdm0pCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1fc291
cmNlQ29kZSkKKyAgICAgICAgd3JpdGVDb2RlQmxvY2sodm0sIGl0LmtleSwgaXQudmFsdWUpOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2Fj
aGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCmluZGV4IDhh
NDQxOWY5NmNhOGZhNGE2MjliZTBlOWE3ODI3Y2JhZjY4Y2ZmODYuLjk5Mzk1ZjJjZDI4NDExMzlh
MDM1YzhiMTU4OWJiOTM5YzY5YzU3MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKICNpbmNsdWRl
ICJFeGVjdXRhYmxlSW5mby5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJQ
YXJzZXIuaCIKQEAgLTM3LDYgKzM4LDcgQEAKICNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNs
dWRlICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTg5LDEzICs5MSw3NiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFNvdXJj
ZUNvZGVWYWx1ZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtl
eSkKKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
ZmV0Y2hGcm9tRGlza0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisgICAg
eworI2lmIE9TKERBUldJTikKKyAgICAgICAgY29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9u
czo6ZGlza0NhY2hlUGF0aCgpOworICAgICAgICBpZiAoIWNhY2hlUGF0aCkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBrZXkuaGFzaCgpOwor
ICAgICAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisgICAgICAgIGludCBjb3VudCA9IHNucHJpbnRm
KGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7CisgICAgICAg
IGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisgICAgICAg
IGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlu
dCByYyA9IGZsb2NrKGZkLCBMT0NLX1NIIHwgTE9DS19OQik7CisgICAgICAgIGlmIChyYykgewor
ICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIH0KKworICAgICAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICAgICAgaW50IHJlcyA9IGZzdGF0
KGZkLCAmc2IpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2Iu
c3Rfc2l6ZSk7CisgICAgICAgIGlmIChyZXMgfHwgIXNpemUpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxwdHIsIHNp
emUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAgICAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+KHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSk7CisKKyAgICAgICAgaWYgKCF1bmxp
bmtlZENvZGVCbG9jaykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGFk
ZENhY2hlKGtleSwgU291cmNlQ29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgbV9hZ2Up
KTsKKyAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOworI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHZtKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworI2VuZGlmCisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlPgorICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPFVu
bGlua2VkQ29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp2YWx1ZSAmJiAhc3RkOjpp
c19zYW1lPFVubGlua2VkQ29kZUJsb2NrVHlwZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFs
dWUsIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+CisgICAgZmV0Y2hGcm9tRGlzayhWTSYgdm0sIGNv
bnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKKyAgICB7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrID0gZmV0Y2hGcm9tRGlza0ltcGw8VW5saW5rZWRDb2RlQmxvY2tUeXBl
Pih2bSwga2V5KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlRGlza0NhY2hl
KCkpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIGNvZGVCbG9jazsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVCbG9jaywgVD46OnZh
bHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s+Ojp2YWx1ZSwgVCo+
CisgICAgZmV0Y2hGcm9tRGlzayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmKSB7IHJldHVybiBu
dWxscHRyOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+
CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBmaW5kQ2FjaGVBbmRVcGRhdGVBZ2UoVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCiAgICAgewogICAgICAgICBwcnVuZSgpOwogCiAg
ICAgICAgIGl0ZXJhdG9yIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAgIGlm
IChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICByZXR1cm4gZmV0Y2hGcm9tRGlzazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+
KHZtLCBrZXkpOwogCiAgICAgICAgIGludDY0X3QgYWdlID0gbV9hZ2UgLSBmaW5kUmVzdWx0LT52
YWx1ZS5hZ2U7CiAgICAgICAgIGlmIChhZ2UgPiBtX2NhcGFjaXR5KSB7CkBAIC0xMTUsNyArMTgw
LDcgQEAgcHVibGljOgogICAgICAgICBmaW5kUmVzdWx0LT52YWx1ZS5hZ2UgPSBtX2FnZTsKICAg
ICAgICAgbV9hZ2UgKz0ga2V5Lmxlbmd0aCgpOwogCi0gICAgICAgIHJldHVybiAmZmluZFJlc3Vs
dC0+dmFsdWU7CisgICAgICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4o
ZmluZFJlc3VsdC0+dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAgfQogCiAgICAgQWRkUmVzdWx0IGFk
ZENhY2hlKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNlQ29kZVZhbHVlJiB2
YWx1ZSkKQEAgLTE5Nyw2ICsyNjIsNyBAQCBwdWJsaWM6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFNvdXJjZUNvZGUmLCBEZWJ1Z2dlck1vZGUsIE9wdGlvbmFsPGlu
dD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgUGFyc2VyRXJyb3Im
KTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fc291cmNlQ29kZS5jbGVhcigpOyB9CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZShWTSYpOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRl
IDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBlPiAKQEAg
LTI1Niw0ICszMjIsMzYgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZW5lcmF0ZVVubGlua2Vk
Q29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGEKICAgICByZXR1cm4gdW5s
aW5rZWRDb2RlQmxvY2s7CiB9CiAKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgd3JpdGVDb2Rl
QmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVW
YWx1ZSYgdmFsdWUpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0
aCA9IE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0g
anNEeW5hbWljQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsK
KyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgaGFz
aCA9IGtleS5oYXNoKCk7CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGludCBjb3VudCA9
IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7
CisgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZXN1bHQgPSBlbmNvZGVD
b2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKKworICAgIGludCBmZCA9IG9wZW4oZmlsZW5h
bWUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaW50IHJjID0gZmxvY2soZmQsIExP
Q0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJjKQorICAgICAgICA6OndyaXRlKGZkLCByZXN1
bHQuZmlyc3QuZ2V0KCksIHJlc3VsdC5zZWNvbmQpOworICAgIGNsb3NlKGZkKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworI2VuZGlmCit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKaW5kZXggY2E1MzE2MzZiNzgxZTg2
OWVhNzhmNzZkMjViNWU0YWVhZDQxNjE4NS4uMmJjYWE5YjY3NjJkMjUyZjBiMzFlZTFhODk0OWNk
ZDgzNzQ2ODAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNw
cApAQCAtMTY4OCwxMSArMTY4OCw2IEBAIGJvb2wgSlNCaWdJbnQ6OmdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWlubGluZSBzaXplX3QgSlNCaWdJbnQ6Om9mZnNldE9mRGF0YSgpCi17
Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoRGlnaXQpPihzaXpl
b2YoSlNCaWdJbnQpKTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogSlNCaWdJ
bnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIENoYXJUeXBlKiAgZGF0YSwg
dW5zaWduZWQgbGVuZ3RoLCBFcnJvclBhcnNlTW9kZSBlcnJvclBhcnNlTW9kZSkKIHsKQEAgLTE3
OTUsMTEgKzE3OTAsNiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSog
ZXhlYywgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwgdW5zaWduZWQgbAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1pbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0KiBKU0JpZ0ludDo6ZGF0YVN0b3JhZ2Uo
KQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PERpZ2l0Kj4ocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkRhdGEoKSk7Ci19Ci0KIGlubGluZSBKU0JpZ0ludDo6
RGlnaXQgSlNCaWdJbnQ6OmRpZ2l0KHVuc2lnbmVkIG4pCiB7CiAgICAgQVNTRVJUKG4gPCBsZW5n
dGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAppbmRleCAyYjNi
ZjkzMDdkOGRiYmIxMTA3NTMzZWQ4MzAzNDdiY2RkNGE2MTBiLi5lMmE2NTc4MTA3MTcyOTRhOTRm
ODE3ODRhMmU3MWM0OGE4YWQ1YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0JpZ0lu
dCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOworICAgIGZyaWVuZCBz
dHJ1Y3QgQ2FjaGVkQmlnSW50OwogCiBwdWJsaWM6CiAKQEAgLTIyOCw4ICsyMjksMTUgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoSlNCaWdJbnQq
IHgpOwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCk7Ci0gICAgRGlnaXQqIGRhdGFTdG9y
YWdlKCk7CisgICAgaW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6
ZW9mKEpTQmlnSW50KSk7CisgICAgfQorCisgICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOworICAgIH0KIAogICAgIERp
Z2l0IGRpZ2l0KHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDY2Y2VjM2Fm
NzlmNmE4MTNkOThiMzA2NzhlN2Q0ZmRmODZlYzYxMjYuLjk2MmQ4N2U5OTI2ZGFjZTM3NjZmNTk3
M2QwOTZkODgyMjdlMWRlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCkBAIC01MTcsNiArNTE3LDEyIEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVu
dE9wdGlvbnMoKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwogI2VuZGlm
CisKKyAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQorICAgICAgICBPcHRpb25zOjpk
aXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOworCisgICAgaWYgKCFPcHRpb25zOjpkaXNrQ2FjaGVQ
YXRoKCkpCisgICAgICAgIE9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKIH0KIAog
dm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAppbmRleCBlNjdkOTM5M2UwYzI2OGY4OTE3Yzk4MjI5YzFhZjM0OGFlMjFmMzYxLi40
OGY2ZTYyYTdhMDJiOTQxYTljMzFlODgxY2E2Y2IxZjI5ZDIyNGI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC01MDgsNiArNTA4LDggQEAgY29uc3RleHByIGJv
b2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxzZTsKICAgICB2KGJvb2wsIHRy
YWNlTExJbnRFeGVjdXRpb24sIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHRyYWNlTExJbnRTbG93UGF0aCwgZmFsc2UsIENvbmZpZ3VyYWJsZSwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgdHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbiwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYob3B0aW9uU3RyaW5nLCBkaXNrQ2FjaGVQYXRoLCBudWxscHRyLCBS
ZXN0cmljdGVkLCAiIikgXAorICAgIHYoYm9vbCwgZm9yY2VEaXNrQ2FjaGUsIGZhbHNlLCBSZXN0
cmljdGVkLCAiIikgXAogCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuaAppbmRleCA4M2FhZDM1NjAzOGViMmVjNzZlNmI4YmQzN2M3
NDc2Y2VjOTEzNTJlLi44OTMwNDU0YTRjMjNiYTg5ODY5ZWQ0NjRmNzQzYjI5YjMyZTkwMjlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaApAQCAtNDEsNiArNDEsOCBAQCBj
bGFzcyBWTTsKIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cEZsYWdzIHJlZ0V4cEZsYWdzKGNvbnN0
IFN0cmluZyYpOwogCiBjbGFzcyBSZWdFeHAgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBm
cmllbmQgc3RydWN0IENhY2hlZFJlZ0V4cDsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxs
IEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKaW5kZXggNDBlN2M3
ZWMyZmQ2MGI1ODQyYTU3Mjg1YWM5N2IwZjZhOTU5Mzk1ZC4uNWY1MDM0NGEzMDVjZDhmMDc3MDEz
MDc0ZmRlMGZkZDJlYzMzYWQyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCkBAIC0zOSw2ICszOSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXJlIHNv
IHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6eSBsaWtlCiAvLyAiZGVs
ZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRlZmluZU93blByb3BlcnR5Lgog
Y2xhc3MgU2NvcGVkQXJndW1lbnRzVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBm
cmllbmQgc3RydWN0IENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOworCiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKaW5kZXggZWQ5ODJlMzFmNTVi
YmJjOTE2MjhkMjM0MTc4MTJiYjRmNmM2ODcxMS4uNWVlZGVlNmY4MTg2ZGFlYTMwNDA5ODEzZDQ1
MzQ2YWMwNzVlZmQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJh
bWUuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkhlYXAu
aCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAwMmFmNGEwMTYwMzRjOTdhMzI2MjJiNTFiMDRm
YzI5NmU1MmJkNzUxLi43YmNiNDJmMmQ3ZWEyZTcxMTNiOWYzODU3OGU0NWJjYTc4ZjQxYjhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKaW5kZXggOTE1N2Q1Yjgy
OTIwMGZiNmE5NjVlYTNiYzc4Njk2ZTUzMmE5MmI5NS4uMjIwZjAzN2JiMWUwMWE4MDlhMWQ3YWVi
MTk5MjBlZjdhYjM1YzI1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oCkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNz
aW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+CiAvLyBj
b3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBT
eW1ib2xUYWJsZUVudHJ5IHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFN5bWJvbFRhYmxlRW50
cnk7CisKIHByaXZhdGU6CiAgICAgc3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhp
bnRwdHJfdCBiaXRzKQogICAgIHsKQEAgLTQzNiw2ICs0MzgsOCBAQCBzdHJ1Y3QgU3ltYm9sVGFi
bGVJbmRleEhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPFN5bWJvbFRhYmxlRW50cnk+IHsKIH07CiAK
IGNsYXNzIFN5bWJvbFRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5kIHN0
cnVjdCBDYWNoZWRTeW1ib2xUYWJsZTsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJh
c2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAppbmRleCA3NTVj
ZDdhOWFhNTc2YzZmN2E0ZGIxNGMwZDllMzAyYzc4ZGI1MTc4Li40MWQ5NzIyZTVmMzc0MDQ5YzI0
OGM1Y2ViYjgyNjc4YTA1MzRjYTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaApAQCAtMzMsNiArMzMsMTAgQEAK
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKK25hbWVzcGFjZSBKU0Mgeworc3RydWN0IENhY2hlZEJpdFZlY3RvcjsKK30KKwogbmFt
ZXNwYWNlIFdURiB7CiAKIC8vIFRoaXMgaXMgYSBzcGFjZS1lZmZpY2llbnQsIHJlc2l6ZWFibGUg
Yml0dmVjdG9yIGNsYXNzLiBJbiB0aGUgY29tbW9uIGNhc2UgaXQKQEAgLTMzOCw2ICszNDIsOCBA
QCBwdWJsaWM6CiAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KICAgICAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgSlND
OjpDYWNoZWRCaXRWZWN0b3I7CisKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigp
CiAgICAgewogICAgICAgICByZXR1cm4gc2l6ZW9mKHZvaWQqKSA8PCAzOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDNlNjhmMDc2YzFlM2ZmYzZk
OGU5NzYzMjE4N2Y5YmE5N2UzYThkZjIuLjgxNTI2ODhlNzY5NWI5ZmM4YjM2Y2E5MzQzNzViMTI2
NDI4NmYwYzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wMS0wOCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxv
QGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBieXRlY29kZSB0byBkaXNrCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3ODIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ2MDg0OTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGhlbHBlciB0byBleGVjdXRlIGJ5dGVjb2RlLWNhY2hl
IHRlc3RzOiBpdCBleGVjdXRlcyBlYWNoIHRlc3QKKyAgICAgICAgdHdpY2UsIHRoZSBmaXJzdCB3
aXRoIEpTQ19kaXNrQ2FjaGVQYXRoIHNldCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICAg
ICAgYW5kIHNlY29uZCB3aXRoIEpTQ19mb3JjZURpc2tDYWNoZT10cnVlIChpbiBhZGRpdGlvbiB0
byB0aGUgY2FjaGUgcGF0aCkKKyAgICAgICAgdG8gZ3VhcmFudGVlIHRoYXQgb25seSB0aGUgZGlz
ayBjYWNoZSBpcyBiZWluZyB1c2VkIGFuZCBubyBuZXcKKyAgICAgICAgVW5saW5rZWRDb2RlQmxv
Y2tzIGFyZSBiZWluZyBjcmVhdGVkLgorCisgICAgICAgICogU2NyaXB0cy9qc2Mtc3RyZXNzLXRl
c3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlcjogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0wMS0wNiAgRnVqaWkgSGlyb25v
cmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luXVtDbGFuZ10gRml4
IGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9mIE1pbmlCcm93c2VyCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVy
IGIvVG9vbHMvU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10
ZXN0LWhlbHBlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGM5MjkyMWRiOGQ0ZGQyNTAyNzQ0MGM2Y2Y0ZmQxZjlm
YWY3ZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3Qt
aGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlcgpAQCAtMCwwICsxLDQ4IEBACisjIS91
c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWly
ZSAncnVieWdlbXMnCityZXF1aXJlICdmaWxldXRpbHMnCityZXF1aXJlICdqc29uJworcmVxdWly
ZSAnc2hlbGx3b3JkcycKK3JlcXVpcmUgJ3RtcGRpcicKKworZGVmIG15c3lzKCpjbWQpCisgICAg
cmFpc2UgIkNvbW1hbmQgI3tjbWQuaW5zcGVjdH0gZmFpbGVkOiAjeyQ/Lmluc3BlY3R9IiB1bmxl
c3Mgc3lzdGVtKCpjbWQpCitlbmQKKworcGF0aFRvVk0gPSBBUkdWWzBdCitpbnB1dEZpbGUgPSBB
UkdWWzFdCitleHRyYU9wdGlvbnMgPSBBUkdWWzIuLi0xXQorZGlza0NhY2hlUGF0aCA9IERpci5t
a3RtcGRpciBbaW5wdXRGaWxlLCAnYnl0ZWNvZGUtY2FjaGUnXQorCitiZWdpbgorICAgIEVOVlsi
SlNDX2Rpc2tDYWNoZVBhdGgiXSA9IGRpc2tDYWNoZVBhdGgKKyAgICBteXN5cyhwYXRoVG9WTSwg
aW5wdXRGaWxlLCAqZXh0cmFPcHRpb25zKQorICAgIEVOVlsiSlNDX2ZvcmNlRGlza0NhY2hlIl0g
PSAidHJ1ZSIKKyAgICBteXN5cyhwYXRoVG9WTSwgaW5wdXRGaWxlLCAqZXh0cmFPcHRpb25zKQor
ZW5zdXJlCisgICAgRmlsZVV0aWxzLnJtX3JmKGRpc2tDYWNoZVBhdGgpCitlbmQKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IDM1YTllYjFjNTVlMTAyYjUyZGQ0NTU3MDIzZDkyZDE2
MDNlMGM1YTEuLjNhZjRlOGM1OGVjOGZkMjRlNTUzMzBiMTRlNGYzZjMwNTZjMmEzOWIgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNjU1LDYgKzY1NSwxNSBAQCBkZWYgcnVuRGVm
YXVsdCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIHJ1bigiZGVmYXVsdCIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKK2RlZiBy
dW5CeXRlY29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCisgICAgdW5sZXNz
ICRob3N0T1MgPT0gImRhcndpbiIKKyAgICAgICAgc2tpcAorICAgICAgICByZXR1cm4KKyAgICBl
bmQKKyAgICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0
aW9ucyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zCisgICAgYWRk
UnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInJ1YnkiLCAocGF0aFRvSGVscGVycyArICJi
eXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlciIpLnRvX3MsIHBhdGhUb1ZNLnRvX3MsICRiZW5jaG1h
cmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRs
ZXIpCitlbmQKKwogZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDAzMzExMjE+CiAgICAgaWYgJHJl
bW90ZSBvciAoJGFyY2hpdGVjdHVyZSAhfiAveDg2L2kgYW5kICRob3N0T1MgPT0gImRhcndpbiIp
CkBAIC03NTEsNiArNzYwLDcgQEAgZGVmIGRlZmF1bHRSdW4KICAgICAgICAgZGVmYXVsdFF1aWNr
UnVuCiAgICAgZWxzZQogICAgICAgICBydW5EZWZhdWx0CisgICAgICAgIHJ1bkJ5dGVjb2RlQ2Fj
aGUKICAgICAgICAgaWYgJGppdFRlc3RzCiAgICAgICAgICAgICBydW5Ob0xMSW50CiAgICAgICAg
ICAgICBydW5Ob0NKSVRWYWxpZGF0ZVBoYXNlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359316</attachid>
            <date>2019-01-16 15:01:49 -0800</date>
            <delta_ts>2019-01-18 08:07:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190117000136.patch</filename>
            <type>text/plain</type>
            <size>128125</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NDdmYTQ5YWEwMmE4MWI1NjkzMjgzNWU5OWMzZDk1MGQ4NDk0MzJiLi4xNTczNDRlMTExYWViNWZj
NjdiMWI5YWE0NTlkYmEyODcwMmI4MDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDMgQEAKKzIwMTktMDEtMDggIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLgorCisgICAgICAgIEVhY2ggY2xhc3MgdGhhdCBjYW4gYmUgc2VyaWFsaXplZCBo
YXMgYSBjb3VudGVycGFydCBpbiBDYWNoZWRUeXBlcywgd2hpY2gKKyAgICAgICAgaGFuZGxlcyB0
aGUgZGVjb2RpbmcgYW5kIGVuY29kaW5nLiBXaGVuIGRlY29kaW5nLCB0aGUgY2FjaGVkIG9iamVj
dHMgYXJlCisgICAgICAgIG1tYXAnZCBmcm9tIGRpc2ssIGJ1dCBvbmx5IHVzZWQgZm9yIGNyZWF0
aW5nIGluc3RhbmNlcyBvZiB0aGUgcmVzcGVjdGl2ZQorICAgICAgICBpbi1tZW1vcnkgdmVyc2lv
biBvZiBlYWNoIG9iamVjdC4gSWRlYWxseSwgdGhlIG1tYXAnZCBvYmplY3RzIHNob3VsZCBiZQor
ICAgICAgICB1c2VkIGF0IHJ1bnRpbWUgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMpOgor
ICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEhhbmRs
ZXJJbmZvOjpVbmxpbmtlZEhhbmRsZXJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvblN0cmVhbS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRTZXRDb25zdGFudCk6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudElkZW50aWZpZXJTZXRzKToKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEdsb2Jh
bENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6VW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRh
dGFUYWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoZnVuY3Rpb25RdWl0KToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZUtleS5oOgor
ICAgICAgICAoSlNDOjpTb3VyY2VDb2RlS2V5OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAg
KiBwYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmg6CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxl
RW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkVuY29kZXI6OkVuY29kZXIpOgorICAgICAgICAoSlNDOjpFbmNvZGVy
Ojp+RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnZtKToKKyAgICAgICAgKEpTQzo6
RW5jb2Rlcjo6bWFsbG9jT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6bWFsbG9jKToK
KyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpFbmNvZGVy
OjpjYWNoZVB0cik6CisgICAgICAgIChKU0M6OkVuY29kZXI6Om9mZnNldEZvclB0cik6CisgICAg
ICAgIChKU0M6OkVuY29kZXI6OnJlbGVhc2UpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpEZWNv
ZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6fkRlY29kZXIpOgorICAgICAgICAoSlNDOjpE
ZWNvZGVyOjp2bSk6CisgICAgICAgIChKU0M6OkRlY29kZXI6Om9mZnNldE9mKToKKyAgICAgICAg
KEpTQzo6RGVjb2Rlcjo6Y2FjaGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjphZGRG
aW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpkZWNvZGUp
OgorICAgICAgICAoSlNDOjpDYWNoZWRPYmplY3Q6OnNpemVPZik6CisgICAgICAgIChKU0M6OkNh
Y2hlZE9iamVjdDo6Y2FzdCk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0Ojpi
dWZmZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YnVmZmVy
KToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6OmFsbG9jYXRlKToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkUHRyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6OmRl
Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFB0cjo6b3BlcmF0b3ItPik6CisgICAg
ICAgIChKU0M6OkNhY2hlZFB0cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZFJlZlB0cjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFdyaXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkVmVjdG9yOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRl
Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAg
IChKU0M6OkNhY2hlZFBhaXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhh
c2hNYXA6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
U3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hl
ZElkZW50aWZpZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFs
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkU2ltcGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpD
YWNoZWRTaW1wbGVKdW1wVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFN0cmluZ0p1bXBUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVt
cFRhYmxlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSYXJlRGF0YTo6ZW5j
b2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZEJpdFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Qml0VmVjdG9yOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRB
cnJheTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRz
VGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkU3ltYm9sVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZEltbXV0YWJsZUJ1dHRlcmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1t
dXRhYmxlQnV0dGVyZmx5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdF
eHA6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkQmlnSW50OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVl
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1l
dGFkYXRhVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9y
aWdpbjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFRleHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU3RyaW5nU291cmNlUHJvdmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0
cmluZ1NvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNl
UHJvdmlkZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJj
ZUNvZGVTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29k
ZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkTW9kdWxlQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRNb2R1bGVDb2RlQmxvY2s6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2
YWxDb2RlQmxvY2s6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEV2YWxDb2RlQmxvY2s6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6VW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9ja1R5cGU+OjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jazo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6
OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNv
dXJjZUNvZGVLZXk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OmVu
Y29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OiBjb25zdCk6CisgICAgICAgIChKU0M6
OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OmRlY29kZUNvZGVCbG9ja0ltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuaDog
Q29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkR2xvYmFs
Q29kZUJsb2NrLmguCisgICAgICAgIChKU0M6OmRlY29kZUNvZGVCbG9jayk6CisgICAgICAgICog
cnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OnBydW5l
U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0
aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6d3JpdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6YmVn
aW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmVuZCk6CisgICAgICAgIChKU0M6OkNv
ZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVN
YXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAgIChKU0M6OndyaXRlQ29kZUJsb2Nr
KToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6Om9mZnNldE9mRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpkYXRh
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0JpZ0ludC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVu
dE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwLmg6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKwogMjAxOS0w
MS0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3Ig
bmV3IGJ5dGVjb2RlIHN0cnVjdHMgc28gdGhhdCB0aGUgZmllbGRzIGFyZSBwcmVmaXhlZCB3aXRo
ICJtXyIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCmluZGV4IDEyMWU2YmZlZWE5ZmI5ZDAxYmIxZmQ3ODVlYmIyY2JjZGVjMTBjNzIuLjAw
ZmE4YjBmODdiZDBlZmU2ZGMyOTMyNjE3NDM5NWFmMWViMGQ1MmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTktMDEtMDggIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjA4
NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBC
aXRWZWN0b3JzIGhhdmUgdG8gYmUgZnJpZW5kcyB3aXRoIEpTQzo6Q2FjaGVCaXRWZWN0b3IgdG8g
YWxsb3cKKyAgICAgICAgc2VyaWFsaXppbmcgaXRzIGJ1ZmZlciBhcyBwYXJ0IG9mIHRoZSBieXRl
Y29kZSBjYWNoZSBlbmNvZGluZy4KKworICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKwogMjAx
OS0wMS0xNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBibWFsbG9jIHNob3VsZCB1c2UgSlNDIFZNIHRhZyBmb3IgZ2lnYWNhZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2YWNkZmIxMzQyNjQ2NWJjNDhiZjFkN2E1ZGI3Nzc1
ZjM4NDlhNTlkLi5lYTg1OGIxNjgyNDlhMWMxMmQzYjExYzYwMzUxZGEyODdkZDBjNDRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC04MzMsNiArODMzLDcgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBydW50aW1lL0pTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LmgKICAgICBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKICAg
ICBydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCisgICAgcnVudGltZS9KU0ltbXV0YWJs
ZUJ1dHRlcmZseS5oCiAgICAgcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5oCiAgICAgcnVudGlt
ZS9KU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgKICAgICBydW50aW1lL0pTTWljcm90YXNrLmgK
QEAgLTg0OCw2ICs4NDksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHJ1bnRpbWUvSlNQcm9taXNlLmgKICAgICBydW50aW1lL0pTUHJvbWlzZUNv
bnN0cnVjdG9yLmgKICAgICBydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmgKKyAgICBydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCiAgICAgcnVudGltZS9KU1Byb3h5LmgKICAgICBy
dW50aW1lL0pTUnVuTG9vcFRpbWVyLmgKICAgICBydW50aW1lL0pTU2NvcGUuaApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBkZjdlNmMwNGFiOWE2YWJkN2I0MGUyYWU5N2M1YWEwYmFj
MTEyOWQ5Li4xYmM5MjVhOTY5NWJlYzI1OGFjNTY3YWFjNTk0NWFlNDc1YzQ0ZGRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODI2LDcgKzgyNiw3IEBACiAJCTI2MkQ4NUI3MUMw
RDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MkQ4NUI1MUMwRDY1MEYwMDZB
Q0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCAqLzsgfTsKIAkJMjY4NEQ0Mzgx
QzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2
ZW5lc3MuaCAqLzsgfTsKIAkJMjY5RDYzNkUxQkZCRTVEMTAwMTAxQjFEIC8qIEZUTE91dHB1dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY5RDYzNkQx
QkZCRTVEMDAwMTAxQjFEIC8qIEZUTE91dHB1dC5oICovOyB9OwotCQkyQTA1QUJENjE5NjFERjI0
MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyog
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi87IH07CisJCTJBMDVBQkQ2MTk2MURGMjQwMDM0
MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkyQTExMTI0NjE5MkZDRTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVy
U2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
QTExMTI0NDE5MkZDRTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkE0OEQxOTExNzcyMzY1
QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElD
YWxsYmFja0Z1bmN0aW9uLmggKi87IH07CiAJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAvKiBK
U01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJ
bnRlcm5hbC5oICovOyB9OwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAKIAkJNTNFQUZFMkYyMDhERkFC
NDAwN0Q1MjRCIC8qIHRlc3RhcGkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICov
OyB9OwogCQk1M0VFMDFCNjIxOEY2OTE2MDBBRDFGOEQgLyogSlNTY3JpcHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI1MjE4RjY5MEYwMEFE
MUY4RCAvKiBKU1NjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzRUUwMUI4MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VFMDFC
NzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oICovOyB9OwotCQk1M0YxMUY0
MTIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjExRjQwMjA5MTM4RDcwMEU0MTFB
NyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oICovOyB9OworCQk1M0YxMUY0MTIwOTEzOEQ3MDBF
NDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjExRjQwMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0
YWJsZUJ1dHRlcmZseS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5
NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLzsgfTsKIAkJNTNGNDBFOEIxRDU5MDFCQjAw
OTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5j
dGlvblBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNG
NDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLzsgfTsKQEAgLTMxMjksNiAr
MzEyOSw3IEBACiAJCTE0Mzg2QTczMURENjk4OTUwMDg2NTJDNCAvKiBEaXJlY3RFdmFsRXhlY3V0
YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RFdmFsRXhlY3V0
YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NjFERDY5ODlDMDA4
NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQzODZBNzcxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZh
bEV4ZWN1dGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kaXJlY3RF
dmFsRXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDNCRTI2NTIx
Qzg1Nzc3MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2FjaGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0
MDA1MUYwQTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTm9kZS5oOyBwYXRoID0gdGVzdHMvTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDQwMDUyMDBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IG5hbWUgPSBOb2RlLmM7IHBhdGggPSB0ZXN0cy9Ob2RlLmM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNzQ4MEE1MzZDQzIwMDA1RjA2MSAvKiBOb2Rl
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlTGlzdC5oOyBwYXRo
ID0gdGVzdHMvTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyNDMs
NiArMzI0NCw3IEBACiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9
IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERB
ODE4RTBEOTlGRDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREQTgxOEYwRDk5RkQyMDAwQjBBNEZCIC8qIEpTTGV4aWNh
bEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
TGV4aWNhbEVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRE
QUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8qIENhY2hlZFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0EyIC8qIEpTR2xvYmFsT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBK
U0dsb2JhbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVj
aWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcuY3BwOyB9OwogCQkxNERGMDREOTE2QjM5
OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RTg0Rjk5MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha0Jsb2NrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2MDIsNiArNjYwNCw4IEBACiAJCQkJOUU3Mjk0
MDkxOTBGMDMwNjAwMUE5MUI1IC8qIEJ1bmRsZVBhdGgubW0gKi8sCiAJCQkJMEZCN0YzOEIxNUVE
OEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovLAogCQkJCTBGQjdGMzhDMTVFRDhFMzgwMEYx
NjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCisJCQkJMTREQUZBNDUyMUUzQjg3MTAwNEI2
OEY3IC8qIENhY2hlZFR5cGVzLmNwcCAqLywKKwkJCQkxNDNCRTI2NTIxQzg1Nzc3MDAyMENEMTcg
LyogQ2FjaGVkVHlwZXMuaCAqLywKIAkJCQkwRkVDM0M1RjFGMzc5RjUzMDBGNTlCNkMgLyogQ2Fn
ZWRCYXJyaWVyUHRyLmggKi8sCiAJCQkJQkNBNjJERkUwRTI4MjYyMzAwMDRGMzBEIC8qIENhbGxE
YXRhLmNwcCAqLywKIAkJCQkxNDVDNTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA5NDllZGNhYTViNTM4Yjg1OGFkYzM0
YzExMjRkYzZjMWVkZDYyMjU1Li4yNThkNDljZWQxZTJkNTlkZGJkZjE0N2Y0YWNiMTg5NDkzOGRi
YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC03MTMsNiArNzEzLDcgQEAgcnVu
dGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCiBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwCiBy
dW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCiBydW50aW1lL0NhbGxEYXRhLmNwcAorcnVudGlt
ZS9DYWNoZWRUeXBlcy5jcHAKIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKIHJ1bnRpbWUvQ2xhc3NJ
bmZvLmNwcAogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDQ1ZGU4MmU3Y2I1OGEyODNi
MjBmY2FlNTk4MmJiYjVjMDRkYTkxNzUuLmEwZjg1M2E2ZTA1ZGM0NjE4ZmYwNGRlNTkwMTliMWVh
MTNkNmIzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwCkBAIC02Myw2ICs2Myw3IEBAIEJ1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZN
KiB2bSwgQ29tbW9uSWRlbnRpZmllcnMqIGNvbW1vbklkZW50aWZpZXJzKQogICAgIEpTQ19DT01N
T05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QUklW
QVRFX1RPX1BVQkxJQ19FTlRSWSkKICAgICBKU0NfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX05B
TUUoSU5JVElBTElaRV9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKICAgICBKU0NfQ09NTU9OX1BS
SVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFVCTElDX1RP
X1BSSVZBVEVfRU5UUlkpCisgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hf
V0VMTF9LTk9XTl9TWU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFJJVkFURV9UT19QVUJMSUNfRU5U
UlkpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9T
WU1CT0woSU5JVElBTElaRV9TWU1CT0xfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgbV9w
cml2YXRlVG9QdWJsaWNNYXAuYWRkKG1fZG9sbGFyVk1Qcml2YXRlTmFtZS5pbXBsKCksICZtX2Rv
bGxhclZNTmFtZSk7CiAgICAgbV9wdWJsaWNUb1ByaXZhdGVNYXAuYWRkKG1fZG9sbGFyVk1OYW1l
LmltcGwoKSwgJm1fZG9sbGFyVk1Qcml2YXRlTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggZjY2YjhjYjUxZWI0MDJkODczNmZkN2Rk
MGQyZDBlN2EyOTJmNDUxMi4uODUzMWRiMjYwYmQwNzAxYjM3MTkwMWI2NzRiZmY1ZGYwYmZiZDg3
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaApA
QCAtMjEzLDYgKzIxMyw3IEBAIGV4dGVybiBTeW1ib2xJbXBsOjpTdGF0aWNTeW1ib2xJbXBsIHBv
bHlQcm90b1ByaXZhdGVOYW1lOwogLy8gV2UgY29tbWFuZGVlciB0aGUgcHVibGljVG9Qcml2YXRl
TWFwIHRvIGFsbG93IHVzIHRvIGNvbnZlcnQgcHJpdmF0ZSBzeW1ib2wgbmFtZXMgaW50byB0aGUg
YXBwcm9wcmlhdGUgc3ltYm9sLgogLy8gZS5nLiBAaXRlcmF0b3JTeW1ib2wgcG9pbnRzIHRvIFN5
bWJvbC5pdGVyYXRvciBpbiB0aGlzIG1hcCByYXRoZXIgdGhhbiB0byBhIGFuIGFjdHVhbCBwcml2
YXRlIG5hbWUuCiAvLyBGSVhNRTogVGhpcyBpcyBhIHdlaXJkIGhhY2sgYW5kIHdlIHNob3VsZG4n
dCBuZWVkIHRvIGRvIHRoaXMuCisjZGVmaW5lIElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9f
UFVCTElDX0VOVFJZKG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjU3lt
Ym9sLmltcGwoKSwgJm1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllcik7CiAjZGVmaW5l
IElOSVRJQUxJWkVfU1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKG5hbWUpIG1fcHVibGlj
VG9Qcml2YXRlTWFwLmFkZChtXyMjbmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIuaW1wbCgp
LCAmbV8jI25hbWUjI1N5bWJvbCk7CiAKIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDNmNDVhNDE3NWExZGJl
NmNkNjgzMTQxNzViZmE5ZDgzMzBmYmUzMTUuLjg5ZTlkNTU1NzJhZDNiNzdkZDFlOGU0ZjcwODU2
N2JjNGJlNmE4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCkBAIC04NjksNyArODY5LDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJT
ZXRFbnRyeT4mIGNvbnN0YW50cykKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZp
ZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0
RW50cnk+JiBjb25zdGFudHMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVj
dC5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRl
eCBhNjkyNmZkZjk3ZWI0ZTZjNmZjZDBlYjI3NmY4MDUzMTliYTBiZmU0Li5jNzQ4ZmMwN2MyNzEx
Mzg5ZjI3MDM0NTRjMjI2ZTVjN2NiODFjMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCkBAIC04OTAsNyArODkwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJP
ZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzKTsKIAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJz
KFZNJiwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50
cyk7CisgICAgdm9pZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25z
dCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwogCiAgICAg
dm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYg
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAppbmRleCA2NmMzYjc2ODc3NTYyMDc3NmQyNjNm
ZjA5OGRlNmY0NmI2NmU3NzgzLi43ZjQ2NWQyYWU5Mzc5OWI5MWRmNzg3MTQxOTRmY2EzNGJkMmEx
YTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlcklu
Zm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaApA
QCAtODksNiArODksMTAgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiB9OwogCiBzdHJ1Y3Qg
VW5saW5rZWRIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIFVubGlu
a2VkSGFuZGxlckluZm8oKQorICAgIHsKKyAgICB9CisKICAgICBVbmxpbmtlZEhhbmRsZXJJbmZv
KHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQsIHVpbnQzMl90IHRhcmdldCwgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGUpCiAgICAgewogICAgICAgICB0aGlzLT5zdGFydCA9IHN0YXJ0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFt
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaApp
bmRleCA3MGVkZTNlNDFjNWQ1YzQ4OWQ3OTZmY2ZjMGMxY2NkOTk4ZDI5ZWQ1Li5kOTMxNTRiYzZi
NWMzNmQ0YTg0OTcxMjUyZDA2MzJlNDQwZDRhZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaApAQCAtMzksNiArMzksNyBAQCBj
bGFzcyBJbnN0cnVjdGlvblN0cmVhbSB7CiAgICAgdXNpbmcgSW5zdHJ1Y3Rpb25CdWZmZXIgPSBW
ZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+OwogCiAgICAgZnJpZW5kIGNs
YXNzIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkSW5z
dHJ1Y3Rpb25TdHJlYW07CiBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKaW5kZXggZjBlOWQ2NGM4NTRhM2Y1MzY3NTJkNDg3NDY5MmQyNzg3N2Q2NzA0OS4uMGIy
MzZhMDJkNTlkYzI1OGU5MDg5MGM5MjVhM2M4OGIwNWM1MDdmYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTY1LDEyICs2
NSwxNSBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitzdHJ1
Y3QgQ2FjaGVkQ29kZUJsb2NrOworCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9m
aWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5z
aWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBV
bmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtl
ZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcgQ29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5ID0g
c3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50SWRlbnRp
ZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKIAogc3Ry
dWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24g
ewpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMu
YXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3Ro
ZXIpOwotICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SW5k
ZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50SWRlbnRp
ZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7
CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpPdGhlcikKQEAgLTIwMiw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XTsKICAgICB9CiAgICAgY29uc3QgVmVjdG9y
PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVy
U2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElk
ZW50aWZpZXJTZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlm
aWVyU2V0czsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdp
c3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+
PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KQEAgLTM2Nyw2
ICszNzAsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2so
Vk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dl
ck1vZGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUg
Q2FjaGVkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3Ry
dWN0dXJlKiwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVC
bG9ja1R5cGU+Jik7CisKICAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtMzc4LDYgKzM4NSw5IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2Vu
ZXJhdG9yOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUg
Q2FjaGVkQ29kZUJsb2NrVHlwZT4KKyAgICBmcmllbmQgc3RydWN0IENhY2hlZENvZGVCbG9jazsK
KwogICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYsIEluc3RydWN0
aW9uU3RyZWFtV3JpdGVyJik7CiAKICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KQpAQCAtNDQ0LDcgKzQ1NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPElkZW50aWZpZXI+IG1f
aWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7Ci0gICAgVmVj
dG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
OworICAgIFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50
aWZpZXJTZXRzOwogICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFy
cmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rv
cjsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9j
ay5oCmluZGV4IDk5ODdiNDMxMzM0M2I2Y2I3NTJhNDIwYjM1OGQ5YTM2MDMxNzJmMjYuLjJhYzc0
YWU5OGI1MGNmMjI2MTdiYzk0Mjk0NWUwMjM4NGQxMmNmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKQEAgLTI5
LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBDYWNoZWRFdmFsQ29kZUJs
b2NrOworCiBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxD
b2RlQmxvY2sgQmFzZTsKQEAgLTU5LDExICs2MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZnVu
Y3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRh
dGVzKTsKICAgICB9CiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRFdmFsQ29kZUJsb2NrOwor
CiAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQog
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9k
ZSkKICAgICB7CiAgICAgfQogCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImLCBj
b25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJik7CisKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxJZGVudGlmaWVy
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggYjU0ODJiNjVjOGI4ZWZiM2FhMzA2YTQxM2JkNTQ2
MDM0OTFhOTAxMy4uNmEzMGFhM2QxZTUyZWU5Njk2Y2U3OTYzMjVjNTA1OWJmYmY5MjJjZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewogcHVibGljOgog
ICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKQEAgLTQ0LDEwICs0NiwxNCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAg
ICBmcmllbmQgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBl
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkK
ICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1v
ZGUpCiAgICAgewogICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2Rl
ciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrJik7CiAgICAgCiBwdWJsaWM6CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXgg
NTI2ODk4Yzk1MWQ4MjE3NTk3OTg4MTEwMmY5ZGM3ZDYxNWIwMTUyMi4uMzc1ZjQ3ODk3ZGNkNWIw
Njk1NzYyNTVlYzNjN2FlMWM3Y2Q0NTdkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTM5
LDExICszOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKIGNsYXNz
IEZ1bmN0aW9uTWV0YWRhdGFOb2RlOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3Mg
UGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s7CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiBlbnVtIFVu
bGlua2VkRnVuY3Rpb25LaW5kIHsKICAgICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLApAQCAtNTQs
NiArNTYsNyBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CiAgICAgZnJp
ZW5kIGNsYXNzIFZNOworICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAKICAg
ICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKQEAg
LTE0Nyw2ICsxNTAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25N
ZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQ
YXJzZXJTY3JpcHRNb2RlLCBWYXJpYWJsZUVudmlyb25tZW50JiwgIEpTQzo6RGVyaXZlZENvbnRl
eHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIGNv
bnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAgdW5zaWduZWQgbV9maXJzdExp
bmVPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCmluZGV4
IDM0Mzg2MmU2NDcwZmUxYjFhNDI0ODVkODc2OWUyNzdkNzJjMTUwOGUuLjg2OTk2MTU4N2NkZDUx
NzE3ZmY2M2MxNjdkYmYyNDliZDYwZTM4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCkBAIC0zOCw2ICsz
OCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlw
ZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorICAgIFVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2Nr
VHlwZT4mIGNhY2hlZENvZGVCbG9jaykKKyAgICAgICAgOiBCYXNlKGRlY29kZXIsIHN0cnVjdHVy
ZSwgY2FjaGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKaW5k
ZXggM2UzZThkZmI0ZDViYmM0NjRmNWU2YTIzNDRjYWFjYTk5NDk0OWVmMS4uZDk5MGNkNzhjM2Vk
MWE2MzlmNjQxMDQ2OGRmYTNhZWJiMDY2ZDY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaApAQCAtMzUsNiArMzUs
NyBAQCBjbGFzcyBNZXRhZGF0YVRhYmxlOwogY2xhc3MgVW5saW5rZWRNZXRhZGF0YVRhYmxlIHsK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFz
cyBNZXRhZGF0YVRhYmxlOworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkTWV0YWRhdGFUYWJsZTsK
IAogcHVibGljOgogICAgIHN0cnVjdCBMaW5raW5nRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLmgKaW5kZXggMGU5YzVmNWJkZGU2Yzc1NjJiNjZhMDNiYzBhOThjODdhZGJkOTMwMi4u
ZTY0ZGNlNjEyNTQ3N2RkNWM1NDEyY2VkOTJiZTI1NjA0YjVmMzg0NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suaApAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y2xhc3MgRGVjb2RlcjsKK3N0cnVjdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKIGNsYXNzIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayBCYXNlOwpAQCAtNzQsMTEgKzc3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Cisg
ICAgZnJpZW5kIENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUsIE1vZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAg
ICAgfQogCisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25z
dCBDYWNoZWRNb2R1bGVDb2RlQmxvY2smKTsKKwogICAgIGludCBtX21vZHVsZUVudmlyb25tZW50
U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwogCiBwdWJsaWM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrLmgKaW5kZXggYWZlMjZhZWQxYTUwM2FiMjNmZDhmNDQ3ZjlkZWMyZGMwNmNhNTgy
Ni4uOWQ3ZTQzNWFmZDhjYTVmYjBhNzRlOTU1ZDM2MjU5MTFhNjI4YWExNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IENh
Y2hlZFByb2dyYW1Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayBm
aW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAtNTAsMTEgKzUyLDE1IEBAIHB1
YmxpYzoKICAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVjbGFyYXRpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6Cisg
ICAgZnJpZW5kIENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0K
IAorICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkUHJv
Z3JhbUNvZGVCbG9jayYpOworCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0
aW9uczsKICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
aW5kZXggYWQ2NTM2MThiNDI4ZmNhMDZiZTA0ZGRiNjZjMGYzZDMxZDJiMjY0Yy4uOGU4MjU2MDI4
YjEwMzdkYjJiMzA3YWNkMTdkMDViN2YzNThmNDdkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYjQ2NzMwNzg1ZGExOTljMmUyMGY1YTBkYmM1ZGY2
MzI0MTEyMzYwZi4uOTFiYTMzYjMzOTcwMmJjM2U5NmI3MmFjN2Q4OGM5OGQyM2IwMDhlYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNs
dWRlICJDb25maWdGaWxlLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCkBAIC0xOTg2LDgg
KzE5ODcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0
TmV3Q29kZUJsb2NrKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUXVpdChFeGVjU3RhdGUqKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blF1aXQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
dm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNTKTsK
IAogI2lmIENPTVBJTEVSKE1TVkMpCkBAIC0yODU2LDYgKzI4NjAsOCBAQCBpbnQgcnVuSlNDKGNv
bnN0IENvbW1hbmRMaW5lJiBvcHRpb25zLCBib29sIGlzV29ya2VyLCBjb25zdCBGdW5jJiBmdW5j
KQogI2VuZGlmCiAgICAgfQogCisgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKKwogICAg
IGlmIChpc1dvcmtlcikgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAg
ICAgLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSB3b3JrZXIncyBt
YWluCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCmluZGV4IDMxM2Nm
YTQ1YWFmOTIyYjA3YjA0NWJiZWUwMzYzODU5Y2JkNGMwOWIuLjAxMzQ5NTVkZWZkYWYxNzIxNWRi
NWE5NjMzZTYwMjIzNTdiOTY3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU291cmNlQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZS5oCkBAIC0zMyw2ICszMyw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IFNvdXJjZUNvZGUgOiBwdWJsaWMgVW5saW5rZWRTb3VyY2VDb2RlIHsKKyAgICAgICAgZnJpZW5k
IHN0cnVjdCBDYWNoZWRTb3VyY2VDb2RlOworCiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VD
b2RlKCkKICAgICAgICAgICAgIDogVW5saW5rZWRTb3VyY2VDb2RlKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKaW5kZXggYThlNjAzYzI2YTBiNjAzNjJh
MDJkZWFjMDUxNjE2OWQ1NzU1ODAyMS4uMzg0ODEyMTdiYWYzOTM1ZDUwMWFjMjUxNTU5YjBkNDI2
OGI0ZGI4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VD
b2RlS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5
LmgKQEAgLTM3LDYgKzM3LDggQEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJFbmFibGVkIHsgTm8s
IFllcyB9OwogZW51bSBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMg
fTsKIAogY2xhc3MgU291cmNlQ29kZUZsYWdzIHsKKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFNv
dXJjZUNvZGVLZXk7CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2RlRmxhZ3MoKSA9IGRlZmF1bHQ7
CiAKQEAgLTcwLDYgKzcyLDggQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVLZXkg
eworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkU291cmNlQ29kZUtleTsKKwogcHVibGljOgogICAg
IFNvdXJjZUNvZGVLZXkoKQogICAgIHsKQEAgLTExNCw2ICsxMTgsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgJiYgc3RyaW5nKCkgPT0gb3RoZXIuc3RyaW5nKCk7CiAgICAgfQogCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUNvZGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKwogICAgIHN0cnVjdCBIYXNo
IHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU291cmNlQ29kZUtleSYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFNvdXJjZUNvZGVLZXkmIGEsIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNv
dXJjZUNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VD
b2RlLmgKaW5kZXggNmVjNTkwYjUzZTZjOWMzMjdlNDI0NGQwYjExOWIzNmQwOTZmYzgxZS4uNDkw
YTg4YWE4MzFkMWNiN2FmNWZmMWE2YTcxY2UwY2E5MjY3YWYxYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCkBAIC0zNSw2ICszNSw5
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFVubGlua2VkU291cmNlQ29kZSB7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIENhY2hlVHlwZT4K
KyAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTsKKwog
ICAgIHB1YmxpYzoKICAgICAgICAgVW5saW5rZWRTb3VyY2VDb2RlKCkKICAgICAgICAgICAgIDog
bV9wcm92aWRlcigwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9W
YXJpYWJsZUVudmlyb25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Zhcmlh
YmxlRW52aXJvbm1lbnQuaAppbmRleCAxMjliNWVhNmJkOWI3MjZhMWQ5YTQwMTFlZjk2OTBmOGNj
NmIwZGQzLi4zNmY5ZGRmODE3NzZjY2IwYTc2ZmVlMDhhMGE1OGMzODA3YTkzNWM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaApA
QCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsgfQogCiBwcml2YXRlOgor
ICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudDsKKwogICAgIE1hcCBt
X21hcDsKICAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgeyBmYWxzZSB9OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNDY2OGQ5MzhkNTdjYTEwN2M4MzliOTU0NmRhZjExZjg4NzFlNGE5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0w
LDAgKzEsMTgzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgorCisjaW5j
bHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiSlNDYXN0LmgiCisj
aW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJKU1RlbXBsYXRlT2Jq
ZWN0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCisjaW5j
bHVkZSAiU291cmNlQ29kZUtleS5oIgorI2luY2x1ZGUgIlVubGlua2VkRXZhbENvZGVCbG9jay5o
IgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxp
bmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0lt
cGwuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSA9IHZvaWQ+CitzdHJ1Y3QgU291cmNlVHlwZUltcGwgeworICAgIHVzaW5nIHR5cGUgPSBUOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTb3VyY2VUeXBlSW1wbDxULCBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19z
YW1lPHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfLCB2b2lkPjo6dmFsdWU+PiB7CisgICAgdXNpbmcg
dHlwZSA9IHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfOworCit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordXNpbmcgU291cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJjZVR5cGVJbXBsPFQ+Ojp0eXBl
OworCitjbGFzcyBFbmNvZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbmNvZGVyKTsK
KworcHVibGljOgorICAgIEVuY29kZXIoVk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisgICAg
ICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyID0gKHVpbnQ4X3QqKWZh
c3RaZXJvZWRNYWxsb2Moc19tYXhTaXplKTsKKyAgICB9CisKKyAgICB+RW5jb2RlcigpCisgICAg
eworICAgICAgICBpZiAobV9idWZmZXIpCisgICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7
CisgICAgfQorCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorCisgICAgcHRyZGlmZl90
IG1hbGxvY09mZnNldCh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXQgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZW9mKHZvaWQqKSwgbV9vZmZzZXQpOworICAgICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX29mZnNldCArIHNpemUpIDwgc19tYXhTaXpl
KTsKKyAgICAgICAgcHRyZGlmZl90IHJlc3VsdCA9IG1fb2Zmc2V0OworICAgICAgICBtX29mZnNl
dCArPSBzaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVpbnQ4X3Qq
IG1hbGxvYyh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9
IG1hbGxvY09mZnNldChzaXplKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyICsgb2Zmc2V0Owor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogbWFsbG9jKCkKKyAgICB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihtYWxsb2Moc2l6ZW9mKFQpKSk7
CisgICAgfQorCisgICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZvaWQqIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGFkZHJlc3MpOworICAgICAgICBBU1NFUlQoYWRkciA+PSBtX2J1ZmZlciAmJiBhZGRy
IDwgbV9idWZmZXIgKyBtX29mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRyIC0gbV9idWZmZXI7
CisgICAgfQorCisgICAgdm9pZCBjYWNoZVB0cihjb25zdCB2b2lkKiBwdHIsIHB0cmRpZmZfdCBv
ZmZzZXQpCisgICAgeworICAgICAgICBtX3B0clRvT2Zmc2V0TWFwLmFkZChwdHIsIG9mZnNldCk7
CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNldEZvclB0cihjb25z
dCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9wdHJUb09mZnNldE1hcC5m
aW5kKHB0cik7CisgICAgICAgIGlmIChpdCA9PSBtX3B0clRvT2Zmc2V0TWFwLmVuZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVl
IH07CisgICAgfQorCisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBy
ZWxlYXNlKCkKKyAgICB7CisgICAgICAgIE1hbGxvY1B0cjx1aW50OF90PiBidWZmZXIgPSBhZG9w
dE1hbGxvY1B0cihtX2J1ZmZlcik7CisgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBtX29mZnNldCB9OworICAgIH0KKworcHJpdmF0
ZToKKyAgICB1bnNpZ25lZCBzX21heFNpemUgPSAxMCAqIE1COworCisgICAgVk0mIG1fdm07Cisg
ICAgdWludDhfdCogbV9idWZmZXI7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworICAgIEhhc2hN
YXA8Y29uc3Qgdm9pZCosIHB0cmRpZmZfdD4gbV9wdHJUb09mZnNldE1hcDsKK307CisKK2NsYXNz
IERlY29kZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlY29kZXIpOworCitwdWJsaWM6
CisgICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXplX3Qgc2l6
ZSkKKyAgICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYmFzZUFkZHJlc3MpKQorI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgLCBtX3NpemUoc2l6ZSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHNpemUpOworICAgIH0KKworICAgIH5EZWNvZGVyKCkKKyAgICB7CisgICAgICAgIGZvciAoYXV0
byYgcGFpciA6IG1fZmluYWxpemVycykKKyAgICAgICAgICAgIHBhaXIudmFsdWUoKTsKKyAgICB9
CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX3ZtOyB9CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0
T2YoY29uc3Qgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogYWRkciA9
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdHIpOworICAgICAgICBBU1NFUlQoYWRkciA+
PSBtX2Jhc2VBZGRyZXNzICYmIGFkZHIgPCBtX2Jhc2VBZGRyZXNzICsgbV9zaXplKTsKKyAgICAg
ICAgcmV0dXJuIGFkZHIgLSBtX2Jhc2VBZGRyZXNzOworICAgIH0KKworICAgIHZvaWQgY2FjaGVP
ZmZzZXQocHRyZGlmZl90IG9mZnNldCwgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgbV9vZmZz
ZXRUb1B0ck1hcC5hZGQob2Zmc2V0LCBwdHIpOworICAgIH0KKworICAgIFdURjo6T3B0aW9uYWw8
dm9pZCo+IHB0ckZvck9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgYXV0
byBpdCA9IG1fb2Zmc2V0VG9QdHJNYXAuZmluZChvZmZzZXQpOworICAgICAgICBpZiAoaXQgPT0g
bV9vZmZzZXRUb1B0ck1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBhZGRGaW5hbGl6ZXIocHRyZGlmZl90IG9mZnNldCwg
Y29uc3QgRnVuY3RvciYgZm4pCisgICAgeworICAgICAgICBtX2ZpbmFsaXplcnMuYWRkKG9mZnNl
dCwgZm4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWTSYgbV92bTsKKyAgICBjb25zdCB1aW50
OF90KiBtX2Jhc2VBZGRyZXNzOworI2lmbmRlZiBOREVCVUcKKyAgICBzaXplX3QgbV9zaXplOwor
I2VuZGlmCisgICAgSGFzaE1hcDxwdHJkaWZmX3QsIHZvaWQqPiBtX29mZnNldFRvUHRyTWFwOwor
ICAgIEhhc2hNYXA8cHRyZGlmZl90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fZmluYWxpemVy
czsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYsIFQm
IGRzdCwgY29uc3QgU291cmNlVHlwZTxUPiYgc3JjKQoreworICAgIGRzdCA9IHNyYzsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3Nh
bWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCYg
ZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+JiBzcmMpCit7CisgICAgZHN0LmVuY29kZShlbmNvZGVy
LCBzcmMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorc3Rh
dGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1
ZT4gZGVjb2RlKERlY29kZXImLCBjb25zdCBUJiBzcmMsIFNvdXJjZVR5cGU8VD4mIGRzdCwgQXJn
cy4uLikKK3sKKyAgICBkc3QgPSBzcmM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lLi4uIEFyZ3M+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNv
dXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIsIGNvbnN0IFQmIHNy
YywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uIGFyZ3MpCit7CisgICAgc3JjLmRlY29kZShk
ZWNvZGVyLCBkc3QsIGFyZ3MuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGlj
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwg
VD4gZGVjb2RlKERlY29kZXImLCBUIHNyYykKK3sKKyAgICByZXR1cm4gc3JjOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxU
LCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWUsIFNvdXJjZVR5cGU8VD4+JiYgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIGNvbnN0IFQmIHNyYykKK3sKKyAgICByZXR1cm4gc3JjLmRlY29kZShkZWNvZGVy
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBEc3Q+CitzdHJ1Y3Qg
Q2FjaGVkT2JqZWN0IHsKKyAgICB1c2luZyBTb3VyY2VUeXBlXyA9IFNvdXJjZTsKKworICAgIHN0
YXRpYyB1bnNpZ25lZCBzaXplT2YoY29uc3QgU291cmNlJiBzb3VyY2UpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICAgICAgY29tcHV0ZU91dE9mTGluZVNpemUoc2l6ZSwg
c291cmNlKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBzdGF0aWMgVCYgY2FzdChUKiBzb3VyY2UpCisgICAgeworICAgICAgICBy
ZXR1cm4gKnNvdXJjZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+PgorICAgIHN0
YXRpYyBUJiBjYXN0KFQmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzb3VyY2U7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgY29uc3QgVCYgY2Fz
dChjb25zdCBUKiBjb25zdCBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gKnNvdXJjZTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxl
X2lmX3Q8IXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+PgorICAgIHN0YXRpYyBjb25zdCBUJiBj
YXN0KGNvbnN0IFQmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBEc3Q+CitzdHJ1Y3Qg
VmFyaWFibGVMZW5ndGhPYmplY3QgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZSwgRHN0PiB7
Citwcml2YXRlOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNl
dCA9IFBUUkRJRkZfTUFYOworcHVibGljOgorICAgIHB0cmRpZmZfdCBvZmZzZXQgeyBzX2ludmFs
aWRPZmZzZXQgfTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQob2Zmc2V0ICE9IHNfaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih0aGlzKSArIG9mZnNldDsKKyAgICB9
CisKKyAgICB1aW50OF90KiBidWZmZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCAh
PSBzX2ludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4odGhpcykgKyBvZmZzZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQqIGJ1ZmZlcigpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxUKj4oYnVmZmVyKCkpOworICAgIH0KKworICAgIHVpbnQ4X3QqIGFsbG9jYXRl
KEVuY29kZXImIGVuY29kZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcHRyZGlmZl90
IG9mZnNldE9mZnNldCA9IGVuY29kZXIub2Zmc2V0T2YoJm9mZnNldCk7CisgICAgICAgIHB0cmRp
ZmZfdCBhbGxvY2F0aW9uT2Zmc2V0ID0gZW5jb2Rlci5tYWxsb2NPZmZzZXQoc2l6ZSk7CisgICAg
ICAgIG9mZnNldCA9IGFsbG9jYXRpb25PZmZzZXQgLSBvZmZzZXRPZmZzZXQ7CisgICAgICAgIHJl
dHVybiBidWZmZXIoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQq
IGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIsIHVuc2lnbmVkIHNpemUgPSAxKQorICAgIHsKKyAg
ICAgICAgYWxsb2NhdGUoZW5jb2Rlciwgc2l6ZW9mKFQpICogc2l6ZSk7CisgICAgICAgIHJldHVy
biBidWZmZXI8VD4oKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBTb3VyY2UgPSBTb3VyY2VUeXBlPFQ+Pgorc3RydWN0IENhY2hlZFB0ciA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqLCBDYWNoZWRQdHI8VD4+IHsKKyAgICBib29sIGlzRW1w
dHk7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2UqIHNy
YykKKyAgICB7CisgICAgICAgIGlzRW1wdHkgPSAhc3JjOworICAgICAgICBpZiAoaXNFbXB0eSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoV1RGOjpPcHRpb25hbDxwdHJkaWZm
X3Q+IG9mZnNldCA9IGVuY29kZXIub2Zmc2V0Rm9yUHRyKHNyYykpIHsKKyAgICAgICAgICAgIHRo
aXMtPm9mZnNldCA9ICpvZmZzZXQgLSBlbmNvZGVyLm9mZnNldE9mKCZ0aGlzLT5vZmZzZXQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVCogY2FjaGVkT2JqZWN0
ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlcik7CisgICAgICAgIGNhY2hlZE9i
amVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOworICAgICAgICBlbmNvZGVyLmNhY2hlUHRyKHNy
YywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFNvdXJjZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcHRyZGlmZl90IGJ1ZmZlck9mZnNldCA9
IGRlY29kZXIub2Zmc2V0T2YodGhpcy0+YnVmZmVyKCkpOworICAgICAgICBpZiAoV1RGOjpPcHRp
b25hbDx2b2lkKj4gcHRyID0gZGVjb2Rlci5wdHJGb3JPZmZzZXQoYnVmZmVyT2Zmc2V0KSkKKyAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNvdXJjZSo+KCpwdHIpOworCisgICAg
ICAgIFNvdXJjZSogcHRyID0gb3BlcmF0b3ItPigpLT5kZWNvZGUoZGVjb2RlciwgYXJncy4uLik7
CisgICAgICAgIGRlY29kZXIuY2FjaGVPZmZzZXQoYnVmZmVyT2Zmc2V0LCBwdHIpOworICAgICAg
ICByZXR1cm4gcHRyOworICAgIH0KKworICAgIFQqIG9wZXJhdG9yLT4oKQorICAgIHsKKyAgICAg
ICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgIH0KKworICAgIGNvbnN0IFQqIG9w
ZXJhdG9yLT4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxU
PigpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJjZSA9
IFNvdXJjZVR5cGU8VD4+CitzdHJ1Y3QgQ2FjaGVkUmVmUHRyIDogcHVibGljIENhY2hlZE9iamVj
dDxSZWZQdHI8U291cmNlPiwgQ2FjaGVkUmVmUHRyPFQ+PiB7CisgICAgQ2FjaGVkUHRyPFQsIFNv
dXJjZT4gcHRyOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291
cmNlKiBzcmMpCisgICAgeworICAgICAgICBwdHIuZW5jb2RlKGVuY29kZXIsIHNyYyk7CisgICAg
fQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmUHRyPFNvdXJj
ZT4gc3JjKQorICAgIHsKKyAgICAgICAgZW5jb2RlKGVuY29kZXIsIHNyYy5nZXQoKSk7CisgICAg
fQorCisgICAgUmVmUHRyPFNvdXJjZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBTb3VyY2UqIGRlY29kZWRQdHIgPSBwdHIuZGVjb2RlKGRlY29kZXIpOwor
ICAgICAgICBkZWNvZGVyLmFkZEZpbmFsaXplcihkZWNvZGVyLm9mZnNldE9mKHB0ci5idWZmZXIo
KSksIFs9XSB7IGRlcmVmSWZOb3ROdWxsKGRlY29kZWRQdHIpOyB9KTsKKyAgICAgICAgcmVmSWZO
b3ROdWxsKGRlY29kZWRQdHIpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoZGVjb2RlZFB0cik7
CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVmUHRyPFNvdXJj
ZT4mIHNyYykgY29uc3QKKyAgICB7CisgICAgICAgIHNyYyA9IGRlY29kZShkZWNvZGVyKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTb3VyY2UgPSBTb3VyY2VU
eXBlPFQ+Pgorc3RydWN0IENhY2hlZFdyaXRlQmFycmllciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8
V3JpdGVCYXJyaWVyPFNvdXJjZT4sIENhY2hlZFdyaXRlQmFycmllcjxUPj4geworICAgIENhY2hl
ZFB0cjxULCBTb3VyY2U+IHB0cjsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFdyaXRlQmFycmllcjxTb3VyY2U+IHNyYykKKyAgICB7CisgICAgICAgIHB0ci5lbmNv
ZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8U291cmNlPiYgc3JjLCBjb25zdCBKU0NlbGwqIG93bmVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlKiBkZWNvZGVkUHRyID0gcHRyLmRlY29kZShk
ZWNvZGVyKTsKKyAgICAgICAgaWYgKGRlY29kZWRQdHIpCisgICAgICAgICAgICBzcmMuc2V0KGRl
Y29kZXIudm0oKSwgb3duZXIsIGRlY29kZWRQdHIpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBJbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciA9IENyYXNoT25PdmVyZmxvdz4KK3N0cnVjdCBDYWNoZWRWZWN0b3IgOiBwdWJsaWMgVmFy
aWFibGVMZW5ndGhPYmplY3Q8VmVjdG9yPFNvdXJjZVR5cGU8VD4sIElubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXI+LCBDYWNoZWRWZWN0b3I8VCwgSW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlcj4+IHsKKyAgICB1bnNpZ25lZCBzaXplOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFNvdXJjZVR5cGU8VD4sIElubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXI+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBzaXplID0gdmVjdG9yLnNp
emUoKTsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5j
b2Rlciwgc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
CisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ld
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZvaWQgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPiYgdmVjdG9yLCBBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgewor
ICAgICAgICB2ZWN0b3IucmVzaXplVG9GaXQoc2l6ZSk7CisgICAgICAgIGNvbnN0IFQqIGJ1ZmZl
ciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBi
dWZmZXJbaV0sIHZlY3RvcltpXSwgYXJncy4uLik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgRmlyc3QsIHR5cGVuYW1lIFNlY29uZD4KK3N0cnVjdCBDYWNoZWRQYWlyIDogcHVibGlj
IENhY2hlZE9iamVjdDxzdGQ6OnBhaXI8U291cmNlVHlwZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vj
b25kPj4sIENhY2hlZFBhaXI8Rmlyc3QsIFNlY29uZD4+IHsKKyAgICBGaXJzdCBmc3Q7CisgICAg
U2Vjb25kIHNuZDsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0
ZDo6cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+PiYgcGFpcikKKyAg
ICB7CisgICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgZnN0LCBzdGQ6OmdldDwwPihwYWly
KSk7CisgICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2Rlciwgc25kLCBzdGQ6OmdldDwxPihwYWly
KSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpwYWly
PFNvdXJjZVR5cGU8Rmlyc3Q+LCBTb3VyY2VUeXBlPFNlY29uZD4+JiBwYWlyKSBjb25zdAorICAg
IHsKKyAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBmc3QsIHN0ZDo6Z2V0PDA+KHBhaXIp
KTsKKyAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBzbmQsIHN0ZDo6Z2V0PDE+KHBhaXIp
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8U291cmNlVHlwZTxLZXk+Pjo6
SGFzaCwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxTb3VyY2VUeXBlPEtleT4+
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFNvdXJjZVR5cGU8VmFsdWU+
Pj4KK3N0cnVjdCBDYWNoZWRIYXNoTWFwIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEhh
c2hNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPiwgSGFzaEFyZywgS2V5VHJh
aXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+LCBDYWNoZWRIYXNoTWFwPEtleSwgVmFsdWUsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPj4geworCisgICAgQ2FjaGVkVmVjdG9y
PENhY2hlZFBhaXI8S2V5LCBWYWx1ZT4+IGVudHJpZXM7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPgorICAgIHVzaW5nIE1hcCA9IEhhc2hNYXA8SywgViwgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgTWFwPFNvdXJjZVR5cGU8S2V5PiwgU291cmNlVHlwZTxWYWx1ZT4+
JiBtYXApCisgICAgeworICAgICAgICBlbnRyaWVzLnNpemUgPSBtYXAuc2l6ZSgpOworICAgICAg
ICBTb3VyY2VUeXBlPGRlY2x0eXBlKGVudHJpZXMpPiBlbnRyaWVzVmVjdG9yKG1hcC5zaXplKCkp
OworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IG1hcCkKKyAgICAgICAgICAgIGVudHJpZXNWZWN0b3JbaSsrXSA9IHsgaXQua2V5LCBpdC52YWx1
ZSB9OworICAgICAgICBlbnRyaWVzLmVuY29kZShlbmNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBNYXA8U291cmNlVHlwZTxL
ZXk+LCBTb3VyY2VUeXBlPFZhbHVlPj4mIG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJj
ZVR5cGU8ZGVjbHR5cGUoZW50cmllcyk+IGRlY29kZWRFbnRyaWVzOworICAgICAgICBlbnRyaWVz
LmRlY29kZShkZWNvZGVyLCBkZWNvZGVkRW50cmllcyk7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgcGFpciA6IGRlY29kZWRFbnRyaWVzKQorICAgICAgICAgICAgbWFwLnNldChzdGQ6OmdldDww
PihwYWlyKSwgc3RkOjpnZXQ8MT4ocGFpcikpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxVbmlxdWVkU3Ry
aW5nSW1wbCwgQ2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+IHsKKyAgICBib29sIGlzOEJpdCA6IDE7
CisgICAgYm9vbCBpc1N5bWJvbCA6IDE7CisgICAgYm9vbCBpc0F0b21pYyA6IDE7CisgICAgdW5z
aWduZWQgbGVuZ3RoOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
U3RyaW5nSW1wbCYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgaXNBdG9taWMgPSBzdHJpbmcuaXNB
dG9taWMoKTsKKyAgICAgICAgaXNTeW1ib2wgPSBzdHJpbmcuaXNTeW1ib2woKTsKKyAgICAgICAg
U3RyaW5nSW1wbCogaW1wbCA9IGNvbnN0X2Nhc3Q8U3RyaW5nSW1wbCo+KCZzdHJpbmcpOworICAg
ICAgICBpZiAoaXNTeW1ib2wpIHsKKyAgICAgICAgICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IHN0
YXRpY19jYXN0PFN5bWJvbEltcGwqPihpbXBsKTsKKyAgICAgICAgICAgIGlmICghc3ltYm9sLT5p
c051bGxTeW1ib2woKSkgeworICAgICAgICAgICAgICAgIElkZW50aWZpZXIgdWlkID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCgmZW5jb2Rlci52bSgpLCBzeW1ib2wpOworICAgICAgICAgICAgICAgIGlt
cGwgPSBlbmNvZGVyLnZtKCkucHJvcGVydHlOYW1lcy0+bG9va1VwUHVibGljTmFtZSh1aWQpLnN0
cmluZygpLmltcGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlzOEJp
dCA9IGltcGwtPmlzOEJpdCgpOworICAgICAgICBsZW5ndGggPSBpbXBsLT5sZW5ndGgoKTsKKwor
ICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB1bnNp
Z25lZCBzaXplID0gbGVuZ3RoOworICAgICAgICBjb25zdCB2b2lkKiBwYXlsb2FkOworICAgICAg
ICBpZiAoaXM4Qml0KQorICAgICAgICAgICAgcGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnM4KCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnMx
NigpOworICAgICAgICAgICAgc2l6ZSAqPSAyOworICAgICAgICB9CisKKyAgICAgICAgdWludDhf
dCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIG1lbWNw
eShidWZmZXIsIHBheWxvYWQsIHNpemUpOworICAgIH0KKworICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gY3Jl
YXRlID0gWyZdKGNvbnN0IGF1dG8qIGJ1ZmZlcikgLT4gVW5pcXVlZFN0cmluZ0ltcGwqIHsKKyAg
ICAgICAgICAgIGlmICghaXNTeW1ib2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIEF0b21pY1N0
cmluZ0ltcGw6OmFkZChidWZmZXIsIGxlbmd0aCkubGVha1JlZigpOworCisgICAgICAgICAgICBp
ZiAoIWxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gJlN5bWJvbEltcGw6OmNyZWF0ZU51
bGxTeW1ib2woKS5sZWFrUmVmKCk7CisKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZkZWNvZGVyLnZtKCksIGJ1ZmZlciwgbGVuZ3RoKTsKKyAg
ICAgICAgICAgIFN0cmluZyBzdHIgPSBkZWNvZGVyLnZtKCkucHJvcGVydHlOYW1lcy0+bG9va1Vw
UHJpdmF0ZU5hbWUoaWRlbnQpLT5zdHJpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIGlt
cGwgPSBzdHIucmVsZWFzZUltcGwoKS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChpbXBsLT5p
c1N5bWJvbCgpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5n
SW1wbCo+KGltcGwpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpczhCaXQpCisgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlKHRoaXMtPmJ1ZmZlcjxMQ2hhcj4oKSk7CisgICAgICAgIHJldHVy
biBjcmVhdGUodGhpcy0+YnVmZmVyPFVDaGFyPigpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2Fj
aGVkU3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTdHJpbmdJbXBsLCBD
YWNoZWRTdHJpbmdJbXBsPiB7CisgICAgQ2FjaGVkVW5pcXVlZFN0cmluZ0ltcGwgdW5pcXVlZFN0
cmluZ0ltcGw7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJp
bmdJbXBsJiBpbXBsKQorICAgIHsKKyAgICAgICAgdW5pcXVlZFN0cmluZ0ltcGwuZW5jb2RlKGVu
Y29kZXIsIGltcGwpOworICAgIH0KKworICAgIFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuaXF1ZWRTdHJpbmdJbXBsLmRl
Y29kZShkZWNvZGVyKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nIDogcHVibGlj
IFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFN0cmluZywgQ2FjaGVkU3RyaW5nPiB7CisgICAgQ2FjaGVk
UmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiBpbXBsOworCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBp
bXBsLmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmlu
Zy5pbXBsKCkpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZGVjb2RlKERlY29kZXImIGRlY29kZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nKChSZWZQdHI8U3RyaW5nSW1wbD4p
aW1wbC5kZWNvZGUoZGVjb2RlcikpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFN0cmluZyYgZHN0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHN0ID0gZGVjb2Rl
KGRlY29kZXIpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRJZGVudGlmaWVyIDogcHVibGlj
IFZhcmlhYmxlTGVuZ3RoT2JqZWN0PElkZW50aWZpZXIsIENhY2hlZElkZW50aWZpZXI+IHsKKyAg
ICBDYWNoZWRTdHJpbmcgc3RyaW5nOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHN0cmluZy5l
bmNvZGUoZW5jb2RlciwgaWRlbnRpZmllci5zdHJpbmcoKSk7CisgICAgfQorCisgICAgSWRlbnRp
ZmllciBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmlu
ZyBzdHIgPSBzdHJpbmcuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoc3RyLmlzTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoKTsKKworICAgICAgICByZXR1cm4gSWRl
bnRpZmllcjo6ZnJvbVVpZCgmZGVjb2Rlci52bSgpLCAoVW5pcXVlZFN0cmluZ0ltcGwqKXN0ci5p
bXBsKCkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElkZW50
aWZpZXImIGlkZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgaWRlbnQgPSBkZWNvZGUoZGVjb2Rl
cik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDYWNoZWRPcHRp
b25hbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5
cGU8VD4+LCBDYWNoZWRPcHRpb25hbDxUPj4geworICAgIGJvb2wgaXNFbXB0eTsKKworICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdURjo6T3B0aW9uYWw8U291cmNlVHlw
ZTxUPj4mIHNvdXJjZSkKKyAgICB7CisgICAgICAgIGlzRW1wdHkgPSAhc291cmNlOworCisgICAg
ICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMtPnRl
bXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKnNvdXJjZSk7Cisg
ICAgfQorCisgICAgV1RGOjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICByZXR1cm4geyB0aGlzLT50ZW1wbGF0ZSBi
dWZmZXI8VD4oKS0+ZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgV1RGOjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiYgZHN0KSBjb25z
dAorICAgIHsKKyAgICAgICAgZHN0ID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VU
eXBlPFQ+PiYgc291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKCFzb3VyY2UpCisgICAgICAgICAg
ICBlbmNvZGUoZW5jb2RlciwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW5jb2RlKGVuY29kZXIsIHsgKnNvdXJjZSB9KTsKKyAgICB9CisKKyAgICBTb3VyY2VUeXBl
PFQ+KiBkZWNvZGVBc1B0cihEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1
cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICB9Cit9
OworCitzdHJ1Y3QgQ2FjaGVkU2ltcGxlSnVtcFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSwgQ2FjaGVkU2ltcGxlSnVtcFRhYmxlPiB7CisgICAgaW50
MzJfdCBtaW47CisgICAgQ2FjaGVkVmVjdG9yPGludDMyX3Q+IGJyYW5jaE9mZnNldHM7CisKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYganVtcFRhYmxlKQorICAgIHsKKyAgICAgICAgbWluID0ganVtcFRhYmxlLm1pbjsKKyAg
ICAgICAgYnJhbmNoT2Zmc2V0cy5lbmNvZGUoZW5jb2RlciwganVtcFRhYmxlLmJyYW5jaE9mZnNl
dHMpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBqdW1wVGFi
bGUubWluID0gbWluOworICAgICAgICBicmFuY2hPZmZzZXRzLmRlY29kZShkZWNvZGVyLCBqdW1w
VGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZFN0cmluZ0p1
bXBUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRTdHJpbmdKdW1wVGFibGUsIENh
Y2hlZFN0cmluZ0p1bXBUYWJsZT4geworICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENh
Y2hlZFN0cmluZ0ltcGw+LCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6IE9mZnNldExvY2F0aW9u
PiBvZmZzZXRUYWJsZTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUpCisgICAgeworICAgICAgICBvZmZz
ZXRUYWJsZS5lbmNvZGUoZW5jb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKKyAgICB9CisK
KyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYganVtcFRhYmxlKSBjb25zdAorICAgIHsKKyAgICAgICAgb2Zmc2V0VGFibGUuZGVjb2RlKGRl
Y29kZXIsIGp1bXBUYWJsZS5vZmZzZXRUYWJsZSk7CisgICAgfQorfTsKKworc3RydWN0IENhY2hl
ZFJhcmVEYXRhIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZENvZGVCbG9jazo6UmFyZURh
dGEsIENhY2hlZFJhcmVEYXRhPiB7CisgICAgQ2FjaGVkVmVjdG9yPFVubGlua2VkSGFuZGxlcklu
Zm8+IGV4Y2VwdGlvbkhhbmRsZXJzOworCisgICAgLy8gSnVtcCBUYWJsZXMKKyAgICBDYWNoZWRW
ZWN0b3I8Q2FjaGVkU2ltcGxlSnVtcFRhYmxlPiBzd2l0Y2hKdW1wVGFibGVzOworICAgIENhY2hl
ZFZlY3RvcjxDYWNoZWRTdHJpbmdKdW1wVGFibGU+IHN0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisK
KyAgICBDYWNoZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IGV4cHJl
c3Npb25JbmZvRmF0UG9zaXRpb25zOworCisgICAgQ2FjaGVkSGFzaE1hcDx1bnNpZ25lZCwgVW5s
aW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IHR5
cGVQcm9maWxlckluZm9NYXA7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQ+IG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOworCisKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURh
dGEmIHJhcmVEYXRhKQorICAgIHsKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlcnMuZW5jb2RlKGVu
Y29kZXIsIHJhcmVEYXRhLm1fZXhjZXB0aW9uSGFuZGxlcnMpOworICAgICAgICBzd2l0Y2hKdW1w
VGFibGVzLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX3N3aXRjaEp1bXBUYWJsZXMpOworICAg
ICAgICBzdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBleHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9u
cy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7
CisgICAgICAgIHR5cGVQcm9maWxlckluZm9NYXAuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1f
dHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAgIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNv
ZGVPZmZzZXRzLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX29wUHJvZmlsZUNvbnRyb2xGbG93
Qnl0ZWNvZGVPZmZzZXRzKTsKKyAgICB9CisKKyAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURh
dGEqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5r
ZWRDb2RlQmxvY2s6OlJhcmVEYXRhKiByYXJlRGF0YSA9IG5ldyBVbmxpbmtlZENvZGVCbG9jazo6
UmFyZURhdGEgeyB9OworICAgICAgICBleGNlcHRpb25IYW5kbGVycy5kZWNvZGUoZGVjb2Rlciwg
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMpOworICAgICAgICBzd2l0Y2hKdW1wVGFibGVz
LmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAg
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIGV4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmRl
Y29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7Cisg
ICAgICAgIHR5cGVQcm9maWxlckluZm9NYXAuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3R5
cGVQcm9maWxlckluZm9NYXApOworICAgICAgICBvcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2Rl
T2Zmc2V0cy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dC
eXRlY29kZU9mZnNldHMpOworICAgICAgICByZXR1cm4gcmFyZURhdGE7CisgICAgfQorCit9Owor
CitzdHJ1Y3QgQ2FjaGVkQml0VmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEJp
dFZlY3RvciwgQ2FjaGVkQml0VmVjdG9yPiB7CisgICAgdW5zaWduZWQgc2l6ZTsKKworICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yKQor
ICAgIHsKKyAgICAgICAgc2l6ZSA9IGJpdFZlY3Rvci5zaXplKCk7CisgICAgICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IHRoaXMtPmFsbG9jYXRlKGVuY29kZXIsIHNpemUpOworICAgICAgICBtZW1jcHko
YnVmZmVyLCBiaXRWZWN0b3IuYml0cygpLCBzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29k
ZShEZWNvZGVyJiwgQml0VmVjdG9yJiBiaXRWZWN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBi
aXRWZWN0b3IuZW5zdXJlU2l6ZShzaXplKTsKKyAgICAgICAgbWVtY3B5KGJpdFZlY3Rvci5iaXRz
KCksIHRoaXMtPmJ1ZmZlcigpLCBzaXplKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8VD46Okhhc2g+Citz
dHJ1Y3QgQ2FjaGVkSGFzaFNldCA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SGFzaFNldDxTb3VyY2VU
eXBlPFQ+LCBIYXNoQXJnPiwgQ2FjaGVkSGFzaFNldDxULCBIYXNoQXJnPj4geworICAgIENhY2hl
ZFZlY3RvcjxUPiBlbnRyaWVzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgSGFzaFNldDxTb3VyY2VUeXBlPFQ+LCBIYXNoQXJnPiYgc2V0KQorICAgIHsKKyAgICAg
ICAgU291cmNlVHlwZTxkZWNsdHlwZShlbnRyaWVzKT4gZW50cmllc1ZlY3RvcihzZXQuc2l6ZSgp
KTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRl
bSA6IHNldCkKKyAgICAgICAgICAgIGVudHJpZXNWZWN0b3JbaSsrXSA9IGl0ZW07CisgICAgICAg
IGVudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0b3IpOworICAgIH0KKworICAgIHZv
aWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hTZXQ8U291cmNlVHlwZTxUPiwgSGFzaEFy
Zz4mIHNldCkgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUoZW50cmll
cyk+IGVudHJpZXNWZWN0b3I7CisgICAgICAgIGVudHJpZXMuZGVjb2RlKGRlY29kZXIsIGVudHJp
ZXNWZWN0b3IpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBlbnRyaWVzVmVjdG9y
KQorICAgICAgICAgICAgc2V0LmFkZChpdGVtKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVk
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnksIENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5PiB7CisgICAgdW5zaWduZWQgY29uc3RhbnQ7CisgICAgQ2FjaGVkSGFzaFNldDxDYWNoZWRS
ZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+LCBJZGVudGlmaWVyUmVwSGFzaD4gc2V0Owor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29uc3RhbnRJZGVudGlm
aWVyU2V0RW50cnkmIGVudHJ5KQorICAgIHsKKyAgICAgICAgY29uc3RhbnQgPSBzdGQ6OmdldDwx
PihlbnRyeSk7CisgICAgICAgIHNldC5lbmNvZGUoZW5jb2Rlciwgc3RkOjpnZXQ8MD4oZW50cnkp
KTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpIGNvbnN0CisgICAgeworICAgICAgICBzdGQ6OmdldDwx
PihlbnRyeSkgPSBjb25zdGFudDsKKyAgICAgICAgc2V0LmRlY29kZShkZWNvZGVyLCBzdGQ6Omdl
dDwwPihlbnRyeSkpOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRWYXJpYWJsZUVudmlyb25t
ZW50IDogcHVibGljIENhY2hlZE9iamVjdDxWYXJpYWJsZUVudmlyb25tZW50LCBDYWNoZWRWYXJp
YWJsZUVudmlyb25tZW50PiB7CisKKyAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkOworICAg
IENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgVmFy
aWFibGVFbnZpcm9ubWVudEVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQ
dHI8VW5pcXVlZFN0cmluZ0ltcGw+PiwgVmFyaWFibGVFbnZpcm9ubWVudEVudHJ5SGFzaFRyYWl0
cz4gbWFwOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCYgZW52KQorICAgIHsKKyAgICAgICAgaXNFdmVyeXRoaW5nQ2FwdHVyZWQg
PSBlbnYubV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKKyAgICAgICAgbWFwLmVuY29kZShlbmNvZGVy
LCBlbnYubV9tYXApOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudikgY29uc3QKKyAgICB7CisgICAgICAgIGVudi5tX2lz
RXZlcnl0aGluZ0NhcHR1cmVkID0gaXNFdmVyeXRoaW5nQ2FwdHVyZWQ7CisgICAgICAgIG1hcC5k
ZWNvZGUoZGVjb2RlciwgZW52Lm1fbWFwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBTb3VyY2UgPSBTb3VyY2VUeXBlPFQ+Pgorc3RydWN0IENhY2hlZEFycmF5
IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZSosIENhY2hlZEFycmF5PFQsIFNv
dXJjZT4+IHsKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2Uq
IGFycmF5LCB1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgVCogZHN0ID0gdGhpcy0+dGVt
cGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIs
IGRzdFtpXSwgYXJyYXlbaV0pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlKiBhcnJheSwgdW5z
aWduZWQgc2l6ZSwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgVCog
YnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29k
ZXIsIGJ1ZmZlcltpXSwgYXJyYXlbaV0sIGFyZ3MuLi4pOworICAgIH0KK307CisKK3N0cnVjdCBD
YWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U2NvcGVkQXJn
dW1lbnRzVGFibGUsIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiB7CisgICAgdWludDMyX3Qg
bGVuZ3RoOworICAgIENhY2hlZEFycmF5PFNjb3BlT2Zmc2V0PiBhcmd1bWVudHM7CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTY29wZWRBcmd1bWVudHNUYWJsZSYg
c2NvcGVkQXJndW1lbnRzVGFibGUpCisgICAgeworICAgICAgICBsZW5ndGggPSBzY29wZWRBcmd1
bWVudHNUYWJsZS5tX2xlbmd0aDsKKyAgICAgICAgYXJndW1lbnRzLmVuY29kZShlbmNvZGVyLCBz
Y29wZWRBcmd1bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSwgbGVuZ3RoKTsKKyAgICB9CisK
KyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0
CisgICAgeworICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1lbnRzVGFi
bGUgPSBTY29wZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSwgbGVuZ3RoKTsK
KyAgICAgICAgYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS0+
bV9hcmd1bWVudHMuZ2V0KCksIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBzY29wZWRBcmd1bWVu
dHNUYWJsZTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSA6IHB1
YmxpYyBDYWNoZWRPYmplY3Q8U3ltYm9sVGFibGVFbnRyeSwgQ2FjaGVkU3ltYm9sVGFibGVFbnRy
eT4geworICAgIGludHB0cl90IGJpdHM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29u
c3QgU3ltYm9sVGFibGVFbnRyeSYgc3ltYm9sVGFibGVFbnRyeSkKKyAgICB7CisgICAgICAgIGJp
dHMgPSBzeW1ib2xUYWJsZUVudHJ5Lm1fYml0cyB8IFN5bWJvbFRhYmxlRW50cnk6OlNsaW1GbGFn
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBTeW1ib2xUYWJsZUVudHJ5JiBz
eW1ib2xUYWJsZUVudHJ5KSBjb25zdAorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGVFbnRyeS5t
X2JpdHMgPSBiaXRzOworICAgIH0KK307CisKK3N0cnVjdCBDYWNoZWRTeW1ib2xUYWJsZSA6IHB1
YmxpYyBDYWNoZWRPYmplY3Q8U3ltYm9sVGFibGUsIENhY2hlZFN5bWJvbFRhYmxlPiB7CisgICAg
Q2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+LCBDYWNo
ZWRTeW1ib2xUYWJsZUVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8
VW5pcXVlZFN0cmluZ0ltcGw+PiwgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHM+IG1hcDsKKyAg
ICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldDsKKyAgICB1bnNpZ25lZCB1c2VzTm9uU3RyaWN0
RXZhbCA6IDE7CisgICAgdW5zaWduZWQgbmVzdGVkTGV4aWNhbFNjb3BlIDogMTsKKyAgICB1bnNp
Z25lZCBzY29wZVR5cGUgOiAzOworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGNhY2hlZCB0
aGlzIGV2ZW50dWFsbHk/CisgICAgLy8gQ2FjaGVkUHRyPFN5bWJvbFRhYmxlUmFyZURhdGE+IHJh
cmVEYXRhOworICAgIENhY2hlZFB0cjxDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZT4gYXJndW1l
bnRzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFzeW1ib2xUYWJsZS5tX3Jh
cmVEYXRhKTsKKyAgICAgICAgbWFwLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX21hcCk7
CisgICAgICAgIG1heFNjb3BlT2Zmc2V0ID0gc3ltYm9sVGFibGUubV9tYXhTY29wZU9mZnNldDsK
KyAgICAgICAgdXNlc05vblN0cmljdEV2YWwgPSBzeW1ib2xUYWJsZS5tX3VzZXNOb25TdHJpY3RF
dmFsOworICAgICAgICBuZXN0ZWRMZXhpY2FsU2NvcGUgPSBzeW1ib2xUYWJsZS5tX25lc3RlZExl
eGljYWxTY29wZTsKKyAgICAgICAgc2NvcGVUeXBlID0gc3ltYm9sVGFibGUubV9zY29wZVR5cGU7
CisgICAgICAgIGFyZ3VtZW50cy5lbmNvZGUoZW5jb2Rlciwgc3ltYm9sVGFibGUubV9hcmd1bWVu
dHMuZ2V0KCkpOworICAgIH0KKworICAgIFN5bWJvbFRhYmxlKiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IFN5
bWJvbFRhYmxlOjpjcmVhdGUoZGVjb2Rlci52bSgpKTsKKyAgICAgICAgbWFwLmRlY29kZShkZWNv
ZGVyLCBzeW1ib2xUYWJsZS0+bV9tYXApOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9tYXhTY29w
ZU9mZnNldCA9IG1heFNjb3BlT2Zmc2V0OworICAgICAgICBzeW1ib2xUYWJsZS0+bV91c2VzTm9u
U3RyaWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9u
ZXN0ZWRMZXhpY2FsU2NvcGUgPSBuZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAgICAgIHN5bWJvbFRh
YmxlLT5tX3Njb3BlVHlwZSA9IHNjb3BlVHlwZTsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzVGFi
bGUqIHNjb3BlZEFyZ3VtZW50c1RhYmxlID0gYXJndW1lbnRzLmRlY29kZShkZWNvZGVyKTsKKyAg
ICAgICAgaWYgKHNjb3BlZEFyZ3VtZW50c1RhYmxlKQorICAgICAgICAgICAgc3ltYm9sVGFibGUt
Pm1fYXJndW1lbnRzLnNldChkZWNvZGVyLnZtKCksIHN5bWJvbFRhYmxlLCBzY29wZWRBcmd1bWVu
dHNUYWJsZSk7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZTsKKyAgICB9Cit9OworCitzdHJ1
Y3QgQ2FjaGVkSlNWYWx1ZTsKK3N0cnVjdCBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHkgOiBwdWJs
aWMgQ2FjaGVkT2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5LCBDYWNoZWRJbW11dGFibGVCdXR0
ZXJmbHk+IHsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlOworICAgIHVuc2lnbmVkIGxl
bmd0aDsKKyAgICB1bmlvbiB7CisgICAgICAgIENhY2hlZEFycmF5PGRvdWJsZT4gY2FjaGVkRG91
YmxlczsKKyAgICAgICAgQ2FjaGVkQXJyYXk8Q2FjaGVkSlNWYWx1ZSwgV3JpdGVCYXJyaWVyPFVu
a25vd24+PiBjYWNoZWRWYWx1ZXM7CisgICAgfTsKKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIEpTSW1tdXRhYmxlQnV0dGVyZmx5JiBpbW11dGFibGVCdXR0ZXJmbHkpCisgICAg
eworICAgICAgICBsZW5ndGggPSBpbW11dGFibGVCdXR0ZXJmbHkubGVuZ3RoKCk7CisgICAgICAg
IGluZGV4aW5nVHlwZSA9IGltbXV0YWJsZUJ1dHRlcmZseS5pbmRleGluZ01vZGUoKTsgLy8gdGhp
cyBpcyBjb25mdXNpbmcsIG5vdCBzdXJlIHdoeSB3ZSBoYXZlIHRvIHVzZSBpbmRleGluZ01vZGUg
dnMgaW5kZXhpbmdUeXBlCisgICAgICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkKKyAg
ICAgICAgICAgIGNhY2hlZERvdWJsZXMuZW5jb2RlKGVuY29kZXIsIGltbXV0YWJsZUJ1dHRlcmZs
eS50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBsZW5ndGgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjYWNoZWRWYWx1ZXMuZW5jb2RlKGVuY29kZXIsIGltbXV0
YWJsZUJ1dHRlcmZseS50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBsZW5ndGgp
OworICAgIH0KKworICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFi
bGVCdXR0ZXJmbHkgPSBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y3JlYXRlKGRlY29kZXIudm0oKSwg
aW5kZXhpbmdUeXBlLCBsZW5ndGgpOworICAgICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlw
ZSkpCisgICAgICAgICAgICBjYWNoZWREb3VibGVzLmRlY29kZShkZWNvZGVyLCBpbW11dGFibGVC
dXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIGxlbmd0
aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FjaGVk
VmFsdWVzLmRlY29kZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5KCkt
PmNvbnRpZ3VvdXMoKS5kYXRhKCksIGxlbmd0aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAg
ICAgcmV0dXJuIGltbXV0YWJsZUJ1dHRlcmZseTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVk
UmVnRXhwIDogcHVibGljIENhY2hlZE9iamVjdDxSZWdFeHAsIENhY2hlZFJlZ0V4cD4geworICAg
IENhY2hlZFN0cmluZyBwYXR0ZXJuU3RyaW5nOworICAgIFJlZ0V4cEZsYWdzIGZsYWdzOworCisg
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVnRXhwJiByZWdFeHApCisg
ICAgeworICAgICAgICBwYXR0ZXJuU3RyaW5nLmVuY29kZShlbmNvZGVyLCByZWdFeHAubV9wYXR0
ZXJuU3RyaW5nKTsKKyAgICAgICAgZmxhZ3MgPSByZWdFeHAubV9mbGFnczsKKyAgICB9CisKKyAg
ICBSZWdFeHAqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
U3RyaW5nIHBhdHRlcm4geyBwYXR0ZXJuU3RyaW5nLmRlY29kZShkZWNvZGVyKSB9OworICAgICAg
ICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBwYXR0ZXJuLCBmbGFncyk7Cisg
ICAgfQorfTsKKworc3RydWN0IENhY2hlZFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLCBDYWNoZWRUZW1wbGF0ZU9i
amVjdERlc2NyaXB0b3I+IHsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkU3RyaW5nLCA0PiByYXdT
dHJpbmdzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRPcHRpb25hbDxDYWNoZWRTdHJpbmc+LCA0
PiBjb29rZWRTdHJpbmdzOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yJiB0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IpCisg
ICAgeworICAgICAgICByYXdTdHJpbmdzLmVuY29kZShlbmNvZGVyLCB0ZW1wbGF0ZU9iamVjdERl
c2NyaXB0b3IucmF3U3RyaW5ncygpKTsKKyAgICAgICAgY29va2VkU3RyaW5ncy5lbmNvZGUoZW5j
b2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNvb2tlZFN0cmluZ3MoKSk7CisgICAgfQor
CisgICAgUmVmPFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4gZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OlN0cmlu
Z1ZlY3RvciBkZWNvZGVkUmF3U3RyaW5nczsKKyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yOjpPcHRpb25hbFN0cmluZ1ZlY3RvciBkZWNvZGVkQ29va2VkU3RyaW5nczsKKyAgICAgICAg
cmF3U3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZFJhd1N0cmluZ3MpOworICAgICAgICBj
b29rZWRTdHJpbmdzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkQ29va2VkU3RyaW5ncyk7CisgICAg
ICAgIHJldHVybiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShXVEZNb3ZlKGRlY29k
ZWRSYXdTdHJpbmdzKSwgV1RGTW92ZShkZWNvZGVkQ29va2VkU3RyaW5ncykpOworICAgIH0KK307
CisKK3N0cnVjdCBDYWNoZWRCaWdJbnQgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SlNC
aWdJbnQsIENhY2hlZEJpZ0ludD4geworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBib29sIHNp
Z247CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0JpZ0ludCYgYmlnSW50
KQorICAgIHsKKyAgICAgICAgbGVuZ3RoID0gYmlnSW50Lmxlbmd0aCgpOworICAgICAgICBzaWdu
ID0gYmlnSW50LnNpZ24oKTsKKworICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkg
KiBsZW5ndGg7CisgICAgICAgIHRoaXMtPmFsbG9jYXRlKGVuY29kZXIsIHNpemUpOworICAgICAg
ICBtZW1jcHkodGhpcy0+YnVmZmVyKCksIGJpZ0ludC5kYXRhU3RvcmFnZSgpLCBzaXplKTsKKyAg
ICB9CisKKyAgICBKU0JpZ0ludCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhV
bmNoZWNrZWQoZGVjb2Rlci52bSgpLCBsZW5ndGgpOworICAgICAgICBiaWdJbnQtPnNldFNpZ24o
c2lnbik7CisgICAgICAgIG1lbWNweShiaWdJbnQtPmRhdGFTdG9yYWdlKCksIHRoaXMtPmJ1ZmZl
cigpLCBzaXplb2YoSlNCaWdJbnQ6OkRpZ2l0KSAqIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBi
aWdJbnQ7CisgICAgfQorfTsKKworc3RydWN0IENhY2hlZEpTVmFsdWUgOiBwdWJsaWMgVmFyaWFi
bGVMZW5ndGhPYmplY3Q8V3JpdGVCYXJyaWVyPFVua25vd24+LCBDYWNoZWRKU1ZhbHVlPiB7Cisg
ICAgZW51bSBjbGFzcyBFbmNvZGVkVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBKU1ZhbHVlLAor
ICAgICAgICBTeW1ib2xUYWJsZSwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBJbW11dGFibGVC
dXR0ZXJmbHksCisgICAgICAgIFJlZ0V4cCwKKyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yLAorICAgICAgICBCaWdJbnQsCisgICAgfTsKKworICAgIEVuY29kZWRUeXBlIHR5cGU7CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gdmFsdWUpCisgICAgeworICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZS5nZXQoKTsKKwor
ICAgICAgICBpZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHR5
cGUgPSBFbmNvZGVkVHlwZTo6SlNWYWx1ZTsKKyAgICAgICAgICAgICp0aGlzLT5hbGxvY2F0ZTxF
bmNvZGVkSlNWYWx1ZT4oZW5jb2RlcikgPSBKU1ZhbHVlOjplbmNvZGUodik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2LmFzQ2VsbCgp
OworICAgICAgICBWTSYgdm0gPSBlbmNvZGVyLnZtKCk7CisKKyAgICAgICAgaWYgKGF1dG8qIHN5
bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KHZtLCBjZWxsKSkgeworICAg
ICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpTeW1ib2xUYWJsZTsKKyAgICAgICAgICAgIHRo
aXMtPmFsbG9jYXRlPENhY2hlZFN5bWJvbFRhYmxlPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIs
ICpzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYXV0byogc3RyaW5nID0ganNEeW5hbWljQ2FzdDxKU1N0cmluZyo+KHZtLCBjZWxsKSkg
eworICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpTdHJpbmc7CisgICAgICAgICAgICBT
dHJpbmdJbXBsKiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZSgpLmltcGwoKTsKKyAgICAgICAg
ICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPihlbmNvZGVyKS0+ZW5j
b2RlKGVuY29kZXIsICppbXBsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhdXRvKiBpbW11dGFibGVCdXR0ZXJmbHkgPSBqc0R5bmFtaWNDYXN0PEpTSW1t
dXRhYmxlQnV0dGVyZmx5Kj4odm0sIGNlbGwpKSB7CisgICAgICAgICAgICB0eXBlID0gRW5jb2Rl
ZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseTsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENh
Y2hlZEltbXV0YWJsZUJ1dHRlcmZseT4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqaW1tdXRh
YmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChhdXRvKiByZWdleHAgPSBqc0R5bmFtaWNDYXN0PFJlZ0V4cCo+KHZtLCBjZWxsKSkgewor
ICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBlOjpSZWdFeHA7CisgICAgICAgICAgICB0aGlz
LT5hbGxvY2F0ZTxDYWNoZWRSZWdFeHA+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKnJlZ2V4
cCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byog
dGVtcGxhdGVPYmplY3REZXNjcmlwdG9yID0ganNEeW5hbWljQ2FzdDxKU1RlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvcio+KHZtLCBjZWxsKSkgeworICAgICAgICAgICAgdHlwZSA9IEVuY29kZWRUeXBl
OjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxD
YWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2Rlciwg
dGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIGJpZ0ludCA9IGpzRHluYW1pY0Nh
c3Q8SlNCaWdJbnQqPih2bSwgY2VsbCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBFbmNvZGVkVHlw
ZTo6QmlnSW50OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkQmlnSW50PihlbmNv
ZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpiaWdJbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlLCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSlNWYWx1
ZSB2OworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6
SlNWYWx1ZToKKyAgICAgICAgICAgIHYgPSBKU1ZhbHVlOjpkZWNvZGUoKnRoaXMtPmJ1ZmZlcjxF
bmNvZGVkSlNWYWx1ZT4oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNv
ZGVkVHlwZTo6U3ltYm9sVGFibGU6CisgICAgICAgICAgICB2ID0gdGhpcy0+YnVmZmVyPENhY2hl
ZFN5bWJvbFRhYmxlPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6U3RyaW5nOiB7CisgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogaW1wbCA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4oKS0+
ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAgdiA9IEpTU3RyaW5nOjpjcmVhdGUoZGVjb2Rl
ci52bSgpLCBhZG9wdFJlZigqaW1wbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OgorICAgICAgICAg
ICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHk+KCktPmRlY29kZShk
ZWNvZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpS
ZWdFeHA6CisgICAgICAgICAgICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZFJlZ0V4cD4oKS0+ZGVj
b2RlKGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5
cGU6OlRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjoKKyAgICAgICAgICAgIHYgPSBKU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvcjo6Y3JlYXRlKGRlY29kZXIudm0oKSwgdGhpcy0+YnVmZmVyPENhY2hl
ZFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4oKS0+ZGVjb2RlKGRlY29kZXIpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpCaWdJbnQ6CisgICAgICAgICAg
ICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZEJpZ0ludD4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHZhbHVlLnNldChkZWNvZGVy
LnZtKCksIG93bmVyLCB2KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkSW5zdHJ1Y3Rpb25T
dHJlYW0gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PEluc3RydWN0aW9uU3RyZWFtLCBDYWNoZWRJbnN0
cnVjdGlvblN0cmVhbT4geworICAgIENhY2hlZFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4gaW5zdHJ1Y3Rpb25zOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIHN0cmVhbSkKKyAgICB7CisgICAgICAgIGlu
c3RydWN0aW9ucy5lbmNvZGUoZW5jb2Rlciwgc3RyZWFtLm1faW5zdHJ1Y3Rpb25zKTsKKyAgICB9
CisKKyAgICBJbnN0cnVjdGlvblN0cmVhbSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0
CisgICAgeworICAgICAgICBWZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
IGluc3RydWN0aW9uc1ZlY3RvcjsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVy
LCBpbnN0cnVjdGlvbnNWZWN0b3IpOworICAgICAgICByZXR1cm4gbmV3IEluc3RydWN0aW9uU3Ry
ZWFtKFdURk1vdmUoaW5zdHJ1Y3Rpb25zVmVjdG9yKSk7CisgICAgfQorfTsKKworc3RydWN0IENh
Y2hlZE1ldGFkYXRhVGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkTWV0YWRhdGFU
YWJsZSwgQ2FjaGVkTWV0YWRhdGFUYWJsZT4geworICAgIGJvb2wgaGFzTWV0YWRhdGE7CisgICAg
c3RkOjphcnJheTx1bnNpZ25lZCwgVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxl
RW50cmllcz4gbWV0YWRhdGE7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgVW5s
aW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YVRhYmxlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1ldGFkYXRhVGFibGUubV9pc0ZpbmFsaXplZCk7CisgICAgICAgIGhhc01ldGFkYXRhID0gbWV0
YWRhdGFUYWJsZS5tX2hhc01ldGFkYXRhOworICAgICAgICBpZiAoIWhhc01ldGFkYXRhKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBVbmxpbmtlZE1ldGFk
YXRhVGFibGU6OnNfb2Zmc2V0VGFibGVFbnRyaWVzOyBpLS07KQorICAgICAgICAgICAgbWV0YWRh
dGFbaV0gPSBtZXRhZGF0YVRhYmxlLmJ1ZmZlcigpW2ldOworICAgIH0KKworICAgIHZvaWQgZGVj
b2RlKERlY29kZXImLCBVbmxpbmtlZE1ldGFkYXRhVGFibGUmIG1ldGFkYXRhVGFibGUpIGNvbnN0
CisgICAgeworICAgICAgICBtZXRhZGF0YVRhYmxlLm1faXNGaW5hbGl6ZWQgPSB0cnVlOworICAg
ICAgICBtZXRhZGF0YVRhYmxlLm1faXNMaW5rZWQgPSBmYWxzZTsKKyAgICAgICAgbWV0YWRhdGFU
YWJsZS5tX2hhc01ldGFkYXRhID0gaGFzTWV0YWRhdGE7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IFVubGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM7IGktLTspCisg
ICAgICAgICAgICBtZXRhZGF0YVRhYmxlLmJ1ZmZlcigpW2ldID0gbWV0YWRhdGFbaV07CisgICAg
fQorfTsKKworc3RydWN0IENhY2hlZFNvdXJjZU9yaWdpbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8
U291cmNlT3JpZ2luLCBDYWNoZWRTb3VyY2VPcmlnaW4+IHsKKyAgICBDYWNoZWRTdHJpbmcgc3Ry
aW5nOworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlT3Jp
Z2luJiBzb3VyY2VPcmlnaW4pCisgICAgeworICAgICAgICBzdHJpbmcuZW5jb2RlKGVuY29kZXIs
IHNvdXJjZU9yaWdpbi5zdHJpbmcoKSk7CisgICAgfQorCisgICAgU291cmNlT3JpZ2luIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNvdXJjZU9y
aWdpbiB7IHN0cmluZy5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2Fj
aGVkVGV4dFBvc2l0aW9uIDogcHVibGljIENhY2hlZE9iamVjdDxUZXh0UG9zaXRpb24sIENhY2hl
ZFRleHRQb3NpdGlvbj4geworICAgIGludCBsaW5lOworICAgIGludCBjb2x1bW47CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiwgVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbikKKyAgICB7Cisg
ICAgICAgIGxpbmUgPSB0ZXh0UG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOworICAgICAg
ICBjb2x1bW4gPSB0ZXh0UG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7CisgICAgfQor
CisgICAgVGV4dFBvc2l0aW9uIGRlY29kZShEZWNvZGVyJikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBUZXh0UG9zaXRpb24geyBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxp
bmUpLCBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbHVtbikgfTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBDYWNoZWRUeXBlPgorc3Ry
dWN0IENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJj
ZSwgQ2FjaGVkVHlwZT4geworICAgIGJvb2wgdmFsaWRhdGVkIDogMTsKKyAgICBDYWNoZWRTb3Vy
Y2VPcmlnaW4gc291cmNlT3JpZ2luOworICAgIENhY2hlZFN0cmluZyB1cmw7CisgICAgQ2FjaGVk
U3RyaW5nIHNvdXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRTdHJpbmcgc291cmNlTWFwcGlu
Z1VSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbjsKKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBz
b3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIHZhbGlkYXRlZCA9IHNvdXJjZVByb3ZpZGVy
LmlzVmFsaWQoKTsKKyAgICAgICAgc291cmNlT3JpZ2luLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQ
cm92aWRlci5zb3VyY2VPcmlnaW4oKSk7CisgICAgICAgIHVybC5lbmNvZGUoZW5jb2Rlciwgc291
cmNlUHJvdmlkZXIudXJsKCkpOworICAgICAgICBzb3VyY2VVUkxEaXJlY3RpdmUuZW5jb2RlKGVu
Y29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZVVSTCgpKTsKKyAgICAgICAgc291cmNlTWFwcGlu
Z1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlTWFwcGlu
Z1VSTCgpKTsKKyAgICAgICAgc3RhcnRQb3NpdGlvbi5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJv
dmlkZXIuc3RhcnRQb3NpdGlvbigpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAodmFsaWRhdGVkKQorICAgICAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0VmFs
aWQoKTsKKyAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNlVVJMRGlyZWN0aXZlKHNvdXJj
ZVVSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOworICAgICAgICBzb3VyY2VQcm92aWRlci5z
ZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZGVj
b2RlKGRlY29kZXIpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkU3RyaW5nU291cmNlUHJv
dmlkZXIgOiBwdWJsaWMgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92
aWRlciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0gQ2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRlciwgQ2FjaGVkU3RyaW5n
U291cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkU3RyaW5nIHNvdXJjZTsKKworICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVyJiBzb3Vy
Y2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQ
cm92aWRlcik7CisgICAgICAgIHNvdXJjZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIu
c291cmNlKCkudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgU3RyaW5nU291cmNlUHJvdmlkZXIq
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGUgc291cmNl
VHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBkZWNvZGVkU291cmNlID0gc291cmNl
LmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRTb3VyY2VPcmln
aW4gPSBzb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOworICAgICAgICBTdHJpbmcgZGVjb2Rl
ZFVSTCA9IHVybC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFRleHRQb3NpdGlvbiBkZWNvZGVk
U3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24uZGVjb2RlKGRlY29kZXIpOworCisgICAgICAg
IFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVSTChV
UkwoKSwgZGVjb2RlZFVSTCksIGRlY29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsKKyAg
ICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuICZzb3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CisgICAgfQorfTsKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKK3N0cnVjdCBDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVy
IDogcHVibGljIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8V2ViQXNzZW1ibHlTb3VyY2VQcm92
aWRlciwgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4geworICAgIHVzaW5nIEJhc2Ug
PSBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENh
Y2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+OworCisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJB
c3NlbWJseVNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJh
c2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIGRhdGEuZW5jb2Rl
KGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLmRhdGEoKSk7CisgICAgfQorCisgICAgV2ViQXNzZW1i
bHlTb3VyY2VQcm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBWZWN0b3I8dWludDhfdD4gZGVjb2RlZERhdGE7CisgICAgICAgIFNvdXJjZU9yaWdp
biBkZWNvZGVkU291cmNlT3JpZ2luID0gc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKKyAg
ICAgICAgU3RyaW5nIGRlY29kZWRVUkwgPSB1cmwuZGVjb2RlKGRlY29kZXIpOworCisgICAgICAg
IGRhdGEuZGVjb2RlKGRlY29kZXIsIGRlY29kZWREYXRhKTsKKworICAgICAgICBSZWY8V2ViQXNz
ZW1ibHlTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkRGF0YSksIGRlY29kZWRTb3VyY2VPcmlnaW4s
IFVSTChVUkwoKSwgZGVjb2RlZFVSTCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwg
c291cmNlUHJvdmlkZXIuZ2V0KCkpOworCisgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIu
bGVha1JlZigpOworICAgIH0KK307CisjZW5kaWYKKworc3RydWN0IENhY2hlZFNvdXJjZVByb3Zp
ZGVyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZVByb3ZpZGVyLCBDYWNoZWRT
b3VyY2VQcm92aWRlcj4geworICAgIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBl
OworCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlk
ZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgc291cmNlVHlwZSA9IHNvdXJjZVBy
b3ZpZGVyLnNvdXJjZVR5cGUoKTsKKyAgICAgICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7CisgICAg
ICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNl
IFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgdGhpcy0+YWxs
b2NhdGU8Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2Rl
ciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmdTb3VyY2VQcm92aWRlciY+KHNvdXJjZVBy
b3ZpZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseToKKyAgICAg
ICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+KGVu
Y29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXZWJBc3NlbWJs
eVNvdXJjZVByb3ZpZGVyJj4oc291cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
I2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgU291cmNlUHJvdmlkZXIqIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChzb3VyY2VU
eXBlKSB7CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgor
ICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAg
ICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj4oKS0+ZGVj
b2RlKGRlY29kZXIsIHNvdXJjZVR5cGUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAg
ICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5OgorICAgICAgICAg
ICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPigp
LT5kZWNvZGUoZGVjb2Rlcik7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2UsIHR5cGVuYW1lIENhY2hlVHlwZT4KK3N0cnVjdCBDYWNo
ZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlLCAg
Q2FjaGVUeXBlPiB7CisgICAgQ2FjaGVkUHRyPENhY2hlZFNvdXJjZVByb3ZpZGVyPiBwcm92aWRl
cjsKKyAgICBpbnQgc3RhcnRPZmZzZXQ7CisgICAgaW50IGVuZE9mZnNldDsKKworICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkU291cmNlQ29kZSYgc291cmNl
Q29kZSkKKyAgICB7CisgICAgICAgIHByb3ZpZGVyLmVuY29kZShlbmNvZGVyLCBzb3VyY2VDb2Rl
Lm1fcHJvdmlkZXIuZ2V0KCkpOworICAgICAgICBzdGFydE9mZnNldCA9IHNvdXJjZUNvZGUuc3Rh
cnRPZmZzZXQoKTsKKyAgICAgICAgZW5kT2Zmc2V0ID0gc291cmNlQ29kZS5lbmRPZmZzZXQoKTsK
KyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZFNvdXJj
ZUNvZGUmIHNvdXJjZUNvZGUpIGNvbnN0CisgICAgeworICAgICAgICBzb3VyY2VDb2RlLm1fcHJv
dmlkZXIgPSBwcm92aWRlci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIHNvdXJjZUNvZGUubV9z
dGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0OworICAgICAgICBzb3VyY2VDb2RlLm1fZW5kT2Zmc2V0
ID0gZW5kT2Zmc2V0OworICAgIH0KK307CisKKworc3RydWN0IENhY2hlZFVubGlua2VkU291cmNl
Q29kZSA6IHB1YmxpYyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxVbmxpbmtlZFNvdXJj
ZUNvZGUsIENhY2hlZFVubGlua2VkU291cmNlQ29kZT4geyB9OworCitzdHJ1Y3QgQ2FjaGVkU291
cmNlQ29kZSA6IHB1YmxpYyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxTb3VyY2VDb2Rl
LCBDYWNoZWRTb3VyY2VDb2RlPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlPFNvdXJjZUNvZGUsIENhY2hlZFNvdXJjZUNvZGU+OworCisgICAgaW50IGZp
cnN0TGluZTsKKyAgICBpbnQgc3RhcnRDb2x1bW47CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAg
QmFzZTo6ZW5jb2RlKGVuY29kZXIsIHNvdXJjZUNvZGUpOworICAgICAgICBmaXJzdExpbmUgPSBz
b3VyY2VDb2RlLmZpcnN0TGluZSgpLnplcm9CYXNlZEludCgpOworICAgICAgICBzdGFydENvbHVt
biA9IHNvdXJjZUNvZGUuc3RhcnRDb2x1bW4oKS56ZXJvQmFzZWRJbnQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSBj
b25zdAorICAgIHsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZUNvZGUpOwor
ICAgICAgICBzb3VyY2VDb2RlLm1fZmlyc3RMaW5lID0gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9C
YXNlZEludChmaXJzdExpbmUpOworICAgICAgICBzb3VyY2VDb2RlLm1fc3RhcnRDb2x1bW4gPSBP
cmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KHN0YXJ0Q29sdW1uKTsKKyAgICB9Cit9Owor
CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSwgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPiB7CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUmKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZGVjb2RlKERlY29kZXImKSBj
b25zdDsKKworICAgIHVuc2lnbmVkIGZpcnN0TGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBsaW5l
Q291bnQ7CisgICAgdW5zaWduZWQgdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKKyAgICB1bnNp
Z25lZCB1bmxpbmtlZEJvZHlTdGFydENvbHVtbjsKKyAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlF
bmRDb2x1bW47CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgc291cmNl
TGVuZ3RoOworICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICB1bnNpZ25l
ZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgdHlwZVByb2ZpbGluZ0Vu
ZE9mZnNldDsKKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudDsKKyAgICBDb2RlRmVhdHVyZXMg
ZmVhdHVyZXM7CisgICAgU291cmNlUGFyc2VNb2RlIHNvdXJjZVBhcnNlTW9kZTsKKyAgICB1bnNp
Z25lZCBpc0luU3RyaWN0Q29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgaGFzQ2FwdHVyZWRWYXJp
YWJsZXMgOiAxOworICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICB1bnNp
Z25lZCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQg
Y29uc3RydWN0QWJpbGl0eTogMTsKKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQgOiAyOwor
ICAgIHVuc2lnbmVkIGZ1bmN0aW9uTW9kZSA6IDI7IC8vIEZ1bmN0aW9uTW9kZQorICAgIHVuc2ln
bmVkIHNjcmlwdE1vZGU6IDE7IC8vIEpTUGFyc2VyU2NyaXB0TW9kZQorICAgIHVuc2lnbmVkIHN1
cGVyQmluZGluZyA6IDE7CisgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlOiAyOworCisg
ICAgQ2FjaGVkU291cmNlQ29kZSBjbGFzc1NvdXJjZTsKKworICAgIENhY2hlZElkZW50aWZpZXIg
bmFtZTsKKyAgICBDYWNoZWRJZGVudGlmaWVyIGVjbWFOYW1lOworICAgIENhY2hlZElkZW50aWZp
ZXIgaW5mZXJyZWROYW1lOworCisgICAgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudCBwYXJlbnRT
Y29wZVREWlZhcmlhYmxlczsKKworICAgIENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlv
bkNvZGVCbG9jaywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gdW5saW5rZWRDb2RlQmxvY2tG
b3JDYWxsOworICAgIENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkNvZGVCbG9jaywg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRD
b2RlQmxvY2tUeXBlPgorc3RydWN0IENhY2hlZENvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT4geworICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayYpOworICAgIHZvaWQgZGVjb2RlKERl
Y29kZXImLCBVbmxpbmtlZENvZGVCbG9jayYpIGNvbnN0OworCisgICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisKKyAgICB1bnNpZ25lZCB1c2Vz
RXZhbCA6IDE7CisgICAgdW5zaWduZWQgaXNTdHJpY3RNb2RlIDogMTsKKyAgICB1bnNpZ25lZCBp
c0NvbnN0cnVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBoYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7
CisgICAgdW5zaWduZWQgaXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAgIHVuc2lnbmVkIHN1cGVy
QmluZGluZyA6IDE7CisgICAgdW5zaWduZWQgc2NyaXB0TW9kZTogMTsKKyAgICB1bnNpZ25lZCBp
c0Fycm93RnVuY3Rpb25Db250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCBpc0NsYXNzQ29udGV4dCA6
IDE7CisgICAgdW5zaWduZWQgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyA6IDE7Cisg
ICAgdW5zaWduZWQgY29uc3RydWN0b3JLaW5kIDogMjsKKyAgICB1bnNpZ25lZCBkZXJpdmVkQ29u
dGV4dFR5cGUgOiAyOworICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlwZSA6IDI7CisgICAgdW5z
aWduZWQgaGFzVGFpbENhbGxzIDogMTsKKworICAgIHVuc2lnbmVkIGxpbmVDb3VudDsKKyAgICB1
bnNpZ25lZCBlbmRDb2x1bW47CisKKyAgICBpbnQgbnVtVmFyczsKKyAgICBpbnQgbnVtQ2FsbGVl
TG9jYWxzOworICAgIGludCBudW1QYXJhbWV0ZXJzOworCisgICAgQ29kZUZlYXR1cmVzIGZlYXR1
cmVzOworICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGU7CisgICAgQ29kZVR5cGUgY29kZVR5
cGU7CisKKyAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBMaW5rVGltZUNvbnN0YW50Q291bnQ+IGxp
bmtUaW1lQ29uc3RhbnRzOworICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbWV0YWRhdGE7CisKKyAg
ICBDYWNoZWRPcHRpb25hbDxDYWNoZWRSYXJlRGF0YT4gcmFyZURhdGE7CisKKyAgICBDYWNoZWRT
dHJpbmcgc291cmNlVVJMRGlyZWN0aXZlOworICAgIENhY2hlZFN0cmluZyBzb3VyY2VNYXBwaW5n
VVJMRGlyZWN0aXZlOworCisgICAgQ2FjaGVkUHRyPENhY2hlZEluc3RydWN0aW9uU3RyZWFtPiBp
bnN0cnVjdGlvbnM7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IGp1bXBUYXJnZXRzOworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
PiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSlNW
YWx1ZT4gY29uc3RhbnRSZWdpc3RlcnM7CisgICAgQ2FjaGVkVmVjdG9yPFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbj4gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOworICAgIENhY2hl
ZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBleHByZXNzaW9uSW5mbzsKKyAgICBDYWNoZWRI
YXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD4gb3V0T2ZMaW5lSnVtcFRhcmdl
dHM7CisKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+
IGNvbnN0YW50SWRlbnRpZmllclNldHM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZp
ZXI+IGlkZW50aWZpZXJzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRCaXRWZWN0b3I+IGJpdFZl
Y3RvcnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlv
bkV4ZWN1dGFibGU+PiBmdW5jdGlvbkRlY2xzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRXcml0
ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4gZnVuY3Rpb25FeHByczsKK307CisK
K3N0cnVjdCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2ssIENhY2hlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1
c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaywgQ2Fj
aGVkUHJvZ3JhbUNvZGVCbG9jaz47CisgICAgdXNpbmcgQmFzZTo6ZW5jb2RlOworCisgICAgQ2Fj
aGVkVmFyaWFibGVFbnZpcm9ubWVudCB2YXJEZWNsYXJhdGlvbnM7CisgICAgQ2FjaGVkVmFyaWFi
bGVFbnZpcm9ubWVudCBsZXhpY2FsRGVjbGFyYXRpb25zOworCisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrJiBjb2RlQmxvY2sp
CisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKKyAgICAg
ICAgdmFyRGVjbGFyYXRpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV92YXJEZWNsYXJh
dGlvbnMpOworICAgICAgICBsZXhpY2FsRGVjbGFyYXRpb25zLmVuY29kZShlbmNvZGVyLCBjb2Rl
QmxvY2subV9sZXhpY2FsRGVjbGFyYXRpb25zKTsKKyAgICB9CisKKyAgICBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJs
b2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUo
ZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIHZhckRlY2xhcmF0aW9ucy5kZWNvZGUoZGVj
b2RlciwgY29kZUJsb2NrLT5tX3ZhckRlY2xhcmF0aW9ucyk7CisgICAgICAgIGxleGljYWxEZWNs
YXJhdGlvbnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV9sZXhpY2FsRGVjbGFyYXRpb25z
KTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVk
TW9kdWxlQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2ssIENhY2hlZE1vZHVsZUNvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2Ug
PSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLCBDYWNoZWRN
b2R1bGVDb2RlQmxvY2s+OworICAgIHVzaW5nIEJhc2U6OmVuY29kZTsKKworICAgIGludCBtb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKworICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIs
IGNvZGVCbG9jayk7CisgICAgICAgIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0ID0gY29kZUJsb2NrLm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7CisgICAgfQorCisgICAgVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVy
LnZtKCkuaGVhcCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhp
cyk7CisgICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAg
ICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICBjb2RlQmxv
Y2stPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQg
PSBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKyAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9OworCitzdHJ1Y3QgQ2FjaGVkRXZhbENv
ZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrLCBD
YWNoZWRFdmFsQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxV
bmxpbmtlZEV2YWxDb2RlQmxvY2ssIENhY2hlZEV2YWxDb2RlQmxvY2s+OworICAgIHVzaW5nIEJh
c2U6OmVuY29kZTsKKworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVyLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gdmFyaWFibGVzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVu
dGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0
ZXM7CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZEV2
YWxDb2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNv
ZGVyLCBjb2RlQmxvY2spOworICAgICAgICB2YXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGNvZGVC
bG9jay5tX3ZhcmlhYmxlcyk7CisgICAgICAgIGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7Cisg
ICAgfQorCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikgY29uc3QKKyAgICB7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPihkZWNv
ZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7Cisg
ICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAg
QmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICB2YXJpYWJsZXMuZGVj
b2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV92YXJpYWJsZXMpOworICAgICAgICBmdW5jdGlvbkhv
aXN0aW5nQ2FuZGlkYXRlcy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2Z1bmN0aW9uSG9p
c3RpbmdDYW5kaWRhdGVzKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9Owor
CitzdHJ1Y3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2Nr
PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2ssIENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrPiB7Cisg
ICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
LCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jaz47CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAg
eworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKKyAgICB9CisKKyAg
ICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KGRl
Y29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhkZWNvZGVyLCAqdGhp
cyk7CisgICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAg
ICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICByZXR1cm4g
Y29kZUJsb2NrOworICAgIH0KK307CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jazo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25z
dCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShk
ZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5n
ZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry
dWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsOworCitlbnVtIENhY2hlZENvZGVCbG9ja1RhZyB7
CisgICAgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZywKKyAgICBDYWNoZWRNb2R1bGVDb2RlQmxv
Y2tUYWcsCisgICAgQ2FjaGVkRXZhbENvZGVCbG9ja1RhZywKK307CisKK3RlbXBsYXRlPD4KK3N0
cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IHsK
KyAgICB1c2luZyB0eXBlID0gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jazsKKyAgICBzdGF0aWMgY29u
c3RleHByIENhY2hlZENvZGVCbG9ja1RhZyB0YWcgPSBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrVGFn
OworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4geworICAgIHVzaW5nIHR5cGUgPSBDYWNoZWRNb2R1
bGVDb2RlQmxvY2s7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWRDb2RlQmxvY2tUYWcgdGFn
ID0gQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFnOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IENh
Y2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkRXZhbENvZGVCbG9jaz4geworICAgIHVzaW5n
IHR5cGUgPSBDYWNoZWRFdmFsQ29kZUJsb2NrOworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVk
Q29kZUJsb2NrVGFnIHRhZyA9IENhY2hlZEV2YWxDb2RlQmxvY2tUYWc7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordXNpbmcgQ2FjaGVkQ29kZUJsb2NrVHlwZSA9IHR5cGVuYW1lIENhY2hl
ZENvZGVCbG9ja1R5cGVJbXBsPFQ+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSBVbmxp
bmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlLCBDYWNo
ZWRDb2RlQmxvY2tUeXBlPiYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLnZt
KCksIHN0cnVjdHVyZSkKKyAgICAsIG1faW5zdHJ1Y3Rpb25zKGNhY2hlZENvZGVCbG9jay5pbnN0
cnVjdGlvbnMuZGVjb2RlKGRlY29kZXIpKQorICAgICwgbV9saXZlbmVzcyhudWxscHRyKQorICAg
ICwgbV90aGlzUmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnRoaXNSZWdpc3RlcikKKyAgICAsIG1f
c2NvcGVSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2suc2NvcGVSZWdpc3RlcikKKyAgICAsIG1fZ2xv
YmFsT2JqZWN0UmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLmdsb2JhbE9iamVjdFJlZ2lzdGVyKQor
CisgICAgLCBtX3NvdXJjZVVSTERpcmVjdGl2ZShjYWNoZWRDb2RlQmxvY2suc291cmNlVVJMRGly
ZWN0aXZlLmRlY29kZShkZWNvZGVyKSkKKyAgICAsIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZShjYWNoZWRDb2RlQmxvY2suc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2Rl
cikpCisKKyAgICAsIG1fdXNlc0V2YWwoY2FjaGVkQ29kZUJsb2NrLnVzZXNFdmFsKQorICAgICwg
bV9pc1N0cmljdE1vZGUoY2FjaGVkQ29kZUJsb2NrLmlzU3RyaWN0TW9kZSkKKyAgICAsIG1faXND
b25zdHJ1Y3RvcihjYWNoZWRDb2RlQmxvY2suaXNDb25zdHJ1Y3RvcikKKyAgICAsIG1faGFzQ2Fw
dHVyZWRWYXJpYWJsZXMoY2FjaGVkQ29kZUJsb2NrLmhhc0NhcHR1cmVkVmFyaWFibGVzKQorICAg
ICwgbV9pc0J1aWx0aW5GdW5jdGlvbihjYWNoZWRDb2RlQmxvY2suaXNCdWlsdGluRnVuY3Rpb24p
CisgICAgLCBtX3N1cGVyQmluZGluZyhjYWNoZWRDb2RlQmxvY2suc3VwZXJCaW5kaW5nKQorICAg
ICwgbV9zY3JpcHRNb2RlKGNhY2hlZENvZGVCbG9jay5zY3JpcHRNb2RlKQorICAgICwgbV9pc0Fy
cm93RnVuY3Rpb25Db250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0Fycm93RnVuY3Rpb25Db250ZXh0
KQorICAgICwgbV9pc0NsYXNzQ29udGV4dChjYWNoZWRDb2RlQmxvY2suaXNDbGFzc0NvbnRleHQp
CisgICAgLCBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoY2FjaGVkQ29kZUJsb2Nr
Lndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMpCisgICAgLCBtX2NvbnN0cnVjdG9yS2lu
ZChjYWNoZWRDb2RlQmxvY2suY29uc3RydWN0b3JLaW5kKQorICAgICwgbV9kZXJpdmVkQ29udGV4
dFR5cGUoY2FjaGVkQ29kZUJsb2NrLmRlcml2ZWRDb250ZXh0VHlwZSkKKyAgICAsIG1fZXZhbENv
bnRleHRUeXBlKGNhY2hlZENvZGVCbG9jay5ldmFsQ29udGV4dFR5cGUpCisgICAgLCBtX2hhc1Rh
aWxDYWxscyhjYWNoZWRDb2RlQmxvY2suaGFzVGFpbENhbGxzKQorICAgICwgbV9saW5lQ291bnQo
Y2FjaGVkQ29kZUJsb2NrLmxpbmVDb3VudCkKKyAgICAsIG1fZW5kQ29sdW1uKGNhY2hlZENvZGVC
bG9jay5lbmRDb2x1bW4pCisgICAgLCBtX251bVZhcnMoY2FjaGVkQ29kZUJsb2NrLm51bVZhcnMp
CisgICAgLCBtX251bUNhbGxlZUxvY2FscyhjYWNoZWRDb2RlQmxvY2subnVtQ2FsbGVlTG9jYWxz
KQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGNhY2hlZENvZGVCbG9jay5udW1QYXJhbWV0ZXJzKQor
ICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMpCisgICAgLCBtX3BhcnNl
TW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKQorICAgICwgbV9jb2RlVHlwZShjYWNoZWRD
b2RlQmxvY2suY29kZVR5cGUpCisgICAgLCBtX3JhcmVEYXRhKGNhY2hlZENvZGVCbG9jay5yYXJl
RGF0YS5kZWNvZGVBc1B0cihkZWNvZGVyKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZSwgdHlwZW5hbWUgQ2FjaGVkQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZSwgQ2FjaGVkQ29kZUJsb2NrVHlwZT46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZENvZGVCbG9jayYgY29kZUJsb2NrKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaS0t
OykKKyAgICAgICAgY29kZUJsb2NrLm1fbGlua1RpbWVDb25zdGFudHNbaV0gPSBsaW5rVGltZUNv
bnN0YW50c1tpXTsKKworICAgIG1ldGFkYXRhLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9t
ZXRhZGF0YSk7CisgICAgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuZGVjb2RlKGRlY29kZXIs
IGNvZGVCbG9jay5tX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTsKKyAgICBjb25zdGFudFJl
Z2lzdGVycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRSZWdpc3RlcnMsICZj
b2RlQmxvY2spOworICAgIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5kZWNvZGUo
ZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsK
KyAgICBleHByZXNzaW9uSW5mby5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lv
bkluZm8pOworICAgIG91dE9mTGluZUp1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxv
Y2subV9vdXRPZkxpbmVKdW1wVGFyZ2V0cyk7CisgICAganVtcFRhcmdldHMuZGVjb2RlKGRlY29k
ZXIsIGNvZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBjb25zdGFudElkZW50aWZpZXJTZXRz
LmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudElkZW50aWZpZXJTZXRzKTsKKyAg
ICBpZGVudGlmaWVycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1faWRlbnRpZmllcnMpOwor
ICAgIGJpdFZlY3RvcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2JpdFZlY3RvcnMpOwor
ICAgIGZ1bmN0aW9uRGVjbHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRGVj
bHMsICZjb2RlQmxvY2spOworICAgIGZ1bmN0aW9uRXhwcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVC
bG9jay5tX2Z1bmN0aW9uRXhwcnMsICZjb2RlQmxvY2spOworfQorCitBTFdBWVNfSU5MSU5FIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKERlY29kZXIm
IGRlY29kZXIsIGNvbnN0IENhY2hlZFByb2dyYW1Db2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykK
KyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
a1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5MSU5F
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKERlY29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hlZE1vZHVsZUNvZGVCbG9jayYgY2Fj
aGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7
Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpVbmxpbmtlZEV2YWxD
b2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkRXZhbENvZGVCbG9jayYgY2Fj
aGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRF
dmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSYgZXhlY3V0YWJsZSkK
K3sKKyAgICBmaXJzdExpbmVPZmZzZXQgPSBleGVjdXRhYmxlLm1fZmlyc3RMaW5lT2Zmc2V0Owor
ICAgIGxpbmVDb3VudCA9IGV4ZWN1dGFibGUubV9saW5lQ291bnQ7CisgICAgdW5saW5rZWRGdW5j
dGlvbk5hbWVTdGFydCA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0Owor
ICAgIHVubGlua2VkQm9keVN0YXJ0Q29sdW1uID0gZXhlY3V0YWJsZS5tX3VubGlua2VkQm9keVN0
YXJ0Q29sdW1uOworICAgIHVubGlua2VkQm9keUVuZENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxp
bmtlZEJvZHlFbmRDb2x1bW47CisgICAgc3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fc3RhcnRP
ZmZzZXQ7CisgICAgc291cmNlTGVuZ3RoID0gZXhlY3V0YWJsZS5tX3NvdXJjZUxlbmd0aDsKKyAg
ICBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fcGFyYW1ldGVyc1N0YXJ0T2Zm
c2V0OworICAgIHR5cGVQcm9maWxpbmdTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUubV90eXBlUHJv
ZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgdHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IGV4ZWN1dGFi
bGUubV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OworICAgIHBhcmFtZXRlckNvdW50ID0gZXhlY3V0
YWJsZS5tX3BhcmFtZXRlckNvdW50OworCisgICAgZmVhdHVyZXMgPSBleGVjdXRhYmxlLm1fZmVh
dHVyZXM7CisgICAgc291cmNlUGFyc2VNb2RlID0gZXhlY3V0YWJsZS5tX3NvdXJjZVBhcnNlTW9k
ZTsKKworICAgIGlzSW5TdHJpY3RDb250ZXh0ID0gZXhlY3V0YWJsZS5tX2lzSW5TdHJpY3RDb250
ZXh0OworICAgIGhhc0NhcHR1cmVkVmFyaWFibGVzID0gZXhlY3V0YWJsZS5tX2hhc0NhcHR1cmVk
VmFyaWFibGVzOworICAgIGlzQnVpbHRpbkZ1bmN0aW9uID0gZXhlY3V0YWJsZS5tX2lzQnVpbHRp
bkZ1bmN0aW9uOworICAgIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID0gZXhlY3V0
YWJsZS5tX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yOworICAgIGNvbnN0cnVjdEFi
aWxpdHkgPSBleGVjdXRhYmxlLm1fY29uc3RydWN0QWJpbGl0eTsKKyAgICBjb25zdHJ1Y3Rvcktp
bmQgPSBleGVjdXRhYmxlLm1fY29uc3RydWN0b3JLaW5kOworICAgIGZ1bmN0aW9uTW9kZSA9IGV4
ZWN1dGFibGUubV9mdW5jdGlvbk1vZGU7CisgICAgc2NyaXB0TW9kZSA9IGV4ZWN1dGFibGUubV9z
Y3JpcHRNb2RlOworICAgIHN1cGVyQmluZGluZyA9IGV4ZWN1dGFibGUubV9zdXBlckJpbmRpbmc7
CisgICAgZGVyaXZlZENvbnRleHRUeXBlID0gZXhlY3V0YWJsZS5tX2Rlcml2ZWRDb250ZXh0VHlw
ZTsKKworICAgIGNsYXNzU291cmNlLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1fY2xhc3NT
b3VyY2UpOworCisgICAgbmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5uYW1lKCkpOwor
ICAgIGVjbWFOYW1lLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmVjbWFOYW1lKCkpOworICAg
IGluZmVycmVkTmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5pbmZlcnJlZE5hbWUoKSk7
CisKKyAgICBwYXJlbnRTY29wZVREWlZhcmlhYmxlcy5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJs
ZS5wYXJlbnRTY29wZVREWlZhcmlhYmxlcygpKTsKKworICAgIHVubGlua2VkQ29kZUJsb2NrRm9y
Q2FsbC5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2Fs
bCk7CisgICAgdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZW5jb2RlKGVuY29kZXIsIGV4
ZWN1dGFibGUubV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cit7CisgICAgVmFyaWFibGVFbnZpcm9u
bWVudCBlbnY7CisgICAgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZGVjb2RlKGRlY29kZXIsIGVu
dik7CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihkZWNvZGVy
LnZtKCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKGRlY29kZXIsIGVudiwgKnRo
aXMpOworICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisKKyAg
ICBjbGFzc1NvdXJjZS5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV9jbGFzc1NvdXJjZSk7
CisgICAgdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxl
LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCwgZXhlY3V0YWJsZSk7CisgICAgdW5saW5rZWRD
b2RlQmxvY2tGb3JDb25zdHJ1Y3QuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5r
ZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIGV4ZWN1dGFibGUpOworCisgICAgcmV0dXJuIGV4ZWN1
dGFibGU7Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJv
bm1lbnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1
dGFibGUmIGNhY2hlZEV4ZWN1dGFibGUpCisgICAgOiBCYXNlKGRlY29kZXIudm0oKSwgZGVjb2Rl
ci52bSgpLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpKQorICAgICwg
bV9maXJzdExpbmVPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5maXJzdExpbmVPZmZzZXQpCisgICAg
LCBtX2xpbmVDb3VudChjYWNoZWRFeGVjdXRhYmxlLmxpbmVDb3VudCkKKyAgICAsIG1fdW5saW5r
ZWRGdW5jdGlvbk5hbWVTdGFydChjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkRnVuY3Rpb25OYW1l
U3RhcnQpCisgICAgLCBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uKGNhY2hlZEV4ZWN1dGFibGUu
dW5saW5rZWRCb2R5U3RhcnRDb2x1bW4pCisgICAgLCBtX3VubGlua2VkQm9keUVuZENvbHVtbihj
YWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQm9keUVuZENvbHVtbikKKyAgICAsIG1fc3RhcnRPZmZz
ZXQoY2FjaGVkRXhlY3V0YWJsZS5zdGFydE9mZnNldCkKKyAgICAsIG1fc291cmNlTGVuZ3RoKGNh
Y2hlZEV4ZWN1dGFibGUuc291cmNlTGVuZ3RoKQorICAgICwgbV9wYXJhbWV0ZXJzU3RhcnRPZmZz
ZXQoY2FjaGVkRXhlY3V0YWJsZS5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQpCisgICAgLCBtX3R5cGVQ
cm9maWxpbmdTdGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnR5cGVQcm9maWxpbmdTdGFydE9m
ZnNldCkKKyAgICAsIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnR5
cGVQcm9maWxpbmdFbmRPZmZzZXQpCisgICAgLCBtX3BhcmFtZXRlckNvdW50KGNhY2hlZEV4ZWN1
dGFibGUucGFyYW1ldGVyQ291bnQpCisgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZEV4ZWN1dGFibGUu
ZmVhdHVyZXMpCisgICAgLCBtX3NvdXJjZVBhcnNlTW9kZShjYWNoZWRFeGVjdXRhYmxlLnNvdXJj
ZVBhcnNlTW9kZSkKKyAgICAsIG1faXNJblN0cmljdENvbnRleHQoY2FjaGVkRXhlY3V0YWJsZS5p
c0luU3RyaWN0Q29udGV4dCkKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoY2FjaGVkRXhl
Y3V0YWJsZS5oYXNDYXB0dXJlZFZhcmlhYmxlcykKKyAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24o
Y2FjaGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5GdW5jdGlvbikKKyAgICAsIG1faXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IoY2FjaGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5EZWZhdWx0Q2xh
c3NDb25zdHJ1Y3RvcikKKyAgICAsIG1fY29uc3RydWN0QWJpbGl0eShjYWNoZWRFeGVjdXRhYmxl
LmNvbnN0cnVjdEFiaWxpdHkpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZChjYWNoZWRFeGVjdXRh
YmxlLmNvbnN0cnVjdG9yS2luZCkKKyAgICAsIG1fZnVuY3Rpb25Nb2RlKGNhY2hlZEV4ZWN1dGFi
bGUuZnVuY3Rpb25Nb2RlKQorICAgICwgbV9zY3JpcHRNb2RlKGNhY2hlZEV4ZWN1dGFibGUuc2Ny
aXB0TW9kZSkKKyAgICAsIG1fc3VwZXJCaW5kaW5nKGNhY2hlZEV4ZWN1dGFibGUuc3VwZXJCaW5k
aW5nKQorICAgICwgbV9kZXJpdmVkQ29udGV4dFR5cGUoY2FjaGVkRXhlY3V0YWJsZS5kZXJpdmVk
Q29udGV4dFR5cGUpCisKKyAgICAsIG1fbmFtZShjYWNoZWRFeGVjdXRhYmxlLm5hbWUuZGVjb2Rl
KGRlY29kZXIpKQorICAgICwgbV9lY21hTmFtZShjYWNoZWRFeGVjdXRhYmxlLmVjbWFOYW1lLmRl
Y29kZShkZWNvZGVyKSkKKyAgICAsIG1faW5mZXJyZWROYW1lKGNhY2hlZEV4ZWN1dGFibGUuaW5m
ZXJyZWROYW1lLmRlY29kZShkZWNvZGVyKSkKKworICAgICwgbV9wYXJlbnRTY29wZVREWlZhcmlh
YmxlcyhkZWNvZGVyLnZtKCkubV9jb21wYWN0VmFyaWFibGVNYXAtPmdldChwYXJlbnRTY29wZVRE
WlZhcmlhYmxlcykpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5
cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29k
ZUJsb2NrPENvZGVCbG9ja1R5cGUsIENhY2hlZENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2smIGNvZGVCbG9jaykKK3sKKyAgICB0
aGlzUmVnaXN0ZXIgPSBjb2RlQmxvY2subV90aGlzUmVnaXN0ZXI7CisgICAgc2NvcGVSZWdpc3Rl
ciA9IGNvZGVCbG9jay5tX3Njb3BlUmVnaXN0ZXI7CisgICAgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIg
PSBjb2RlQmxvY2subV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKyAgICB1c2VzRXZhbCA9IGNvZGVC
bG9jay5tX3VzZXNFdmFsOworICAgIGlzU3RyaWN0TW9kZSA9IGNvZGVCbG9jay5tX2lzU3RyaWN0
TW9kZTsKKyAgICBpc0NvbnN0cnVjdG9yID0gY29kZUJsb2NrLm1faXNDb25zdHJ1Y3RvcjsKKyAg
ICBoYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGNvZGVCbG9jay5tX2hhc0NhcHR1cmVkVmFyaWFibGVz
OworICAgIGlzQnVpbHRpbkZ1bmN0aW9uID0gY29kZUJsb2NrLm1faXNCdWlsdGluRnVuY3Rpb247
CisgICAgc3VwZXJCaW5kaW5nID0gY29kZUJsb2NrLm1fc3VwZXJCaW5kaW5nOworICAgIHNjcmlw
dE1vZGUgPSBjb2RlQmxvY2subV9zY3JpcHRNb2RlOworICAgIGlzQXJyb3dGdW5jdGlvbkNvbnRl
eHQgPSBjb2RlQmxvY2subV9pc0Fycm93RnVuY3Rpb25Db250ZXh0OworICAgIGlzQ2xhc3NDb250
ZXh0ID0gY29kZUJsb2NrLm1faXNDbGFzc0NvbnRleHQ7CisgICAgd2FzQ29tcGlsZWRXaXRoRGVi
dWdnaW5nT3Bjb2RlcyA9IGNvZGVCbG9jay5tX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29k
ZXM7CisgICAgY29uc3RydWN0b3JLaW5kID0gY29kZUJsb2NrLm1fY29uc3RydWN0b3JLaW5kOwor
ICAgIGRlcml2ZWRDb250ZXh0VHlwZSA9IGNvZGVCbG9jay5tX2Rlcml2ZWRDb250ZXh0VHlwZTsK
KyAgICBldmFsQ29udGV4dFR5cGUgPSBjb2RlQmxvY2subV9ldmFsQ29udGV4dFR5cGU7CisgICAg
aGFzVGFpbENhbGxzID0gY29kZUJsb2NrLm1faGFzVGFpbENhbGxzOworICAgIGxpbmVDb3VudCA9
IGNvZGVCbG9jay5tX2xpbmVDb3VudDsKKyAgICBlbmRDb2x1bW4gPSBjb2RlQmxvY2subV9lbmRD
b2x1bW47CisgICAgbnVtVmFycyA9IGNvZGVCbG9jay5tX251bVZhcnM7CisgICAgbnVtQ2FsbGVl
TG9jYWxzID0gY29kZUJsb2NrLm1fbnVtQ2FsbGVlTG9jYWxzOworICAgIG51bVBhcmFtZXRlcnMg
PSBjb2RlQmxvY2subV9udW1QYXJhbWV0ZXJzOworICAgIGZlYXR1cmVzID0gY29kZUJsb2NrLm1f
ZmVhdHVyZXM7CisgICAgcGFyc2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOworICAgIGNv
ZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5cGU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBM
aW5rVGltZUNvbnN0YW50Q291bnQ7IGktLTspCisgICAgICAgIGxpbmtUaW1lQ29uc3RhbnRzW2ld
ID0gY29kZUJsb2NrLm1fbGlua1RpbWVDb25zdGFudHNbaV07CisKKyAgICBtZXRhZGF0YS5lbmNv
ZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEpOworICAgIHJhcmVEYXRhLmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YSk7CisKKyAgICBzb3VyY2VVUkxEaXJlY3RpdmUu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3NvdXJjZVVSTERpcmVjdGl2ZS5pbXBsKCkpOwor
ICAgIHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X3NvdXJjZVVSTERpcmVjdGl2ZS5pbXBsKCkpOworCisgICAgaW5zdHJ1Y3Rpb25zLmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2subV9pbnN0cnVjdGlvbnMuZ2V0KCkpOworICAgIHByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucyk7CisgICAgY29uc3RhbnRSZWdpc3RlcnMuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX2NvbnN0YW50UmVnaXN0ZXJzKTsKKyAgICBjb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24uZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbik7CisgICAgZXhwcmVzc2lvbkluZm8uZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX2V4cHJlc3Npb25JbmZvKTsKKyAgICBqdW1wVGFyZ2V0cy5lbmNvZGUoZW5jb2Rl
ciwgY29kZUJsb2NrLm1fanVtcFRhcmdldHMpOworICAgIG91dE9mTGluZUp1bXBUYXJnZXRzLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9vdXRPZkxpbmVKdW1wVGFyZ2V0cyk7CisKKyAgICBj
b25zdGFudElkZW50aWZpZXJTZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFu
dElkZW50aWZpZXJTZXRzKTsKKyAgICBpZGVudGlmaWVycy5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1faWRlbnRpZmllcnMpOworICAgIGJpdFZlY3RvcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVC
bG9jay5tX2JpdFZlY3RvcnMpOworICAgIGZ1bmN0aW9uRGVjbHMuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX2Z1bmN0aW9uRGVjbHMpOworICAgIGZ1bmN0aW9uRXhwcnMuZW5jb2RlKGVuY29k
ZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRXhwcnMpOworfQorCitzdHJ1Y3QgQ2FjaGVkU291cmNl
Q29kZUtleSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlQ29kZUtleSwgQ2FjaGVkU291cmNl
Q29kZUtleT4geworICAgIENhY2hlZFVubGlua2VkU291cmNlQ29kZSBzb3VyY2VDb2RlOworICAg
IENhY2hlZFN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGZsYWdzOworICAgIHVuc2lnbmVkIGhh
c2g7CisgICAgaW50IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb247CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBr
ZXkpCisgICAgeworICAgICAgICBzb3VyY2VDb2RlLmVuY29kZShlbmNvZGVyLCBrZXkubV9zb3Vy
Y2VDb2RlKTsKKyAgICAgICAgbmFtZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fbmFtZSk7CisgICAg
ICAgIGZsYWdzID0ga2V5Lm1fZmxhZ3MubV9mbGFnczsKKyAgICAgICAgaGFzaCA9IGtleS5oYXNo
KCk7CisgICAgICAgIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBr
ZXkubV9mdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAgIH0KKwor
ICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGVLZXkmIGtleSkgY29u
c3QKKyAgICB7CisgICAgICAgIHNvdXJjZUNvZGUuZGVjb2RlKGRlY29kZXIsIGtleS5tX3NvdXJj
ZUNvZGUpOworICAgICAgICBuYW1lLmRlY29kZShkZWNvZGVyLCBrZXkubV9uYW1lKTsKKyAgICAg
ICAga2V5Lm1fZmxhZ3MubV9mbGFncyA9IGZsYWdzOworICAgICAgICBrZXkubV9oYXNoID0gaGFz
aDsKKyAgICAgICAga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlv
biA9IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb247CisgICAgfQorfTsK
Kworc3RydWN0IEdlbmVyaWNDYWNoZUVudHJ5IHsKKyAgICBDYWNoZWRDb2RlQmxvY2tUYWcgdGFn
OworCisgICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZGVj
b2RlKERlY29kZXImKSBjb25zdDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29k
ZUJsb2NrVHlwZT4KK3N0cnVjdCBDYWNoZUVudHJ5IDogcHVibGljIEdlbmVyaWNDYWNoZUVudHJ5
IHsKKyAgICBDYWNoZWRTb3VyY2VDb2RlS2V5IGtleTsKKyAgICBDYWNoZWRQdHI8Q2FjaGVkQ29k
ZUJsb2NrVHlwZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+PiBjb2RlQmxvY2s7CisKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgY29uc3Qg
VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4gcGFpcikKKyAgICB7CisgICAgICAgIHRhZyA9IENhY2hl
ZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnRhZzsKKyAgICAgICAg
a2V5LmVuY29kZShlbmNvZGVyLCBwYWlyLmZpcnN0KTsKKyAgICAgICAgY29kZUJsb2NrLmVuY29k
ZShlbmNvZGVyLCBwYWlyLnNlY29uZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBH
ZW5lcmljQ2FjaGVFbnRyeTsKKworICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIFNvdXJjZUNvZGVLZXkgZGVjb2RlZEtleTsKKyAgICAgICAga2V5LmRlY29kZShkZWNv
ZGVyLCBkZWNvZGVkS2V5KTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShkZWNvZGVkS2V5KSwg
Y29kZUJsb2NrLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KK307CisKK3N0ZDo6cGFpcjxTb3Vy
Y2VDb2RlS2V5LCBVbmxpbmtlZENvZGVCbG9jayo+IEdlbmVyaWNDYWNoZUVudHJ5OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHRhZykgeworICAgIGNhc2Ug
Q2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzoKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+Kj4odGhpcyktPmRl
Y29kZShkZWNvZGVyKTsKKyAgICBjYXNlIENhY2hlZE1vZHVsZUNvZGVCbG9ja1RhZzoKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+Kj4odGhpcyktPmRlY29kZShkZWNvZGVyKTsKKyAgICBjYXNlIENh
Y2hlZEV2YWxDb2RlQmxvY2tUYWc6CisgICAgICAgIC8vIFdlIGRvIG5vdCBjYWNoZSBldmFsIGNv
ZGUgYmxvY2tzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
I2lmIENPTVBJTEVSKE1TVkMpCisgICAgLy8gV2l0aG91dCB0aGlzLCBNU1ZDIHdpbGwgY29tcGxh
aW4gdGhhdCB0aGlzIHBhdGggZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuCisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+Kj4o
dGhpcyktPmRlY29kZShkZWNvZGVyKTsKKyNlbmRpZgorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBV
bmxpbmtlZENvZGVCbG9ja1R5cGU+Cit2b2lkIGVuY29kZUNvZGVCbG9jayhFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgYXV0byogZW50cnkgPSBlbmNvZGVyLnRlbXBsYXRlIG1hbGxvYzxD
YWNoZUVudHJ5PFVubGlua2VkQ29kZUJsb2NrVHlwZT4+KCk7CisgICAgZW50cnktPmVuY29kZShl
bmNvZGVyLCAgeyBrZXksIGpzQ2FzdDxjb25zdCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihjb2Rl
QmxvY2spIH0pOworfQorCitzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IGVu
Y29kZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbyA9IGNvZGVCbG9jay0+Y2xhc3NJbmZvKHZtKTsKKworICAgIEVuY29kZXIgZW5jb2Rlcih2
bSk7CisgICAgaWYgKGNsYXNzSW5mbyA9PSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmluZm8o
KSkKKyAgICAgICAgZW5jb2RlQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZW5j
b2Rlciwga2V5LCBjb2RlQmxvY2spOworICAgIGVsc2UgaWYgKGNsYXNzSW5mbyA9PSBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgZW5jb2RlQ29kZUJsb2Nr
PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4oZW5jb2Rlciwga2V5LCBjb2RlQmxvY2sp
OworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyA9PSBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2s6OmluZm8oKSk7CisKKyAgICByZXR1cm4gZW5jb2Rlci5yZWxlYXNlKCk7Cit9CisKK1Vu
bGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNl
Q29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQoreworICAgIGNv
bnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHZW5lcmljQ2Fj
aGVFbnRyeSo+KGJ1ZmZlcik7CisgICAgRGVjb2RlciBkZWNvZGVyKHZtLCBidWZmZXIsIHNpemUp
OworICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtlZENvZGVCbG9jayo+IGVudHJ5
OworICAgIHsKKyAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICBlbnRy
eSA9IGNhY2hlZEVudHJ5LT5kZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCisgICAgaWYgKGVudHJ5
LmZpcnN0ICE9IGtleSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGVudHJ5
LnNlY29uZDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVkVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iY2I4YWNiNmNlNTcwZTk3MjYzODlj
MjZkNzBiY2JhMjFkYThkNGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJKU0Nhc3QuaCIKKyNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBTb3VyY2VDb2RlS2V5OworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CisKK3N0
ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29kZUJsb2NrKFZNJiwg
Y29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKik7CitVbmxpbmtl
ZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkm
LCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+CitVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGRlY29kZUNvZGVCbG9jayhWTSYg
dm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qg
c2l6ZSkKK3sKKyAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGRlY29k
ZUNvZGVCbG9ja0ltcGwodm0sIGtleSwgYnVmZmVyLCBzaXplKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKaW5k
ZXggNDYwMTc5MjFhNDZlZmM2NDE3MjVkMGEyMzUyNTI5MDM1YWY1ZjNhZC4uYzMyZDIwNGI2Y2Q4
OTY4MTgxY2IwZDFkZjBlYWI4M2VjMTE4MTlkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCkBAIC00Myw2ICs0Myw5IEBAIHZvaWQgQ29kZUNhY2hlTWFw
OjpwcnVuZVNsb3dDYXNlKCkKIAogICAgIHdoaWxlIChtX3NpemUgPiBtX2NhcGFjaXR5IHx8ICFj
YW5QcnVuZVF1aWNrbHkoKSkgewogICAgICAgICBNYXBUeXBlOjppdGVyYXRvciBpdCA9IG1fbWFw
LmJlZ2luKCk7CisKKyAgICAgICAgd3JpdGVDb2RlQmxvY2soKml0LT52YWx1ZS5jZWxsLT52bSgp
LCBpdC0+a2V5LCBpdC0+dmFsdWUpOworCiAgICAgICAgIG1fc2l6ZSAtPSBpdC0+a2V5Lmxlbmd0
aCgpOwogICAgICAgICBtX21hcC5yZW1vdmUoaXQpOwogICAgIH0KQEAgLTU5LDkgKzYyLDggQEAg
VW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xvYmFsQ29kZUJs
b2NrKFZNJiB2bSwgRXhlY3V0YWJsZVQKICAgICAgICAgdm0udHlwZVByb2ZpbGVyKCkgPyBUeXBl
UHJvZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJvZmlsZXJFbmFibGVkOjpObywgCiAgICAgICAg
IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpZ
ZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCiAgICAgICAgIFdURjo6bnVsbG9w
dCk7Ci0gICAgU291cmNlQ29kZVZhbHVlKiBjYWNoZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVB
bmRVcGRhdGVBZ2Uoa2V5KTsKLSAgICBpZiAoY2FjaGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hl
KCkpIHsKLSAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9
IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihjYWNoZS0+Y2VsbC5nZXQoKSk7CisgICAg
VW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fc291cmNlQ29kZS5m
aW5kQ2FjaGVBbmRVcGRhdGVBZ2U8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5KTsKKyAg
ICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpIHsKICAg
ICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPmxpbmVDb3VudCgp
OwogICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHVubGlua2VkQ29kZUJsb2NrLT5zdGFy
dENvbHVtbigpICsgc291cmNlLnN0YXJ0Q29sdW1uKCkub25lQmFzZWRJbnQoKTsKICAgICAgICAg
Ym9vbCBlbmRDb2x1bW5Jc09uU3RhcnRMaW5lID0gIWxpbmVDb3VudDsKQEAgLTcxLDkgKzczLDkg
QEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVQKICAgICAgICAgc291cmNlLnByb3ZpZGVyKCktPnNl
dFNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUodW5saW5rZWRDb2RlQmxvY2stPnNvdXJjZU1hcHBp
bmdVUkxEaXJlY3RpdmUoKSk7CiAgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKICAg
ICB9Ci0gICAgCisKICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwot
ICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBnZW5lcmF0ZVVu
bGlua2VkQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZSwgRXhlY3V0YWJsZVR5cGU+KHZt
LCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9k
ZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICB1bmxp
bmtlZENvZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlLCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9k
ZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFy
aWFibGVzVW5kZXJURFopOwogCiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrICYmIE9wdGlvbnM6
OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBtX3NvdXJjZUNvZGUuYWRkQ2FjaGUoa2V5LCBTb3Vy
Y2VDb2RlVmFsdWUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBtX3NvdXJjZUNvZGUuYWdlKCkpKTsK
QEAgLTExMCw5ICsxMTIsOCBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hl
OjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdgogICAgICAgICB2bS50
eXBlUHJvZmlsZXIoKSA/IFR5cGVQcm9maWxlckVuYWJsZWQ6OlllcyA6IFR5cGVQcm9maWxlckVu
YWJsZWQ6Ok5vLCAKICAgICAgICAgdm0uY29udHJvbEZsb3dQcm9maWxlcigpID8gQ29udHJvbEZs
b3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpObywK
ICAgICAgICAgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbik7Ci0gICAg
U291cmNlQ29kZVZhbHVlKiBjYWNoZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVB
Z2Uoa2V5KTsKLSAgICBpZiAoY2FjaGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpIHsKLSAg
ICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWNoZS0+Y2VsbC5nZXQoKSk7CisgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hl
QW5kVXBkYXRlQWdlPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bSwga2V5KTsKKyAgICBp
ZiAoZXhlY3V0YWJsZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewogICAgICAgICBzb3Vy
Y2UucHJvdmlkZXIoKS0+c2V0U291cmNlVVJMRGlyZWN0aXZlKGV4ZWN1dGFibGUtPnNvdXJjZVVS
TERpcmVjdGl2ZSgpKTsKICAgICAgICAgc291cmNlLnByb3ZpZGVyKCktPnNldFNvdXJjZU1hcHBp
bmdVUkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSgpKTsK
ICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CkBAIC0xNTUsNCArMTU2LDEwIEBAIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25F
eGVjdXRhYmxlKFZNJiB2CiAgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJsZTsKIH0KIAordm9p
ZCBDb2RlQ2FjaGU6OndyaXRlKFZNJiB2bSkKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDog
bV9zb3VyY2VDb2RlKQorICAgICAgICB3cml0ZUNvZGVCbG9jayh2bSwgaXQua2V5LCBpdC52YWx1
ZSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
ZGVDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKaW5k
ZXggOGE0NDE5Zjk2Y2E4ZmE0YTYyOWJlMGU5YTc4MjdjYmFmNjhjZmY4Ni4uOTkzOTVmMmNkMjg0
MTEzOWEwMzVjOGIxNTg5YmI5MzljNjljNTcwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29kZUNhY2hlLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIlBhcnNlci5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgIlVubGlua2VkRXZhbENv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtODksMTMgKzkxLDc2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAg
U291cmNlQ29kZVZhbHVlKiBmaW5kQ2FjaGVBbmRVcGRhdGVBZ2UoY29uc3QgU291cmNlQ29kZUtl
eSYga2V5KQorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQor
ICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CisgICAgVW5saW5rZWRDb2RlQmxvY2tU
eXBlKiBmZXRjaEZyb21EaXNrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkK
KyAgICB7CisjaWYgT1MoREFSV0lOKQorICAgICAgICBjb25zdCBjaGFyKiBjYWNoZVBhdGggPSBP
cHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7CisgICAgICAgIGlmICghY2FjaGVQYXRoKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCA9IGtleS5oYXNo
KCk7CisgICAgICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICAgICAgaW50IGNvdW50ID0gc25w
cmludGYoZmlsZW5hbWUsIDUxMiwgIiVzLyV1LmNhY2hlIiwgY2FjaGVQYXRoLCBoYXNoKTsKKyAg
ICAgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKyAg
ICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfU0ggfCBMT0NLX05CKTsKKyAgICAgICAgaWYgKHJj
KSB7CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBzdGF0IHNiOworICAgICAgICBpbnQgcmVzID0g
ZnN0YXQoZmQsICZzYik7CisgICAgICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihzYi5zdF9zaXplKTsKKyAgICAgICAgaWYgKHJlcyB8fCAhc2l6ZSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIGNvbnN0IHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0
ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworICAgICAgICBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZGVjb2RlQ29kZUJsb2NrPFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwgYnVmZmVyLCBzaXplKTsKKworICAgICAgICBpZiAo
IXVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgYWRkQ2FjaGUoa2V5LCBTb3VyY2VDb2RlVmFsdWUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBt
X2FnZSkpOworICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7CisjZWxzZQorICAgICAg
ICBVTlVTRURfUEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
bmxpbmtlZENvZGVCbG9ja1R5cGU+CisgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vf
b2Y8VW5saW5rZWRDb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnZhbHVlICYmICFz
dGQ6OmlzX3NhbWU8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s+
Ojp2YWx1ZSwgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4KKyAgICBmZXRjaEZyb21EaXNrKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsKKyAgICAgICAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2sgPSBmZXRjaEZyb21EaXNrSW1wbDxVbmxpbmtlZENvZGVCbG9j
a1R5cGU+KHZtLCBrZXkpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VEaXNr
Q2FjaGUoKSkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2spOworICAgICAg
ICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19iYXNlX29mPFVubGlua2VkQ29kZUJsb2NrLCBU
Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVl
LCBUKj4KKyAgICBmZXRjaEZyb21EaXNrKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYpIHsgcmV0
dXJuIG51bGxwdHI7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShW
TSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKICAgICB7CiAgICAgICAgIHBydW5lKCk7
CiAKICAgICAgICAgaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAg
ICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIHJldHVybiBmZXRjaEZyb21EaXNrPFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4odm0sIGtleSk7CiAKICAgICAgICAgaW50NjRfdCBhZ2UgPSBtX2FnZSAtIGZpbmRSZXN1
bHQtPnZhbHVlLmFnZTsKICAgICAgICAgaWYgKGFnZSA+IG1fY2FwYWNpdHkpIHsKQEAgLTExNSw3
ICsxODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZpbmRSZXN1bHQtPnZhbHVlLmFnZSA9IG1fYWdl
OwogICAgICAgICBtX2FnZSArPSBrZXkubGVuZ3RoKCk7CiAKLSAgICAgICAgcmV0dXJuICZmaW5k
UmVzdWx0LT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5
cGUqPihmaW5kUmVzdWx0LT52YWx1ZS5jZWxsLmdldCgpKTsKICAgICB9CiAKICAgICBBZGRSZXN1
bHQgYWRkQ2FjaGUoY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFs
dWUmIHZhbHVlKQpAQCAtMTk3LDYgKzI2Miw3IEBAIHB1YmxpYzoKICAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZ2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIERlYnVnZ2VyTW9kZSwgT3B0aW9u
YWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBQYXJzZXJF
cnJvciYpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zb3VyY2VDb2RlLmNsZWFyKCk7IH0KKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlKFZNJik7CiAKIHByaXZhdGU6CiAgICAgdGVt
cGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+
IApAQCAtMjU2LDQgKzMyMiwzNiBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5s
aW5rZWRDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YQogICAgIHJldHVy
biB1bmxpbmtlZENvZGVCbG9jazsKIH0KIAorQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB3cml0
ZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNl
Q29kZVZhbHVlJiB2YWx1ZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgY29uc3QgY2hhciogY2Fj
aGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOworICAgIGlmIChMSUtFTFkoIWNhY2hl
UGF0aCkpCisgICAgICAgIHJldHVybjsKKworICAgIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4odm0sIHZhbHVlLmNlbGwuZ2V0
KCkpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25l
ZCBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisgICAgaW50IGNv
dW50ID0gc25wcmludGYoZmlsZW5hbWUsIDUxMiwgIiVzLyV1LmNhY2hlIiwgY2FjaGVQYXRoLCBo
YXNoKTsKKyAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNTEyKQorICAgICAgICByZXR1cm47
CisKKyAgICBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IHJlc3VsdCA9IGVu
Y29kZUNvZGVCbG9jayh2bSwga2V5LCBjb2RlQmxvY2spOworCisgICAgaW50IGZkID0gb3Blbihm
aWxlbmFtZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKyAgICBpbnQgcmMgPSBmbG9jayhm
ZCwgTE9DS19FWCB8IExPQ0tfTkIpOworICAgIGlmICghcmMpCisgICAgICAgIDo6d3JpdGUoZmQs
IHJlc3VsdC5maXJzdC5nZXQoKSwgcmVzdWx0LnNlY29uZCk7CisgICAgY2xvc2UoZmQpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYKK30KKworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAppbmRleCBjYTUzMTYzNmI3
ODFlODY5ZWE3OGY3NmQyNWI1ZTRhZWFkNDE2MTg1Li4yYmNhYTliNjc2MmQyNTJmMGIzMWVlMWE4
OTQ5Y2RkODM3NDY4MDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuY3BwCkBAIC0xNjg4LDExICsxNjg4LDYgQEAgYm9vbCBKU0JpZ0ludDo6Z2V0UHJpbWl0aXZl
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmIHJlc3UKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHNpemVfdCBKU0JpZ0ludDo6b2Zmc2V0T2ZEYXRh
KCkKLXsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+
KHNpemVvZihKU0JpZ0ludCkpOwotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBK
U0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgQ2hhclR5cGUqICBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgsIEVycm9yUGFyc2VNb2RlIGVycm9yUGFyc2VNb2RlKQogewpA
QCAtMTc5NSwxMSArMTc5MCw2IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6cGFyc2VJbnQoRXhlY1N0
YXRlKiBleGVjLCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLCB1bnNpZ25lZCBsCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLWlubGluZSBKU0JpZ0ludDo6RGlnaXQqIEpTQmlnSW50OjpkYXRhU3Rv
cmFnZSgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RGlnaXQqPihyZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mRGF0YSgpKTsKLX0KLQogaW5saW5lIEpTQmln
SW50OjpEaWdpdCBKU0JpZ0ludDo6ZGlnaXQodW5zaWduZWQgbikKIHsKICAgICBBU1NFUlQobiA8
IGxlbmd0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCmluZGV4
IDJiM2JmOTMwN2Q4ZGJiYjExMDc1MzNlZDgzMDM0N2JjZGQ0YTYxMGIuLmUyYTY1NzgxMDcxNzI5
NGE5NGY4MTc4NGEyZTcxYzQ4YThhZDViMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCaWdJbnQuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpT
QmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBPdmVycmlkZXNUb1RoaXM7CisgICAgZnJp
ZW5kIHN0cnVjdCBDYWNoZWRCaWdJbnQ7CiAKIHB1YmxpYzoKIApAQCAtMjI4LDggKzIyOSwxNSBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChKU0Jp
Z0ludCogeCk7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGxl
bmd0aCk7Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKTsKLSAgICBEaWdpdCogZGF0
YVN0b3JhZ2UoKTsKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoRGlnaXQp
PihzaXplb2YoSlNCaWdJbnQpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgRGlnaXQqIGRhdGFTdG9y
YWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PERpZ2l0Kj4ocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkRhdGEoKSk7CisgICAgfQogCiAg
ICAgRGlnaXQgZGlnaXQodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGlnaXQodW5zaWduZWQsIERp
Z2l0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggNjZj
ZWMzYWY3OWY2YTgxM2Q5OGIzMDY3OGU3ZDRmZGY4NmVjNjEyNi4uOTYyZDg3ZTk5MjZkYWNlMzc2
NmY1OTczZDA5NmQ4ODIyN2UxZGU3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAKQEAgLTUxNyw2ICs1MTcsMTIgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVw
ZW5kZW50T3B0aW9ucygpCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3Nzk1NgogICAgIE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpID0gZmFsc2U7CiAj
ZW5kaWYKKworICAgIGlmICghT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpCisgICAgICAgIE9wdGlv
bnM6OmRpc2tDYWNoZVBhdGgoKSA9IG51bGxwdHI7CisKKyAgICBpZiAoIU9wdGlvbnM6OmRpc2tD
YWNoZVBhdGgoKSkKKyAgICAgICAgT3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IGZhbHNlOwog
fQogCiB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCmluZGV4IGU2N2Q5MzkzZTBjMjY4Zjg5MTdjOTgyMjljMWFmMzQ4YWUyMWYz
NjEuLjQ4ZjZlNjJhN2EwMmI5NDFhOWMzMWU4ODFjYTZjYjFmMjlkMjI0YjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTUwOCw2ICs1MDgsOCBAQCBjb25zdGV4
cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoYm9v
bCwgdHJhY2VMTEludEV4ZWN1dGlvbiwgZmFsc2UsIENvbmZpZ3VyYWJsZSwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgdHJhY2VMTEludFNsb3dQYXRoLCBmYWxzZSwgQ29uZmlndXJhYmxlLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCisgICAgdihvcHRpb25TdHJpbmcsIGRpc2tDYWNoZVBhdGgsIG51bGxw
dHIsIFJlc3RyaWN0ZWQsICIiKSBcCisgICAgdihib29sLCBmb3JjZURpc2tDYWNoZSwgZmFsc2Us
IFJlc3RyaWN0ZWQsICIiKSBcCiAKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCmluZGV4IDgzYWFkMzU2MDM4ZWIyZWM3NmU2Yjhi
ZDM3Yzc0NzZjZWM5MTM1MmUuLjg5MzA0NTRhNGMyM2JhODk4NjllZDQ2NGY3NDNiMjliMzJlOTAy
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCkBAIC00MSw2ICs0MSw4
IEBAIGNsYXNzIFZNOwogSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwRmxhZ3MgcmVnRXhwRmxhZ3Mo
Y29uc3QgU3RyaW5nJik7CiAKIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewor
ICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkUmVnRXhwOworCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAppbmRleCA0
MGU3YzdlYzJmZDYwYjU4NDJhNTcyODVhYzk3YjBmNmE5NTkzOTVkLi41ZjUwMzQ0YTMwNWNkOGYw
NzcwMTMwNzRmZGUwZmRkMmVjMzNhZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKQEAgLTM5LDYgKzM5LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAvLyBtYWtlcyBzZW5zZSBiZWNhdXNlIHN1Y2ggbW9kaWZpY2F0aW9ucyBh
cmUgc28gdW5jb21tb24uIFlvdSdkIGhhdmUgdG8gZG8gc29tZXRoaW5nIGNyYXp5IGxpa2UKIC8v
ICJkZWxldGUgYXJndW1lbnRzW2ldIiBvciBzb21lIHZhcmlhbnQgb2YgZGVmaW5lT3duUHJvcGVy
dHkuCiBjbGFzcyBTY29wZWRBcmd1bWVudHNUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewor
ICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU7CisKIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAppbmRleCBlZDk4MmUz
MWY1NWJiYmM5MTYyOGQyMzQxNzgxMmJiNGY2YzY4NzExLi41ZWVkZWU2ZjgxODZkYWVhMzA0MDk4
MTNkNDUzNDZhYzA3NWVmZDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Rh
Y2tGcmFtZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
SGVhcC5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDM4MjY0NDI3MDE1NDkxYTM0NzYzOTIz
NTFlNWY1NjU2ZjZjMTAzZGUuLjRhMzBmMzdkZDc1YTYzMTUwMzc1Yjg5MWY5ZGU4MjEwZDQ0MzNm
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAppbmRleCA5MTU3
ZDViODI5MjAwZmI2YTk2NWVhM2JjNzg2OTZlNTMyYTkyYjk1Li4yMjBmMDM3YmIxZTAxYTgwOWEx
ZDdhZWIxOTkyMGVmN2FiMzVjMjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgKQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50
IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD4K
IC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAogc3Ry
dWN0IFN5bWJvbFRhYmxlRW50cnkgeworICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkU3ltYm9sVGFi
bGVFbnRyeTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgVmFyT2Zmc2V0IHZhck9mZnNldEZyb21C
aXRzKGludHB0cl90IGJpdHMpCiAgICAgewpAQCAtNDM2LDYgKzQzOCw4IEBAIHN0cnVjdCBTeW1i
b2xUYWJsZUluZGV4SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8U3ltYm9sVGFibGVFbnRyeT4gewog
fTsKIAogY2xhc3MgU3ltYm9sVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBmcmll
bmQgc3RydWN0IENhY2hlZFN5bWJvbFRhYmxlOworCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9CaXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCmluZGV4
IDc1NWNkN2E5YWE1NzZjNmY3YTRkYjE0YzBkOWUzMDJjNzhkYjUxNzguLjQxZDk3MjJlNWYzNzQw
NDljMjQ4YzVjZWJiODI2NzhhMDUzNGNhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCkBAIC0zMyw2ICszMywx
MCBAQAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KIAorbmFtZXNwYWNlIEpTQyB7CitzdHJ1Y3QgQ2FjaGVkQml0VmVjdG9yOworfQor
CiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gVGhpcyBpcyBhIHNwYWNlLWVmZmljaWVudCwgcmVzaXpl
YWJsZSBiaXR2ZWN0b3IgY2xhc3MuIEluIHRoZSBjb21tb24gY2FzZSBpdApAQCAtMzM4LDYgKzM0
Miw4IEBAIHB1YmxpYzoKICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgc2l6ZSgpKTsgfQogICAgICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIHN0cnVj
dCBKU0M6OkNhY2hlZEJpdFZlY3RvcjsKKwogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2lu
dGVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCopIDw8IDM7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODIzYjA4Y2U0ZTRm
NzMxZTM3MmVmZWRkZmE5ODQwZjQwZDBhMDYwMy4uYzA5MzhhMjBlNDkzNGU5MjRlNGM1YWQ3Njlm
MTYzNDQxMDFmYWZlMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5LTAxLTA4ICBUYWRldSBaYWdhbGxvICA8dHph
Z2FsbG9AYXBwbGUuY29tPgorCisgICAgICAgIENhY2hlIGJ5dGVjb2RlIHRvIGRpc2sKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjc4MgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNDYwODQ5MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgaGVscGVyIHRvIGV4ZWN1dGUgYnl0ZWNvZGUt
Y2FjaGUgdGVzdHM6IGl0IGV4ZWN1dGVzIGVhY2ggdGVzdAorICAgICAgICB0d2ljZSwgdGhlIGZp
cnN0IHdpdGggSlNDX2Rpc2tDYWNoZVBhdGggc2V0IHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeQor
ICAgICAgICBhbmQgc2Vjb25kIHdpdGggSlNDX2ZvcmNlRGlza0NhY2hlPXRydWUgKGluIGFkZGl0
aW9uIHRvIHRoZSBjYWNoZSBwYXRoKQorICAgICAgICB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHRo
ZSBkaXNrIGNhY2hlIGlzIGJlaW5nIHVzZWQgYW5kIG5vIG5ldworICAgICAgICBVbmxpbmtlZENv
ZGVCbG9ja3MgYXJlIGJlaW5nIGNyZWF0ZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL2pzYy1zdHJl
c3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAyMDE5LTAxLTE2ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihQU09OKSBWaWV3
IGJlY29tZXMgYmxhbmsgYWZ0ZXIgY2xpY2sgYSBjcm9zcy1zaXRlIGRvd25sb2FkIGxpbmsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUt
Y2FjaGUtdGVzdC1oZWxwZXIgYi9Ub29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJz
L2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4YzkyOTIxZGI4ZDRkZDI1
MDI3NDQwYzZjZjRmZDFmOWZhZjdlODgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyCkBAIC0w
LDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCityZXF1aXJlICdydWJ5Z2VtcycKK3JlcXVpcmUgJ2ZpbGV1dGlscycKK3JlcXVp
cmUgJ2pzb24nCityZXF1aXJlICdzaGVsbHdvcmRzJworcmVxdWlyZSAndG1wZGlyJworCitkZWYg
bXlzeXMoKmNtZCkKKyAgICByYWlzZSAiQ29tbWFuZCAje2NtZC5pbnNwZWN0fSBmYWlsZWQ6ICN7
JD8uaW5zcGVjdH0iIHVubGVzcyBzeXN0ZW0oKmNtZCkKK2VuZAorCitwYXRoVG9WTSA9IEFSR1Zb
MF0KK2lucHV0RmlsZSA9IEFSR1ZbMV0KK2V4dHJhT3B0aW9ucyA9IEFSR1ZbMi4uLTFdCitkaXNr
Q2FjaGVQYXRoID0gRGlyLm1rdG1wZGlyIFtpbnB1dEZpbGUsICdieXRlY29kZS1jYWNoZSddCisK
K2JlZ2luCisgICAgRU5WWyJKU0NfZGlza0NhY2hlUGF0aCJdID0gZGlza0NhY2hlUGF0aAorICAg
IG15c3lzKHBhdGhUb1ZNLCBpbnB1dEZpbGUsICpleHRyYU9wdGlvbnMpCisgICAgRU5WWyJKU0Nf
Zm9yY2VEaXNrQ2FjaGUiXSA9ICJ0cnVlIgorICAgIG15c3lzKHBhdGhUb1ZNLCBpbnB1dEZpbGUs
ICpleHRyYU9wdGlvbnMpCitlbnN1cmUKKyAgICBGaWxlVXRpbHMucm1fcmYoZGlza0NhY2hlUGF0
aCkKK2VuZApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBi
L1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggNjMyOTQwYjNlNGRhN2I2
OWNkOGU4N2YwMTUxYjEyNjE2ZTViZDViYy4uOTFlMjY2NTY3ODFhOWNiYzBhODhhNjNhNGU5ZDM4
NWRlNDY1ODJjMSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02NTUsNiArNjU1
LDE1IEBAIGRlZiBydW5EZWZhdWx0KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAg
cnVuKCJkZWZhdWx0IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCiBlbmQKIAorZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKKyAgICB1bmxlc3MgJGhvc3RPUyA9PSAiZGFyd2luIgorICAgICAgICBza2lwCisgICAg
ICAgIHJldHVybgorICAgIGVuZAorICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyAkdGVzdFNw
ZWNpZmljUmVxdWlyZWRPcHRpb25zICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMKKyAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsicnVieSIsIChw
YXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyIikudG9fcywgcGF0aFRv
Vk0udG9fcywgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIs
IHNpbXBsZUVycm9ySGFuZGxlcikKK2VuZAorCiBkZWYgcnVuQmlnSW50RW5hYmxlZCgqb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80MDMz
MTEyMT4KICAgICBpZiAkcmVtb3RlIG9yICgkYXJjaGl0ZWN0dXJlICF+IC94ODYvaSBhbmQgJGhv
c3RPUyA9PSAiZGFyd2luIikKQEAgLTc1MSw2ICs3NjAsNyBAQCBkZWYgZGVmYXVsdFJ1bgogICAg
ICAgICBkZWZhdWx0UXVpY2tSdW4KICAgICBlbHNlCiAgICAgICAgIHJ1bkRlZmF1bHQKKyAgICAg
ICAgcnVuQnl0ZWNvZGVDYWNoZQogICAgICAgICBpZiAkaml0VGVzdHMKICAgICAgICAgICAgIHJ1
bk5vTExJbnQKICAgICAgICAgICAgIHJ1bk5vQ0pJVFZhbGlkYXRlUGhhc2VzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359489</attachid>
            <date>2019-01-18 08:07:46 -0800</date>
            <delta_ts>2019-01-18 13:29:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190118170734.patch</filename>
            <type>text/plain</type>
            <size>137584</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NDdmYTQ5YWEwMmE4MWI1NjkzMjgzNWU5OWMzZDk1MGQ4NDk0MzJiLi5hNDQxOTBhYjIxMTVmNzBi
Yjg4YmI1ZWJiZTk2NWVjYWRmOGFkODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjAgQEAKKzIwMTktMDEtMTggIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLgorCisgICAgICAgIEVhY2ggY2xhc3MgdGhhdCBjYW4gYmUgc2VyaWFsaXplZCBo
YXMgYSBjb3VudGVycGFydCBpbiBDYWNoZWRUeXBlcywgd2hpY2gKKyAgICAgICAgaGFuZGxlcyB0
aGUgZGVjb2RpbmcgYW5kIGVuY29kaW5nLiBXaGVuIGRlY29kaW5nLCB0aGUgY2FjaGVkIG9iamVj
dHMgYXJlCisgICAgICAgIG1tYXAnZCBmcm9tIGRpc2ssIGJ1dCBvbmx5IHVzZWQgZm9yIGNyZWF0
aW5nIGluc3RhbmNlcyBvZiB0aGUgcmVzcGVjdGl2ZQorICAgICAgICBpbi1tZW1vcnkgdmVyc2lv
biBvZiBlYWNoIG9iamVjdC4gSWRlYWxseSwgdGhlIG1tYXAnZCBvYmplY3RzIHNob3VsZCBiZQor
ICAgICAgICB1c2VkIGF0IHJ1bnRpbWUgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMpOgor
ICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEhhbmRs
ZXJJbmZvOjpVbmxpbmtlZEhhbmRsZXJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvblN0cmVhbS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRTZXRDb25zdGFudCk6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudElkZW50aWZpZXJTZXRzKToKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEdsb2Jh
bENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6VW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRh
dGFUYWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoZnVuY3Rpb25RdWl0KToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZUtleS5oOgor
ICAgICAgICAoSlNDOjpTb3VyY2VDb2RlS2V5OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAg
KiBwYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmg6CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxl
RW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkVuY29kZXI6OkFsbG9jYXRpb246OmJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkVuY29kZXI6OkFsbG9jYXRpb246Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6OkVuY29kZXI6OkFsbG9jYXRpb246OkFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpFbmNv
ZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6dm0pOgorICAgICAgICAoSlND
OjpFbmNvZGVyOjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZzZXRPZik6Cisg
ICAgICAgIChKU0M6OkVuY29kZXI6OmNhY2hlUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6
b2Zmc2V0Rm9yUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAgICAg
IChKU0M6OkVuY29kZXI6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdl
OjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdlOjpidWZmZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
RW5jb2Rlcjo6UGFnZTo6Z2V0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6
YWxsb2NhdGVOZXdQYWdlKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6On5EZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6dm0p
OgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRlY29k
ZXI6OmNhY2hlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6YWRkRmluYWxpemVyKToK
KyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAgICAgICAg
KEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgIChKU0M6
OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFB0
cjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRQdHI6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFdy
aXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFBhaXI6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZElk
ZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2lt
cGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFi
bGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZEJpdFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Qml0VmVjdG9yOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRB
cnJheTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRz
VGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkU3ltYm9sVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZEltbXV0YWJsZUJ1dHRlcmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1t
dXRhYmxlQnV0dGVyZmx5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdF
eHA6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkQmlnSW50OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVl
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1l
dGFkYXRhVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9y
aWdpbjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFRleHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU3RyaW5nU291cmNlUHJvdmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0
cmluZ1NvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNl
UHJvdmlkZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJj
ZUNvZGVTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29k
ZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpmaXJzdExpbmVPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmVD
b3VudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5s
aW5rZWRGdW5jdGlvbk5hbWVTdGFydCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRCb2R5U3RhcnRDb2x1bW4gY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQm9keUVuZENvbHVtbiBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c3RhcnRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNvdXJjZUxl
bmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFy
YW1ldGVyc1N0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25F
eGVjdXRhYmxlOjp0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnR5cGVQcm9maWxpbmdFbmRPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlckNvdW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpmZWF0dXJl
cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c291cmNl
UGFyc2VNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxl
Ojppc0luU3RyaWN0Q29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6aGFzQ2FwdHVyZWRWYXJpYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmlzQnVpbHRpbkZ1bmN0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjppc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3RvciBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29uc3RydWN0QWJpbGl0eSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29uc3RydWN0b3JLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlOjpmdW5jdGlvbk1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNjcmlwdE1vZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnN1cGVyQmluZGluZyBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVyaXZlZENvbnRleHRUeXBlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpuYW1lIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjplY21hTmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mZXJyZWROYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3RlciBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c2NvcGVSZWdpc3RlciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0UmVnaXN0ZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNvdXJjZVVSTERpcmVjdGl2ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6dXNlc0V2YWwgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzU3RyaWN0TW9kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aXNDb25zdHJ1Y3RvciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2FwdHVyZWRWYXJpYWJsZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQnVpbHRpbkZ1bmN0aW9uIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpzdXBlckJpbmRpbmcgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNjcmlwdE1vZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQXJyb3dGdW5jdGlvbkNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQ2xhc3NDb250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjp3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpjb25zdHJ1Y3RvcktpbmQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmRlcml2ZWRDb250ZXh0VHlw
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6ZXZhbENvbnRleHRUeXBl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpoYXNUYWlsQ2FsbHMgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmxpbmVDb3VudCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6ZW5kQ29sdW1uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1WYXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrOjpudW1DYWxsZWVMb2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRDb2RlQmxvY2s6Om51bVBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRD
b2RlQmxvY2s6OmZlYXR1cmVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2Nr
OjpwYXJzZU1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmNvZGVU
eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpyYXJlRGF0YSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFByb2dyYW1Db2RlQmxvY2s6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFByb2dyYW1Db2RlQmxvY2s6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZE1vZHVsZUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkTW9kdWxlQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRF
dmFsQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRFdmFsQ29kZUJsb2Nr
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OlVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OiBj
b25zdCk6CisgICAgICAgIChKU0M6OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OmRlY29kZUNvZGVCbG9ja0ltcGwpOgorICAgICAgICAqIHJ1
bnRpbWUvQ2FjaGVkVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmguCisgICAgICAgIChKU0M6OmRlY29kZUNv
ZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpn
ZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZTo6d3JpdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChK
U0M6OkNvZGVDYWNoZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmVu
ZCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAg
ICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAg
IChKU0M6OndyaXRlQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoK
KyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAg
ICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9T
dGFja0ZyYW1lLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAg
ICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorCiAyMDE5LTAxLTE2ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBuZXcgYnl0ZWNvZGUgc3RydWN0
cyBzbyB0aGF0IHRoZSBmaWVsZHMgYXJlIHByZWZpeGVkIHdpdGggIm1fIi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMTIxZTZi
ZmVlYTlmYjlkMDFiYjFmZDc4NWViYjJjYmNkZWMxMGM3Mi4uNDA4NGUwZmU1M2M1ZjFkOGJjMzY0
NmQyNjdiNjU4MDE2NjFlM2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wMS0xOCAgVGFk
ZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBieXRlY29k
ZSB0byBkaXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTI3ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MDg0OTMyPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpdFZlY3RvcnMgaGF2ZSB0byBi
ZSBmcmllbmRzIHdpdGggSlNDOjpDYWNoZUJpdFZlY3RvciB0byBhbGxvdworICAgICAgICBzZXJp
YWxpemluZyBpdHMgYnVmZmVyIGFzIHBhcnQgb2YgdGhlIGJ5dGVjb2RlIGNhY2hlIGVuY29kaW5n
LgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorCiAyMDE5LTAxLTE2ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2Mgc2hvdWxkIHVz
ZSBKU0MgVk0gdGFnIGZvciBnaWdhY2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDZhY2RmYjEzNDI2NDY1YmM0OGJmMWQ3YTVkYjc3NzVmMzg0OWE1OWQuLmVhODU4YjE2
ODI0OWExYzEyZDNiMTFjNjAzNTFkYTI4N2RkMGM0NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTgzMyw2ICs4MzMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAogICAgIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3RJbmxpbmVzLmgKKyAgICBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKICAgICBy
dW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmgKICAgICBydW50aW1lL0pTSW50ZXJuYWxQcm9taXNl
RGVmZXJyZWQuaAogICAgIHJ1bnRpbWUvSlNNaWNyb3Rhc2suaApAQCAtODQ4LDYgKzg0OSw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcnVudGlt
ZS9KU1Byb21pc2UuaAogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuaAogICAgIHJ1
bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAorICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgKICAgICBydW50aW1lL0pTUHJveHkuaAogICAgIHJ1bnRpbWUvSlNSdW5Mb29wVGlt
ZXIuaAogICAgIHJ1bnRpbWUvSlNTY29wZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRmN2U2YzA0YWI5YTZhYmQ3YjQwZTJhZTk3YzVhYTBiYWMxMTI5ZDkuLjFiYzkyNWE5Njk1
YmVjMjU4YWM1NjdhYWM1OTQ1YWU0NzVjNDRkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC04MjYsNyArODI2LDcgQEAKIAkJMjYyRDg1QjcxQzBENjUwRjAwNkFDQjYxIC8qIEFp
ckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRp
YWxSZWdpc3RlclN0YWxscy5oICovOyB9OwogCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2NjMgLyog
QWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovOyB9OwogCQky
NjlENjM2RTFCRkJFNUQxMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyog
RlRMT3V0cHV0LmggKi87IH07Ci0JCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCAqLzsgfTsKKwkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJB
MTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMTExMjQ0MTkyRkNFNzkwMDVF
RTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2Fs
bGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIxMUI1NzQxNzZBMjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAq
LzsgfTsKIAkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNEJC
N0YyMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggKi87IH07CkBA
IC0xMDYyLDcgKzEwNjIsNyBAQAogCQk1M0VBRkUyRjIwOERGQUI0MDA3RDUyNEIgLyogdGVzdGFw
aS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFE
NEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFwaS5jcHAgKi87IH07CiAJCTUzRUUwMUI2MjE4
RjY5MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNFRTAx
QjgyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAv
KiBKU1NjcmlwdEludGVybmFsLmggKi87IH07Ci0JCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFBNyAv
KiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0
dGVyZmx5LmggKi87IH07CisJCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJs
ZUJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGNDBFODUx
RDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21T
ZWN0aW9ucy5oICovOyB9OwogCQk1M0Y0MEU4QjFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0
aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi87IH07
CiAJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QzFENTkwMUYyMDA5OUEx
QjYgLyogV2FzbVBhcnNlci5oICovOyB9OwpAQCAtMzEyOSw2ICszMTI5LDcgQEAKIAkJMTQzODZB
NzMxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0Mzg2QTc2MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2
YWxFeGVjdXRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDM4NkE3NzFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBD
YWNoZWRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQwMDUxRjBBNTMxRDNCMDAwNUYw
NjEgLyogTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlLmg7IHBh
dGggPSB0ZXN0cy9Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNTIw
MEE1MzFEM0IwMDA1RjA2MSAvKiBOb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFt
ZSA9IE5vZGUuYzsgcGF0aCA9IHRlc3RzL05vZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQ0MDA3NDgwQTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5vZGVMaXN0Lmg7IHBhdGggPSB0ZXN0cy9Ob2RlTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI0Myw2ICszMjQ0LDcgQEAKIAkJMTRE
ODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmphdmFzY3JpcHQ7IG5hbWUgPSB0ZXN0YXBpLmpzOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGku
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRG
QiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0xleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNERBRkE0NTIxRTNCODcxMDA0QjY4
RjcgLyogQ2FjaGVkVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FjaGVkVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERFMEQ2
ODBEMDI0MzE0MDBBQUNDQTIgLyogSlNHbG9iYWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVy
ID0geGNvZGUubGFuZy5jcHA7IH07CiAJCTE0REYwNEQ5MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0
aWNQcm9wZXJ0eUFuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
YXRpY1Byb3BlcnR5QW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRF
ODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjYwMiw2ICs2NjA0LDggQEAKIAkJCQk5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUg
LyogQnVuZGxlUGF0aC5tbSAqLywKIAkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0
dGVyZmx5LmggKi8sCiAJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlu
bGluZXMuaCAqLywKKwkJCQkxNERBRkE0NTIxRTNCODcxMDA0QjY4RjcgLyogQ2FjaGVkVHlwZXMu
Y3BwICovLAorCQkJCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBDYWNoZWRUeXBlcy5oICov
LAogCQkJCTBGRUMzQzVGMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLywK
IAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAogCQkJCTE0
NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDk0OWVkY2FhNWI1MzhiODU4YWRjMzRjMTEyNGRjNmMxZWRkNjIyNTUu
LjI1OGQ0OWNlZDFlMmQ1OWRkYmRmMTQ3ZjRhY2IxODk0OTM4ZGJhMTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKQEAgLTcxMyw2ICs3MTMsNyBAQCBydW50aW1lL0Jvb2xlYW5Db25zdHJ1
Y3Rvci5jcHAKIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAKIHJ1bnRpbWUvQm9vbGVhblByb3Rv
dHlwZS5jcHAKIHJ1bnRpbWUvQ2FsbERhdGEuY3BwCitydW50aW1lL0NhY2hlZFR5cGVzLmNwcAog
cnVudGltZS9DYXRjaFNjb3BlLmNwcAogcnVudGltZS9DbGFzc0luZm8uY3BwCiBydW50aW1lL0Ns
b25lZEFyZ3VtZW50cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1
aWx0aW5OYW1lcy5jcHAKaW5kZXggNDVkZTgyZTdjYjU4YTI4M2IyMGZjYWU1OTgyYmJiNWMwNGRh
OTE3NS4uYTBmODUzYTZlMDVkYzQ2MThmZjA0ZGU1OTAxOWIxZWExM2Q2YjM3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKQEAgLTYzLDYg
KzYzLDcgQEAgQnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMoVk0qIHZtLCBDb21tb25JZGVudGlm
aWVycyogY29tbW9uSWRlbnRpZmllcnMpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJ
RVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZ
KQogICAgIEpTQ19GT1JFQUNIX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShJTklUSUFMSVpFX1BVQkxJ
Q19UT19QUklWQVRFX0VOVFJZKQogICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19F
QUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKKyAg
ICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9XRUxMX0tOT1dOX1NZTUJPTChJ
TklUSUFMSVpFX1NZTUJPTF9QUklWQVRFX1RPX1BVQkxJQ19FTlRSWSkKICAgICBKU0NfQ09NTU9O
X1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9XRUxMX0tOT1dOX1NZTUJPTChJTklUSUFMSVpFX1NZ
TUJPTF9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKICAgICBtX3ByaXZhdGVUb1B1YmxpY01hcC5h
ZGQobV9kb2xsYXJWTVByaXZhdGVOYW1lLmltcGwoKSwgJm1fZG9sbGFyVk1OYW1lKTsKICAgICBt
X3B1YmxpY1RvUHJpdmF0ZU1hcC5hZGQobV9kb2xsYXJWTU5hbWUuaW1wbCgpLCAmbV9kb2xsYXJW
TVByaXZhdGVOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuaAppbmRleCBmNjZiOGNiNTFlYjQwMmQ4NzM2ZmQ3ZGQwZDJkMGU3YTI5MmY0NTEyLi44
NTMxZGIyNjBiZDA3MDFiMzcxOTAxYjY3NGJmZjVkZjBiZmJkODc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0yMTMsNiArMjEzLDcgQEAg
ZXh0ZXJuIFN5bWJvbEltcGw6OlN0YXRpY1N5bWJvbEltcGwgcG9seVByb3RvUHJpdmF0ZU5hbWU7
CiAvLyBXZSBjb21tYW5kZWVyIHRoZSBwdWJsaWNUb1ByaXZhdGVNYXAgdG8gYWxsb3cgdXMgdG8g
Y29udmVydCBwcml2YXRlIHN5bWJvbCBuYW1lcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzeW1ib2wu
CiAvLyBlLmcuIEBpdGVyYXRvclN5bWJvbCBwb2ludHMgdG8gU3ltYm9sLml0ZXJhdG9yIGluIHRo
aXMgbWFwIHJhdGhlciB0aGFuIHRvIGEgYW4gYWN0dWFsIHByaXZhdGUgbmFtZS4KIC8vIEZJWE1F
OiBUaGlzIGlzIGEgd2VpcmQgaGFjayBhbmQgd2Ugc2hvdWxkbid0IG5lZWQgdG8gZG8gdGhpcy4K
KyNkZWZpbmUgSU5JVElBTElaRV9TWU1CT0xfUFJJVkFURV9UT19QVUJMSUNfRU5UUlkobmFtZSkg
bV9wcml2YXRlVG9QdWJsaWNNYXAuYWRkKG1fIyNuYW1lIyNTeW1ib2wuaW1wbCgpLCAmbV8jI25h
bWUjI1N5bWJvbFByaXZhdGVJZGVudGlmaWVyKTsKICNkZWZpbmUgSU5JVElBTElaRV9TWU1CT0xf
UFVCTElDX1RPX1BSSVZBVEVfRU5UUlkobmFtZSkgbV9wdWJsaWNUb1ByaXZhdGVNYXAuYWRkKG1f
IyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllci5pbXBsKCksICZtXyMjbmFtZSMjU3ltYm9s
KTsKIAogY2xhc3MgQnVpbHRpbk5hbWVzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKaW5kZXggM2Y0NWE0MTc1YTFkYmU2Y2Q2ODMxNDE3NWJmYTlkODMz
MGZiZTMxNS4uODllOWQ1NTU3MmFkM2I3N2RkMWU4ZTRmNzA4NTY3YmM0YmU2YTgzNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTg2OSw3ICs4
NjksNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0m
IHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRz
KQordm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYg
dm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cykK
IHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IGE2OTI2ZmRmOTdlYjRlNmM2
ZmNkMGViMjc2ZjgwNTMxOWJhMGJmZTQuLmM3NDhmYzA3YzI3MTEzODlmMjcwMzQ1NGMyMjZlNWM3
Y2I4MWMwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
QEAgLTg5MCw3ICs4OTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0
aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCi0gICAg
dm9pZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBWZWN0b3I8
Q29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKTsKKyAgICB2b2lkIHNldENv
bnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNvbnN0IFZlY3RvcjxDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVn
aXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNv
bnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSGFuZGxlckluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5k
bGVySW5mby5oCmluZGV4IDY2YzNiNzY4Nzc1NjIwNzc2ZDI2M2ZmMDk4ZGU2ZjQ2YjY2ZTc3ODMu
LjdmNDY1ZDJhZTkzNzk5YjkxZGY3ODcxNDE5NGZjYTM0YmQyYTFhMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCkBAIC04OSw2ICs4OSwxMCBAQCBz
dHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKIH07CiAKIHN0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZv
IDogcHVibGljIEhhbmRsZXJJbmZvQmFzZSB7CisgICAgVW5saW5rZWRIYW5kbGVySW5mbygpCisg
ICAgeworICAgIH0KKwogICAgIFVubGlua2VkSGFuZGxlckluZm8odWludDMyX3Qgc3RhcnQsIHVp
bnQzMl90IGVuZCwgdWludDMyX3QgdGFyZ2V0LCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSkKICAg
ICB7CiAgICAgICAgIHRoaXMtPnN0YXJ0ID0gc3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCmluZGV4IDcwZWRlM2U0MWM1ZDVj
NDg5ZDc5NmZjZmMwYzFjY2Q5OThkMjllZDUuLmI0MDQ4MGE1ZTc5NThkZjBhNDE3ZmYxMjIwMGNk
OTU1ZWQwMDJhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bnN0cnVjdGlvblN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bnN0cnVjdGlvblN0cmVhbS5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIEluc3RydWN0aW9uU3Ry
ZWFtIHsKICAgICB1c2luZyBJbnN0cnVjdGlvbkJ1ZmZlciA9IFZlY3Rvcjx1aW50OF90LCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz47CiAKICAgICBmcmllbmQgY2xhc3MgSW5zdHJ1Y3Rpb25TdHJl
YW1Xcml0ZXI7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZEluc3RydWN0aW9uU3RyZWFtOwogcHVi
bGljOgogICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IGYwZTlkNjRj
ODU0YTNmNTM2NzUyZDQ4NzQ2OTJkMjc4NzdkNjcwNDkuLjE0OGE1MzUyMWZhNzYyYzI1N2E2NTJi
YmUzZDNjMTI4NGI2Njg2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC02NSwxMiArNjUsMTUgQEAgY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwog
c3RydWN0IEV4ZWN1dGFibGVJbmZvOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOworCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFs
dWVQcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKIHR5cGVk
ZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNp
Z25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBV
bmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcgQ29uc3RhbnRJbmRlbnRpZmllclNldEVu
dHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50
SWRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsK
IAogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9j
YXRpb24gewpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6T3RoZXIpOwotICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0
YW50SW5kZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50
SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVz
dWx0KSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKQEAgLTIwMiw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XTsKICAgICB9CiAgICAgY29uc3Qg
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVu
dGlmaWVyU2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25z
dGFudElkZW50aWZpZXJTZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmll
clNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJ
ZGVudGlmaWVyU2V0czsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KQEAg
LTM2Nyw2ICszNzAsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2Rl
QmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBE
ZWJ1Z2dlck1vZGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAg
ICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3RydWN0dXJlKiwgY29uc3QgQ2FjaGVkQ29k
ZUJsb2NrPENvZGVCbG9ja1R5cGU+Jik7CisKICAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKIAog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtMzc4LDYgKzM4NSw5IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CiAgICAgZnJpZW5kIGNsYXNz
IEJ5dGVjb2RlR2VuZXJhdG9yOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOworCiAgICAgdm9pZCBhcHBseU1v
ZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiwgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImKTsK
IAogICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpCkBAIC00NDQsNyArNDU0LDcg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKICAgICBW
ZWN0b3I8Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKLSAgICBWZWN0b3I8Q29uc3RhbnRJbmRlbnRp
ZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CisgICAgVmVjdG9yPENvbnN0
YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CiAgICAgVmVj
dG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247CiAgICAgdHlwZWRlZiBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPj4gRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOwogICAgIEZ1bmN0aW9uRXhw
cmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRGVjbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKaW5kZXggOTk4N2I0MzEz
MzQzYjZjYjc1MmE0MjBiMzU4ZDlhMzYwMzE3MmYyNi4uMmYzMjM3OWEwMWY0MzVjM2QwMThkZjY1
MTkzNWEyZTJiMDNjZDAxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FjaGVkRXZhbENvZGVCbG9jazsKKwogY2xhc3MgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CkBAIC01
OSwxMSArNjEsMTUgQEAgcHVibGljOgogICAgICAgICBtX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRh
dGVzID0gV1RGTW92ZShmdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7CiAgICAgfQogcHJpdmF0
ZToKKyAgICBmcmllbmQgQ2FjaGVkRXZhbENvZGVCbG9jazsKKwogICAgIFVubGlua2VkRXZhbENv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KIAor
ICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkRXZhbENvZGVC
bG9jayYpOworCiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5o
CmluZGV4IGI1NDgyYjY1YzhiOGVmYjNhYTMwNmE0MTNiZDU0NjAzNDkxYTkwMTMuLjY1YWFmYzg4
ZTU5N2NiMjBmNDlmZDMyNzJiZGUxNWExMGRjYmRkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaApA
QCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FjaGVkRnVuY3Rp
b25Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sgZmluYWwgOiBw
dWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRD
b2RlQmxvY2sgQmFzZTsKQEAgLTQ0LDEwICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVkRnVuY3Rp
b25Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KKwor
ICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZEZ1bmN0
aW9uQ29kZUJsb2NrJik7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90bykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggNTI2ODk4Yzk1MWQ4MjE3NTk3OTg4
MTEwMmY5ZGM3ZDYxNWIwMTUyMi4uNjUyNmNkOTBjYmJhYTY5ZTI2Y2MwYTFjMGFjNzdiNjhjMTk1
ZmI1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTM5LDExICszOSwxMyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKIGNsYXNzIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
OwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBT
b3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CitjbGFzcyBD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAKIGVudW0gVW5saW5rZWRGdW5jdGlvbktpbmQgewog
ICAgIFVubGlua2VkTm9ybWFsRnVuY3Rpb24sCkBAIC01NCw2ICs1Niw3IEBAIGNsYXNzIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKICAgICBmcmllbmQgY2xhc3MgVk07CisgICAgZnJp
ZW5kIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpAQCAtMTQ3LDYgKzE1MCw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVj
dHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2Vk
RnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIFZhcmlh
YmxlRW52aXJvbm1lbnQmLCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGlu
RGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KERlY29kZXImLCBWYXJpYWJsZUVudmlyb25tZW50JiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlJik7CiAKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9mZnNldDsKICAgICB1bnNpZ25l
ZCBtX2xpbmVDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKaW5kZXggMzQzODYyZTY0NzBmZTFiMWE0MjQ4
NWQ4NzY5ZTI3N2Q3MmMxNTA4ZS4uM2QwNDJlZjQ4NmM3ZDEyY2FmMGQzMmQ2MDJlMTZmYjIxMmY2
ZTA3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
R2xvYmFsQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKQEAgLTM4LDYgKzM4LDEyIEBAIHByb3RlY3RlZDoKICAg
ICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUp
CiAgICAgewogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cisg
ICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPiYgY2FjaGVkQ29k
ZUJsb2NrKQorICAgICAgICA6IEJhc2UoZGVjb2Rlciwgc3RydWN0dXJlLCBjYWNoZWRDb2RlQmxv
Y2spCisgICAgeworICAgIH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAppbmRleCAzZTNlOGRmYjRkNWJi
YzQ2NGY1ZTZhMjM0NGNhYWNhOTk0OTQ5ZWYxLi5mOTQ3MDdlM2IxODVkNzcxNmI0MTZhNDkzM2Vj
YTZjOTUxYTRkNWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNzIE1ldGFk
YXRhVGFibGU7CiBjbGFzcyBVbmxpbmtlZE1ldGFkYXRhVGFibGUgewogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1ldGFkYXRhVGFibGU7
CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZE1ldGFkYXRhVGFibGU7CiAKIHB1YmxpYzoKICAgICBz
dHJ1Y3QgTGlua2luZ0RhdGEgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCmluZGV4IDBl
OWM1ZjViZGRlNmM3NTYyYjY2YTAzYmMwYTk4Yzg3YWRiZDkzMDIuLjM5MzNiZmQzZTNhZTI0ZTZm
NjRmNWUwYTlkOWQxMTkwMjEzMDA2ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgK
QEAgLTI5LDYgKzI5LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIERlY29kZXI7Citj
bGFzcyBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAtNzQsMTEg
Kzc3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENhY2hlZE1v
ZHVsZUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIE1v
ZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCisgICAgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRNb2R1bGVDb2Rl
QmxvY2smKTsKKwogICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwogCiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgKaW5kZXgg
YWZlMjZhZWQxYTUwM2FiMjNmZDhmNDQ3ZjlkZWMyZGMwNmNhNTgyNi4uNzY4NDRhMzdhNDExOTUy
ZWVkYWJhNDVjNzgyZGRmNTU1M2IwY2RmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaApAQCAtMjksNiAr
MjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9j
azsKKwogY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrIEJhc2U7CkBAIC01MCwxMSArNTIsMTUgQEAgcHVibGljOgogICAgIGNvbnN0IFZh
cmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxEZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X2xleGljYWxEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVkUHJv
Z3JhbUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJN
b2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEdsb2JhbENv
ZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCisgICAgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrJik7CisK
ICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25zOwogICAgIFZhcmlhYmxl
RW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBhZDY1MzYxOGI0Mjhm
Y2EwNmJlMDRkZGI2NmMwZjNkMzFkMmIyNjRjLi44ZTgyNTYwMjhiMTAzN2RiMmIzMDdhY2QxN2Qw
NWI3ZjM1OGY0N2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVD
bG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAppbmRleCBiNDY3MzA3ODVkYTE5OWMyZTIwZjVhMGRiYzVkZjYzMjQxMTIzNjBmLi45MWJhMzNi
MzM5NzAyYmMzZTk2YjcyYWM3ZDg4Yzk4ZDIzYjAwOGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRl
ICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUNh
Y2hlLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkNvbmZpZ0ZpbGUuaCIK
ICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKQEAgLTE5ODYsOCArMTk4NywxMSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFpbE5leHROZXdDb2RlQmxvY2soRXhlY1N0
YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSop
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICB2bS5jb2RlQ2FjaGUoKS0+d3Jp
dGUodm0pOworCiAgICAganNjRXhpdChFWElUX1NVQ0NFU1MpOwogCiAjaWYgQ09NUElMRVIoTVNW
QykKQEAgLTI4NTYsNiArMjg2MCw4IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9w
dGlvbnMsIGJvb2wgaXNXb3JrZXIsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAjZW5kaWYKICAgICB9CiAK
KyAgICB2bS5jb2RlQ2FjaGUoKS0+d3JpdGUodm0pOworCiAgICAgaWYgKGlzV29ya2VyKSB7CiAg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgICAgICAvLyBUaGlzIGlzIG5lZWRl
ZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIHdvcmtlcidzIG1haW4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgKaW5kZXggMzEzY2ZhNDVhYWY5MjJiMDdiMDQ1YmJl
ZTAzNjM4NTljYmQ0YzA5Yi4uYzk2YTI0YWRmMTYyNjExMzc4OWU1NTQ2NmE0OWFmNmJkM2Q4ZDk0
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgKQEAgLTMzLDYg
KzMzLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU291cmNlQ29kZSA6IHB1Ymxp
YyBVbmxpbmtlZFNvdXJjZUNvZGUgeworICAgICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU291cmNl
Q29kZTsKKwogICAgIHB1YmxpYzoKICAgICAgICAgU291cmNlQ29kZSgpCiAgICAgICAgICAgICA6
IFVubGlua2VkU291cmNlQ29kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZUNvZGVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZUtleS5oCmluZGV4IGE4ZTYwM2MyNmEwYjYwMzYyYTAyZGVhYzA1MTYxNjlkNTc1NTgw
MjEuLmNjM2FiZTIxZmFmNTcxNGJmOTk4MDFkZmI5ZWVkNDI4MzQ4MWYxODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCkBAIC0zNyw2ICszNyw4IEBA
IGVudW0gY2xhc3MgVHlwZVByb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMgfTsKIGVudW0gY2xhc3Mg
Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQgeyBObywgWWVzIH07CiAKIGNsYXNzIFNvdXJjZUNv
ZGVGbGFncyB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFNvdXJjZUNvZGVLZXk7CisKIHB1Ymxp
YzoKICAgICBTb3VyY2VDb2RlRmxhZ3MoKSA9IGRlZmF1bHQ7CiAKQEAgLTcwLDYgKzcyLDggQEAg
cHJpdmF0ZToKIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVLZXkgeworICAgIGZyaWVuZCBjbGFzcyBD
YWNoZWRTb3VyY2VDb2RlS2V5OworCiBwdWJsaWM6CiAgICAgU291cmNlQ29kZUtleSgpCiAgICAg
ewpAQCAtMTE0LDYgKzExOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAmJiBzdHJpbmcoKSA9
PSBvdGhlci5zdHJpbmcoKTsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU291
cmNlQ29kZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorCiAgICAgc3RydWN0IEhhc2ggewogICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU291cmNlQ29kZUtleSYgYSwgY29u
c3QgU291cmNlQ29kZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAppbmRleCA2ZWM1OTBiNTNl
NmM5YzMyN2U0MjQ0ZDBiMTE5YjM2ZDA5NmZjODFlLi5hYWFhZDNmNDEyZjhmM2ZhNWJjMWYyZmVi
ZmIxNGNjNzRkZTIyNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1VubGlua2VkU291cmNlQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
VW5saW5rZWRTb3VyY2VDb2RlLmgKQEAgLTM1LDYgKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgVW5saW5rZWRTb3VyY2VDb2RlIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgU291cmNlVHlwZT4KKyAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hlZFVubGlua2VkU291cmNl
Q29kZVNoYXBlOworCiAgICAgcHVibGljOgogICAgICAgICBVbmxpbmtlZFNvdXJjZUNvZGUoKQog
ICAgICAgICAgICAgOiBtX3Byb3ZpZGVyKDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCmluZGV4IDEyOWI1ZWE2YmQ5YjcyNmExZDlh
NDAxMWVmOTY5MGY4Y2M2YjBkZDMuLmQ4NGIyZTFmYjIxOGVjNDljZDk1ZTViZDg1ZGM3NjUwY2Zh
NjA5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVF
bnZpcm9ubWVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVF
bnZpcm9ubWVudC5oCkBAIC0xMTYsNiArMTE2LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNFdmVy
eXRoaW5nQ2FwdHVyZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkOyB9
CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ7
CisKICAgICBNYXAgbV9tYXA7CiAgICAgYm9vbCBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkIHsgZmFs
c2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODZlY2IxOTg4NjJmOTU0M2YyNjJkMTFhZDZlNTAyZjU3NTZhZjZkNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcApAQCAtMCwwICsxLDIwMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkVHlw
ZXMuaCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2luY2x1ZGUg
IkpTQ2FzdC5oIgorI2luY2x1ZGUgIkpTSW1tdXRhYmxlQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAi
SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNU
YWJsZS5oIgorI2luY2x1ZGUgIlNvdXJjZUNvZGVLZXkuaCIKKyNpbmNsdWRlICJVbmxpbmtlZEV2
YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgorI2luY2x1ZGUgIlVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgPSB2b2lkPgorc3RydWN0IFNvdXJjZVR5cGVJbXBsIHsKKyAgICB1c2lu
ZyB0eXBlID0gVDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgU291cmNlVHlw
ZUltcGw8VCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19mdW5kYW1lbnRhbDxUPjo6dmFsdWUg
JiYgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjpTb3VyY2VUeXBlXywgdm9pZD46OnZhbHVlPj4g
eworICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBUOjpTb3VyY2VUeXBlXzsKKworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3VzaW5nIFNvdXJjZVR5cGUgPSB0eXBlbmFtZSBTb3VyY2VUeXBl
SW1wbDxUPjo6dHlwZTsKKworY2xhc3MgRW5jb2RlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRW5jb2Rlcik7CisgICAgV1RGX0ZPUkJJRF9IRUFQX0FMTE9DQVRJT047CisKK3B1YmxpYzoK
KyAgICBjbGFzcyBBbGxvY2F0aW9uIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEVuY29kZXI7CisK
KyAgICBwdWJsaWM6CisgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyOyB9CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQWxsb2NhdGlvbih1aW50OF90KiBidWZm
ZXIsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAg
ICAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
b2Zmc2V0ID09IDEzNzgxMikKKyAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoImludDMi
KTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgICAgICBwdHJk
aWZmX3QgbV9vZmZzZXQ7CisgICAgfTsKKworICAgIEVuY29kZXIoVk0mIHZtKQorICAgICAgICA6
IG1fdm0odm0pCisgICAgICAgICwgbV9iYXNlT2Zmc2V0KDApCisgICAgICAgICwgbV9jdXJyZW50
UGFnZShudWxscHRyKQorICAgIHsKKyAgICAgICAgYWxsb2NhdGVOZXdQYWdlKCk7CisgICAgfQor
CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorCisgICAgQWxsb2NhdGlvbiBtYWxsb2Mo
dW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplKTsKKyAgICAgICAgcHRy
ZGlmZl90IG9mZnNldDsKKyAgICAgICAgaWYgKG1fY3VycmVudFBhZ2UtPm1hbGxvYyhzaXplLCBv
ZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIEFsbG9jYXRpb24geyBtX2N1cnJlbnRQYWdlLT5i
dWZmZXIoKSArIG9mZnNldCwgbV9iYXNlT2Zmc2V0ICsgb2Zmc2V0IH07CisgICAgICAgIGFsbG9j
YXRlTmV3UGFnZShzaXplKTsKKyAgICAgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIG1hbGxvYygpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obWFsbG9jKHNpemVvZihUKSkuYnVmZmVyKCkp
OworICAgIH0KKworICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldDsKKyAgICAgICAgcHRyZGlmZl90IGJhc2VP
ZmZzZXQgPSAwOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKSB7Cisg
ICAgICAgICAgICBpZiAocGFnZS5nZXRPZmZzZXQoYWRkcmVzcywgb2Zmc2V0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYmFzZU9mZnNldCArIG9mZnNldDsKKyAgICAgICAgICAgIGJhc2VPZmZz
ZXQgKz0gcGFnZS5zaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBjYWNoZVB0
cihjb25zdCB2b2lkKiBwdHIsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBtX3B0
clRvT2Zmc2V0TWFwLmFkZChwdHIsIG9mZnNldCk7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25h
bDxwdHJkaWZmX3Q+IG9mZnNldEZvclB0cihjb25zdCB2b2lkKiBwdHIpCisgICAgeworICAgICAg
ICBhdXRvIGl0ID0gbV9wdHJUb09mZnNldE1hcC5maW5kKHB0cik7CisgICAgICAgIGlmIChpdCA9
PSBtX3B0clRvT2Zmc2V0TWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVlIH07CisgICAgfQorCisgICAgc3RkOjpwYWly
PE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIHNp
emVfdCBzaXplID0gbV9iYXNlT2Zmc2V0ICsgbV9jdXJyZW50UGFnZS0+c2l6ZSgpOworICAgICAg
ICBNYWxsb2NQdHI8dWludDhfdD4gYnVmZmVyID0gTWFsbG9jUHRyPHVpbnQ4X3Q+OjptYWxsb2Mo
c2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CisgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgcGFnZSA6IG1fcGFnZXMpIHsKKyAgICAgICAgICAgIG1lbWNweShidWZmZXIuZ2V0KCkg
KyBvZmZzZXQsIHBhZ2UuYnVmZmVyKCksIHBhZ2Uuc2l6ZSgpKTsKKyAgICAgICAgICAgIG9mZnNl
dCArPSBwYWdlLnNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZz
ZXQgPT0gc2l6ZSk7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUoYnVmZmVyKSwgc2l6ZSB9Owor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBQYWdlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFBhZ2Uoc2l6ZV90IHNpemUpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KDApCisgICAgICAgICAg
ICAsIG1fY2FwYWNpdHkoc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIgPSBN
YWxsb2NQdHI8dWludDhfdD46Om1hbGxvYyhzaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgbWFsbG9jKHNpemVfdCBzaXplLCBwdHJkaWZmX3QmIHJlc3VsdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc2l6ZV90IGFsaWdubWVudCA9IHN0ZDo6bWluKGFsaWdub2Yoc3RkOjptYXhfYWxp
Z25fdCksIHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHNpemUp
KSk7CisgICAgICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKGFsaWdubWVudCwgbV9vZmZzZXQpOworICAgICAgICAgICAgc2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIHNpemUpOworICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHNpemVfdD4ob2Zmc2V0ICsgc2l6ZSkgPiBtX2NhcGFjaXR5KQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0OworICAgICAgICAg
ICAgbV9vZmZzZXQgPSBvZmZzZXQgKyBzaXplOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1
ZmZlci5nZXQoKTsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpemVfdD4obV9vZmZzZXQpOyB9CisKKyAgICAgICAgYm9vbCBnZXRPZmZzZXQoY29u
c3Qgdm9pZCogYWRkcmVzcywgcHRyZGlmZl90JiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oYWRkcmVzcyk7CisgICAgICAgICAgICBpZiAoYWRkciA+PSBtX2J1ZmZlci5nZXQoKSAmJiBh
ZGRyIDwgbV9idWZmZXIuZ2V0KCkgKyBtX29mZnNldCkgeworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGFkZHIgLSBtX2J1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWFsbG9jUHRyPHVpbnQ4X3Q+IG1fYnVmZmVyOworICAgICAg
ICBwdHJkaWZmX3QgbV9vZmZzZXQ7CisgICAgICAgIHNpemVfdCBtX2NhcGFjaXR5OworICAgIH07
CisKKyAgICB2b2lkIGFsbG9jYXRlTmV3UGFnZShzaXplX3Qgc2l6ZSA9IDApCisgICAgeworICAg
ICAgICBzdGF0aWMgc2l6ZV90IG1pblBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpOworICAgICAg
ICBpZiAobV9jdXJyZW50UGFnZSkKKyAgICAgICAgICAgIG1fYmFzZU9mZnNldCArPSBtX2N1cnJl
bnRQYWdlLT5zaXplKCk7CisgICAgICAgIGlmIChzaXplIDwgbWluUGFnZVNpemUpCisgICAgICAg
ICAgICBzaXplID0gbWluUGFnZVNpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpemUg
PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YobWluUGFnZVNpemUsIHNpemUpOworICAgICAgICBt
X3BhZ2VzLmFwcGVuZChQYWdlIHsgc2l6ZSB9KTsKKyAgICAgICAgbV9jdXJyZW50UGFnZSA9ICZt
X3BhZ2VzLmxhc3QoKTsKKyAgICB9CisKKyAgICBWTSYgbV92bTsKKyAgICBwdHJkaWZmX3QgbV9i
YXNlT2Zmc2V0OworICAgIFBhZ2UqIG1fY3VycmVudFBhZ2U7CisgICAgVmVjdG9yPFBhZ2U+IG1f
cGFnZXM7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgcHRyZGlmZl90PiBtX3B0clRvT2Zmc2V0
TWFwOworfTsKKworY2xhc3MgRGVjb2RlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVj
b2Rlcik7CisgICAgV1RGX0ZPUkJJRF9IRUFQX0FMTE9DQVRJT047CisKK3B1YmxpYzoKKyAgICBE
ZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQorICAg
ICAgICA6IG1fdm0odm0pCisgICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAs
IG1fc2l6ZShzaXplKQorI2VuZGlmCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7
CisgICAgfQorCisgICAgfkRlY29kZXIoKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWly
IDogbV9maW5hbGl6ZXJzKQorICAgICAgICAgICAgcGFpci52YWx1ZSgpOworICAgIH0KKworICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KKworICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25z
dCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHB0cik7CisgICAgICAgIEFTU0VSVChhZGRyID49IG1fYmFz
ZUFkZHJlc3MgJiYgYWRkciA8IG1fYmFzZUFkZHJlc3MgKyBtX3NpemUpOworICAgICAgICByZXR1
cm4gYWRkciAtIG1fYmFzZUFkZHJlc3M7CisgICAgfQorCisgICAgdm9pZCBjYWNoZU9mZnNldChw
dHJkaWZmX3Qgb2Zmc2V0LCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBtX29mZnNldFRvUHRy
TWFwLmFkZChvZmZzZXQsIHB0cik7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDx2b2lkKj4g
cHRyRm9yT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBhdXRvIGl0ID0g
bV9vZmZzZXRUb1B0ck1hcC5maW5kKG9mZnNldCk7CisgICAgICAgIGlmIChpdCA9PSBtX29mZnNl
dFRvUHRyTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIHsgaXQtPnZhbHVlIH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGFkZEZpbmFsaXplcihwdHJkaWZmX3Qgb2Zmc2V0LCBjb25zdCBG
dW5jdG9yJiBmbikKKyAgICB7CisgICAgICAgIG1fZmluYWxpemVycy5hZGQob2Zmc2V0LCBmbik7
CisgICAgfQorCitwcml2YXRlOgorICAgIFZNJiBtX3ZtOworICAgIGNvbnN0IHVpbnQ4X3QqIG1f
YmFzZUFkZHJlc3M7CisjaWZuZGVmIE5ERUJVRworICAgIHNpemVfdCBtX3NpemU7CisjZW5kaWYK
KyAgICBIYXNoTWFwPHB0cmRpZmZfdCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7CisgICAgSGFz
aE1hcDxwdHJkaWZmX3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJzOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYgZHN0LCBj
b25zdCBTb3VyY2VUeXBlPFQ+JiBzcmMpCit7CisgICAgZHN0ID0gc3JjOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBT
b3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUJiBkc3QsIGNv
bnN0IFNvdXJjZVR5cGU8VD4mIHNyYykKK3sKKyAgICBkc3QuZW5jb2RlKGVuY29kZXIsIHNyYyk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CitzdGF0aWMgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNv
ZGUoRGVjb2RlciYsIGNvbnN0IFQmIHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uKQor
eworICAgIGRzdCA9IHNyYzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
QXJncz4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlw
ZTxUPj46OnZhbHVlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjLCBTb3Vy
Y2VUeXBlPFQ+JiBkc3QsIEFyZ3MuLi4gYXJncykKK3sKKyAgICBzcmMuZGVjb2RlKGRlY29kZXIs
IGRzdCwgYXJncy4uLik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlLCBUPiBkZWNv
ZGUoRGVjb2RlciYsIFQgc3JjKQoreworICAgIHJldHVybiBzcmM7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJj
ZVR5cGU8VD4+Ojp2YWx1ZSwgU291cmNlVHlwZTxUPj4mJiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgY29uc3QgVCYgc3JjKQoreworICAgIHJldHVybiBzcmMuZGVjb2RlKGRlY29kZXIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2U+CitjbGFzcyBDYWNoZWRPYmplY3QgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZE9iamVjdDxTb3VyY2U+KTsKKyAgICBXVEZfRk9SQklE
X0hFQVBfQUxMT0NBVElPTjsKKworcHVibGljOgorICAgIHVzaW5nIFNvdXJjZVR5cGVfID0gU291
cmNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlPgorY2xhc3MgVmFyaWFibGVMZW5n
dGhPYmplY3QgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZT4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCB0eXBlbmFtZT4KKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFB0cjsKKworcHJvdGVj
dGVkOgorICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV9vZmZzZXQgIT0gc19pbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHRoaXMpICsgbV9vZmZzZXQ7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigpKTsK
KyAgICB9CisKKyAgICB1aW50OF90KiBhbGxvY2F0ZShFbmNvZGVyJiBlbmNvZGVyLCBzaXplX3Qg
c2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRPZmZzZXQgPSBlbmNvZGVyLm9mZnNldE9m
KCZtX29mZnNldCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZW5jb2Rlci5tYWxsb2Moc2l6ZSk7
CisgICAgICAgIG1fb2Zmc2V0ID0gcmVzdWx0Lm9mZnNldCgpIC0gb2Zmc2V0T2Zmc2V0OworICAg
ICAgICByZXR1cm4gcmVzdWx0LmJ1ZmZlcigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgVCogYWxsb2NhdGUoRW5jb2RlciYgZW5jb2RlciwgdW5zaWduZWQgc2l6ZSA9
IDEpCisgICAgeworICAgICAgICB1aW50OF90KiByZXN1bHQgPSBhbGxvY2F0ZShlbmNvZGVyLCBz
aXplb2YoVCkgKiBzaXplKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJl
c3VsdCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90
IHNfaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8cHRyZGlmZl90Pjo6bWF4KCk7
CisKKyAgICBwdHJkaWZmX3QgbV9vZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKKworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KK2Ns
YXNzIENhY2hlZFB0ciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqPiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVk
UmVmUHRyOworCitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgU291cmNlKiBzcmMpCisgICAgeworICAgICAgICBtX2lzRW1wdHkgPSAhc3JjOworICAgICAg
ICBpZiAobV9pc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChXVEY6
Ok9wdGlvbmFsPHB0cmRpZmZfdD4gb2Zmc2V0ID0gZW5jb2Rlci5vZmZzZXRGb3JQdHIoc3JjKSkg
eworICAgICAgICAgICAgdGhpcy0+bV9vZmZzZXQgPSAqb2Zmc2V0IC0gZW5jb2Rlci5vZmZzZXRP
ZigmdGhpcy0+bV9vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgVCogY2FjaGVkT2JqZWN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rl
cik7CisgICAgICAgIGNhY2hlZE9iamVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOworICAgICAg
ICBlbmNvZGVyLmNhY2hlUHRyKHNyYywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFNvdXJjZSogZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX2lzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBw
dHJkaWZmX3QgYnVmZmVyT2Zmc2V0ID0gZGVjb2Rlci5vZmZzZXRPZih0aGlzLT5idWZmZXIoKSk7
CisgICAgICAgIGlmIChXVEY6Ok9wdGlvbmFsPHZvaWQqPiBwdHIgPSBkZWNvZGVyLnB0ckZvck9m
ZnNldChidWZmZXJPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
U291cmNlKj4oKnB0cik7CisKKyAgICAgICAgU291cmNlKiBwdHIgPSBnZXQoKS0+ZGVjb2RlKGRl
Y29kZXIsIGFyZ3MuLi4pOworICAgICAgICBkZWNvZGVyLmNhY2hlT2Zmc2V0KGJ1ZmZlck9mZnNl
dCwgcHRyKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBjb25zdCBUKiBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBU
KiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1faXNFbXB0eSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+
KCk7CisgICAgfQorCisgICAgYm9vbCBtX2lzRW1wdHk7CisKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFNvdXJjZSA9IFNvdXJjZVR5cGU8VD4+CitjbGFzcyBDYWNoZWRSZWZQ
dHIgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFJlZlB0cjxTb3VyY2U+PiB7CitwdWJsaWM6CisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCisgICAgewor
ICAgICAgICBtX3B0ci5lbmNvZGUoZW5jb2Rlciwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8U291cmNlPiBzcmMpCisgICAgewor
ICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8
U291cmNlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFNv
dXJjZSogZGVjb2RlZFB0ciA9IG1fcHRyLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVkUHRyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGRlY29kZXIu
YWRkRmluYWxpemVyKGRlY29kZXIub2Zmc2V0T2YobV9wdHIuYnVmZmVyKCkpLCBbPV0geyBkZXJl
ZklmTm90TnVsbChkZWNvZGVkUHRyKTsgfSk7CisgICAgICAgIHJlZklmTm90TnVsbChkZWNvZGVk
UHRyKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGRlY29kZWRQdHIpOworICAgIH0KKworICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlZlB0cjxTb3VyY2U+JiBzcmMpIGNvbnN0
CisgICAgeworICAgICAgICBzcmMgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCitwcml2YXRl
OgorICAgIENhY2hlZFB0cjxULCBTb3VyY2U+IG1fcHRyOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KK2NsYXNzIENhY2hlZFdyaXRl
QmFycmllciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNvdXJjZT4+IHsKK3B1
YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJp
ZXI8U291cmNlPiBzcmMpCisgICAgeworICAgICAgICBtX3B0ci5lbmNvZGUoZW5jb2Rlciwgc3Jj
LmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0
ZUJhcnJpZXI8U291cmNlPiYgc3JjLCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgU291cmNlKiBkZWNvZGVkUHRyID0gbV9wdHIuZGVjb2RlKGRlY29kZXIpOworICAg
ICAgICBpZiAoZGVjb2RlZFB0cikKKyAgICAgICAgICAgIHNyYy5zZXQoZGVjb2Rlci52bSgpLCBv
d25lciwgZGVjb2RlZFB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFB0cjxULCBT
b3VyY2U+IG1fcHRyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IElubGluZUNh
cGFjaXR5ID0gMCwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93Pgor
Y2xhc3MgQ2FjaGVkVmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFZlY3RvcjxT
b3VyY2VUeXBlPFQ+LCBJbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPj4geworcHVibGlj
OgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxTb3VyY2VU
eXBlPFQ+LCBJbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgdmVjdG9yKQorICAgIHsK
KyAgICAgICAgbV9zaXplID0gdmVjdG9yLnNpemUoKTsKKyAgICAgICAgVCogYnVmZmVyID0gdGhp
cy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2RlciwgbV9zaXplKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmVuY29k
ZShlbmNvZGVyLCBidWZmZXJbaV0sIHZlY3RvcltpXSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0
b3I8U291cmNlVHlwZTxUPiwgSW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIHZlY3Rv
ciwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdmVjdG9yLnJlc2l6ZVRvRml0
KG1fc2l6ZSk7CisgICAgICAgIGNvbnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZl
cjxUPigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisg
ICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ldLCBh
cmdzLi4uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zaXplOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRmlyc3QsIHR5cGVuYW1lIFNlY29uZD4KK2NsYXNzIENhY2hlZFBh
aXIgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291
cmNlVHlwZTxTZWNvbmQ+Pj4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNv
bmQ+PiYgcGFpcikKKyAgICB7CisgICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9maXJz
dCwgcGFpci5maXJzdCk7CisgICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9zZWNvbmQs
IHBhaXIuc2Vjb25kKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBzdGQ6OnBhaXI8U291cmNlVHlwZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vjb25kPj4mIHBhaXIp
IGNvbnN0CisgICAgeworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fZmlyc3QsIHBh
aXIuZmlyc3QpOworICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fc2Vjb25kLCBwYWly
LnNlY29uZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpcnN0IG1fZmlyc3Q7CisgICAgU2Vj
b25kIG1fc2Vjb25kOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgSGFzaEFyZyA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFNvdXJjZVR5cGU8S2V5
Pj46Okhhc2gsIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlwZTxL
ZXk+PiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxTb3VyY2VUeXBlPFZh
bHVlPj4+CitjbGFzcyBDYWNoZWRIYXNoTWFwIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0
PEhhc2hNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPiwgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgVj4KKyAgICB1c2luZyBNYXAgPSBIYXNoTWFwPEssIFYsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFs
dWU+PiYgbWFwKQorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMp
PiBlbnRyaWVzVmVjdG9yKG1hcC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1hcCkKKyAgICAgICAgICAgIGVudHJpZXNWZWN0
b3JbaSsrXSA9IHsgaXQua2V5LCBpdC52YWx1ZSB9OworICAgICAgICBtX2VudHJpZXMuZW5jb2Rl
KGVuY29kZXIsIGVudHJpZXNWZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFw
KSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBk
ZWNvZGVkRW50cmllczsKKyAgICAgICAgbV9lbnRyaWVzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVk
RW50cmllcyk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IGRlY29kZWRFbnRyaWVz
KQorICAgICAgICAgICAgbWFwLnNldChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIENhY2hlZFZlY3RvcjxDYWNoZWRQYWlyPEtleSwgVmFsdWU+PiBtX2Vu
dHJpZXM7Cit9OworCitjbGFzcyBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxVbmlxdWVkU3RyaW5nSW1wbD4geworcHVibGljOgorICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKKyAgICB7
CisgICAgICAgIG1faXNBdG9taWMgPSBzdHJpbmcuaXNBdG9taWMoKTsKKyAgICAgICAgbV9pc1N5
bWJvbCA9IHN0cmluZy5pc1N5bWJvbCgpOworICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29u
c3RfY2FzdDxTdHJpbmdJbXBsKj4oJnN0cmluZyk7CisgICAgICAgIGlmIChtX2lzU3ltYm9sKSB7
CisgICAgICAgICAgICBTeW1ib2xJbXBsKiBzeW1ib2wgPSBzdGF0aWNfY2FzdDxTeW1ib2xJbXBs
Kj4oaW1wbCk7CisgICAgICAgICAgICBpZiAoIXN5bWJvbC0+aXNOdWxsU3ltYm9sKCkpIHsKKyAg
ICAgICAgICAgICAgICBJZGVudGlmaWVyIHVpZCA9IElkZW50aWZpZXI6OmZyb21VaWQoJmVuY29k
ZXIudm0oKSwgc3ltYm9sKTsKKyAgICAgICAgICAgICAgICBpbXBsID0gZW5jb2Rlci52bSgpLnBy
b3BlcnR5TmFtZXMtPmxvb2tVcFB1YmxpY05hbWUodWlkKS5zdHJpbmcoKS5pbXBsKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtX2lzOEJpdCA9IGltcGwtPmlzOEJpdCgp
OworICAgICAgICBtX2xlbmd0aCA9IGltcGwtPmxlbmd0aCgpOworCisgICAgICAgIGlmICghbV9s
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1f
bGVuZ3RoOworICAgICAgICBjb25zdCB2b2lkKiBwYXlsb2FkOworICAgICAgICBpZiAobV9pczhC
aXQpCisgICAgICAgICAgICBwYXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBwYXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczE2KCk7CisgICAg
ICAgICAgICBzaXplICo9IDI7CisgICAgICAgIH0KKworICAgICAgICB1aW50OF90KiBidWZmZXIg
PSB0aGlzLT5hbGxvY2F0ZShlbmNvZGVyLCBzaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwg
cGF5bG9hZCwgc2l6ZSk7CisgICAgfQorCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBjcmVhdGUgPSBbJl0o
Y29uc3QgYXV0byogYnVmZmVyKSAtPiBVbmlxdWVkU3RyaW5nSW1wbCogeworICAgICAgICAgICAg
aWYgKCFtX2lzU3ltYm9sKQorICAgICAgICAgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmdJbXBs
OjphZGQoYnVmZmVyLCBtX2xlbmd0aCkubGVha1JlZigpOworCisgICAgICAgICAgICBpZiAoIW1f
bGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiAmU3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5
bWJvbCgpLmxlYWtSZWYoKTsKKworICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmRlY29kZXIudm0oKSwgYnVmZmVyLCBtX2xlbmd0aCk7CisgICAg
ICAgICAgICBTdHJpbmcgc3RyID0gZGVjb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFBy
aXZhdGVOYW1lKGlkZW50KS0+c3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBs
ID0gc3RyLnJlbGVhc2VJbXBsKCkuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoaW1wbC0+aXNT
eW1ib2woKSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VW5pcXVlZFN0cmluZ0lt
cGwqPihpbXBsKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAobV9pczhCaXQpCisgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlKHRoaXMtPmJ1ZmZlcjxMQ2hhcj4oKSk7CisgICAgICAgIHJldHVy
biBjcmVhdGUodGhpcy0+YnVmZmVyPFVDaGFyPigpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBtX2lzOEJpdCA6IDE7CisgICAgYm9vbCBtX2lzU3ltYm9sIDogMTsKKyAgICBib29sIG1f
aXNBdG9taWMgOiAxOworICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworY2xhc3MgQ2FjaGVk
U3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTdHJpbmdJbXBsPiB7Citw
dWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nSW1w
bCYgaW1wbCkKKyAgICB7CisgICAgICAgIG1fdW5pcXVlZFN0cmluZ0ltcGwuZW5jb2RlKGVuY29k
ZXIsIGltcGwpOworICAgIH0KKworICAgIFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdW5pcXVlZFN0cmluZ0ltcGwuZGVj
b2RlKGRlY29kZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRVbmlxdWVkU3RyaW5n
SW1wbCBtX3VuaXF1ZWRTdHJpbmdJbXBsOworfTsKKworY2xhc3MgQ2FjaGVkU3RyaW5nIDogcHVi
bGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFN0cmluZz4geworcHVibGljOgorICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAg
ICAgbV9pbXBsLmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+
KHN0cmluZy5pbXBsKCkpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXRpY19jYXN0PFJl
ZlB0cjxTdHJpbmdJbXBsPj4obV9pbXBsLmRlY29kZShkZWNvZGVyKSkpOworICAgIH0KKworICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmluZyYgZHN0KSBjb25zdAorICAgIHsK
KyAgICAgICAgZHN0ID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBD
YWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+IG1faW1wbDsKK307CisKK2NsYXNz
IENhY2hlZElkZW50aWZpZXIgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmll
cj4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgeworICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5j
b2RlciwgaWRlbnRpZmllci5zdHJpbmcoKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHIgPSBt
X3N0cmluZy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gSWRlbnRpZmllcigpOworCisgICAgICAgIHJldHVybiBJZGVudGlmaWVy
Ojpmcm9tVWlkKCZkZWNvZGVyLnZtKCksIChVbmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7
CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYg
aWRlbnQpIGNvbnN0CisgICAgeworICAgICAgICBpZGVudCA9IGRlY29kZShkZWNvZGVyKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkU3RyaW5nIG1fc3RyaW5nOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIENhY2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVu
Z3RoT2JqZWN0PFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4+IHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5
cGU8VD4+JiBzb3VyY2UpCisgICAgeworICAgICAgICBtX2lzRW1wdHkgPSAhc291cmNlOworCisg
ICAgICAgIGlmIChtX2lzRW1wdHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhp
cy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc291cmNl
KTsKKyAgICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+IGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1faXNFbXB0eSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgcmV0dXJuIHsgdGhpcy0+dGVt
cGxhdGUgYnVmZmVyPFQ+KCktPmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KKworICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4mIGRz
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGRzdCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8
U291cmNlVHlwZTxUPj4mIHNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmICghc291cmNlKQorICAg
ICAgICAgICAgZW5jb2RlKGVuY29kZXIsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGVuY29kZShlbmNvZGVyLCB7ICpzb3VyY2UgfSk7CisgICAgfQorCisgICAgU291
cmNlVHlwZTxUPiogZGVjb2RlQXNQdHIoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2lzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCktPmRlY29kZShkZWNvZGVyKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzRW1wdHk7Cit9OworCitjbGFzcyBDYWNo
ZWRTaW1wbGVKdW1wVGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkKKyAgICB7CisgICAgICAgIG1f
bWluID0ganVtcFRhYmxlLm1pbjsKKyAgICAgICAgbV9icmFuY2hPZmZzZXRzLmVuY29kZShlbmNv
ZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29u
c3QKKyAgICB7CisgICAgICAgIGp1bXBUYWJsZS5taW4gPSBtX21pbjsKKyAgICAgICAgbV9icmFu
Y2hPZmZzZXRzLmRlY29kZShkZWNvZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAg
fQorCitwcml2YXRlOgorICAgIGludDMyX3QgbV9taW47CisgICAgQ2FjaGVkVmVjdG9yPGludDMy
X3Q+IG1fYnJhbmNoT2Zmc2V0czsKK307CisKK2NsYXNzIENhY2hlZFN0cmluZ0p1bXBUYWJsZSA6
IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IHsKK3B1YmxpYzoK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYganVtcFRhYmxlKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRUYWJsZS5lbmNvZGUo
ZW5jb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKSBj
b25zdAorICAgIHsKKyAgICAgICAgbV9vZmZzZXRUYWJsZS5kZWNvZGUoZGVjb2RlciwganVtcFRh
YmxlLm9mZnNldFRhYmxlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkSGFzaE1hcDxD
YWNoZWRSZWZQdHI8Q2FjaGVkU3RyaW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjog
T2Zmc2V0TG9jYXRpb24+IG1fb2Zmc2V0VGFibGU7Cit9OworCitjbGFzcyBDYWNoZWRDb2RlQmxv
Y2tSYXJlRGF0YSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVE
YXRhPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhJiByYXJlRGF0YSkKKyAgICB7CisgICAgICAgIG1f
ZXhjZXB0aW9uSGFuZGxlcnMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fZXhjZXB0aW9uSGFu
ZGxlcnMpOworICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVE
YXRhLm1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAg
ICAgICAgbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5lbmNvZGUoZW5jb2RlciwgcmFyZURh
dGEubV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIG1fdHlwZVByb2ZpbGVy
SW5mb01hcC5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsK
KyAgICAgICAgbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5lbmNvZGUoZW5j
b2RlciwgcmFyZURhdGEubV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7Cisg
ICAgfQorCisgICAgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhKiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0
YSogcmFyZURhdGEgPSBuZXcgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhIHsgfTsKKyAgICAg
ICAgbV9leGNlcHRpb25IYW5kbGVycy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnMpOworICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIs
IHJhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMpOworICAgICAgICBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmRlY29kZShkZWNvZGVy
LCByYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIG1fdHlw
ZVByb2ZpbGVySW5mb01hcC5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVy
SW5mb01hcCk7CisgICAgICAgIG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMu
ZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVP
ZmZzZXRzKTsKKyAgICAgICAgcmV0dXJuIHJhcmVEYXRhOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBDYWNoZWRWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsK
KyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzOworICAgIENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQ
b3NpdGlvbj4gbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9uczsKKyAgICBDYWNoZWRIYXNoTWFw
PHVuc2lnbmVkLCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJl
c3Npb25SYW5nZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOworICAgIENhY2hlZFZlY3RvcjxJbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZz
ZXRzOworfTsKKworY2xhc3MgQ2FjaGVkQml0VmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3Ro
T2JqZWN0PEJpdFZlY3Rvcj4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9zaXpl
ID0gYml0VmVjdG9yLnNpemUoKTsKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxs
b2NhdGUoZW5jb2RlciwgbV9zaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgYml0VmVjdG9y
LmJpdHMoKSwgbV9zaXplKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgQml0
VmVjdG9yJiBiaXRWZWN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBiaXRWZWN0b3IuZW5zdXJl
U2l6ZShtX3NpemUpOworICAgICAgICBtZW1jcHkoYml0VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVm
ZmVyKCksIG1fc2l6ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc2l6ZTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBE
ZWZhdWx0SGFzaDxUPjo6SGFzaD4KK2NsYXNzIENhY2hlZEhhc2hTZXQgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PEhhc2hTZXQ8U291cmNlVHlwZTxUPiwgSGFzaEFyZz4+IHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4s
IEhhc2hBcmc+JiBzZXQpCisgICAgeworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKG1fZW50
cmllcyk+IGVudHJpZXNWZWN0b3Ioc2V0LnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAw
OworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBzZXQpCisgICAgICAgICAgICBlbnRy
aWVzVmVjdG9yW2krK10gPSBpdGVtOworICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIs
IGVudHJpZXNWZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIEhhc2hTZXQ8U291cmNlVHlwZTxUPiwgSGFzaEFyZz4mIHNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUobV9lbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKKyAg
ICAgICAgbV9lbnRyaWVzLmRlY29kZShkZWNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKKyAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBpdGVtIDogZW50cmllc1ZlY3RvcikKKyAgICAgICAgICAgIHNldC5h
ZGQoaXRlbSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFZlY3RvcjxUPiBtX2VudHJp
ZXM7Cit9OworCitjbGFzcyBDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1Ymxp
YyBWYXJpYWJsZUxlbmd0aE9iamVjdDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4geworcHVi
bGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvbnN0YW50SWRl
bnRpZmllclNldEVudHJ5JiBlbnRyeSkKKyAgICB7CisgICAgICAgIG1fY29uc3RhbnQgPSBlbnRy
eS5zZWNvbmQ7CisgICAgICAgIG1fc2V0LmVuY29kZShlbmNvZGVyLCBlbnRyeS5maXJzdCk7Cisg
ICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ29uc3RhbnRJZGVudGlm
aWVyU2V0RW50cnkmIGVudHJ5KSBjb25zdAorICAgIHsKKyAgICAgICAgZW50cnkuc2Vjb25kID0g
bV9jb25zdGFudDsKKyAgICAgICAgbV9zZXQuZGVjb2RlKGRlY29kZXIsIGVudHJ5LmZpcnN0KTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9jb25zdGFudDsKKyAgICBDYWNoZWRI
YXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJS
ZXBIYXNoPiBtX3NldDsKK307CisKK2NsYXNzIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0PFZhcmlhYmxlRW52aXJvbm1lbnQ+IHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBl
bnYpCisgICAgeworICAgICAgICBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gZW52Lm1faXNFdmVy
eXRoaW5nQ2FwdHVyZWQ7CisgICAgICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBlbnYubV9tYXAp
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52
aXJvbm1lbnQmIGVudikgY29uc3QKKyAgICB7CisgICAgICAgIGVudi5tX2lzRXZlcnl0aGluZ0Nh
cHR1cmVkID0gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKKyAgICAgICAgbV9tYXAuZGVjb2RlKGRl
Y29kZXIsIGVudi5tX21hcCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9pc0V2ZXJ5
dGhpbmdDYXB0dXJlZDsKKyAgICBDYWNoZWRIYXNoTWFwPENhY2hlZFJlZlB0cjxDYWNoZWRVbmlx
dWVkU3RyaW5nSW1wbD4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeSwgSWRlbnRpZmllclJlcEhh
c2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFZhcmlhYmxlRW52aXJv
bm1lbnRFbnRyeUhhc2hUcmFpdHM+IG1fbWFwOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KK2NsYXNzIENhY2hlZEFycmF5IDogcHVi
bGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZSo+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2UqIGFycmF5LCB1bnNpZ25lZCBzaXpl
KQorICAgIHsKKyAgICAgICAgVCogZHN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5j
b2Rlciwgc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
CisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGRzdFtpXSwgYXJyYXlbaV0pOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgU291cmNlKiBhcnJheSwgdW5zaWduZWQgc2l6ZSwgQXJncy4uLiBh
cmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxh
dGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCisgICAgICAgICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgYXJyYXlb
aV0sIGFyZ3MuLi4pOworICAgIH0KK307CisKK2NsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIDogcHVibGljIENhY2hlZE9iamVjdDxTY29wZWRBcmd1bWVudHNUYWJsZT4geworcHVibGlj
OgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNjb3BlZEFyZ3VtZW50
c1RhYmxlJiBzY29wZWRBcmd1bWVudHNUYWJsZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0g
c2NvcGVkQXJndW1lbnRzVGFibGUubV9sZW5ndGg7CisgICAgICAgIG1fYXJndW1lbnRzLmVuY29k
ZShlbmNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSwgbV9sZW5n
dGgpOworICAgIH0KKworICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29w
ZWRBcmd1bWVudHNUYWJsZSA9IFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUoZGVjb2Rlci52
bSgpLCBtX2xlbmd0aCk7CisgICAgICAgIG1fYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29w
ZWRBcmd1bWVudHNUYWJsZS0+bV9hcmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIHNjb3BlZEFyZ3VtZW50c1RhYmxlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50
MzJfdCBtX2xlbmd0aDsKKyAgICBDYWNoZWRBcnJheTxTY29wZU9mZnNldD4gbV9hcmd1bWVudHM7
Cit9OworCitjbGFzcyBDYWNoZWRTeW1ib2xUYWJsZUVudHJ5IDogcHVibGljIENhY2hlZE9iamVj
dDxTeW1ib2xUYWJsZUVudHJ5PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYs
IGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIHN5bWJvbFRhYmxlRW50cnkpCisgICAgeworICAgICAg
ICBtX2JpdHMgPSBzeW1ib2xUYWJsZUVudHJ5Lm1fYml0cyB8IFN5bWJvbFRhYmxlRW50cnk6OlNs
aW1GbGFnOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBTeW1ib2xUYWJsZUVu
dHJ5JiBzeW1ib2xUYWJsZUVudHJ5KSBjb25zdAorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGVF
bnRyeS5tX2JpdHMgPSBtX2JpdHM7CisgICAgfQorCitwcml2YXRlOgorICAgIGludHB0cl90IG1f
Yml0czsKK307CisKK2NsYXNzIENhY2hlZFN5bWJvbFRhYmxlIDogcHVibGljIENhY2hlZE9iamVj
dDxTeW1ib2xUYWJsZT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghc3ltYm9sVGFibGUubV9yYXJlRGF0YSk7CisgICAgICAgIG1fbWFwLmVuY29kZShlbmNvZGVy
LCBzeW1ib2xUYWJsZS5tX21hcCk7CisgICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSBzeW1ib2xU
YWJsZS5tX21heFNjb3BlT2Zmc2V0OworICAgICAgICBtX3VzZXNOb25TdHJpY3RFdmFsID0gc3lt
Ym9sVGFibGUubV91c2VzTm9uU3RyaWN0RXZhbDsKKyAgICAgICAgbV9uZXN0ZWRMZXhpY2FsU2Nv
cGUgPSBzeW1ib2xUYWJsZS5tX25lc3RlZExleGljYWxTY29wZTsKKyAgICAgICAgbV9zY29wZVR5
cGUgPSBzeW1ib2xUYWJsZS5tX3Njb3BlVHlwZTsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5jb2Rl
KGVuY29kZXIsIHN5bWJvbFRhYmxlLm1fYXJndW1lbnRzLmdldCgpKTsKKyAgICB9CisKKyAgICBT
eW1ib2xUYWJsZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKGRlY29kZXIu
dm0oKSk7CisgICAgICAgIG1fbWFwLmRlY29kZShkZWNvZGVyLCBzeW1ib2xUYWJsZS0+bV9tYXAp
OworICAgICAgICBzeW1ib2xUYWJsZS0+bV9tYXhTY29wZU9mZnNldCA9IG1fbWF4U2NvcGVPZmZz
ZXQ7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX3VzZXNOb25TdHJpY3RFdmFsID0gbV91c2VzTm9u
U3RyaWN0RXZhbDsKKyAgICAgICAgc3ltYm9sVGFibGUtPm1fbmVzdGVkTGV4aWNhbFNjb3BlID0g
bV9uZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX3Njb3BlVHlwZSA9
IG1fc2NvcGVUeXBlOworICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1l
bnRzVGFibGUgPSBtX2FyZ3VtZW50cy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzY29w
ZWRBcmd1bWVudHNUYWJsZSkKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cy5z
ZXQoZGVjb2Rlci52bSgpLCBzeW1ib2xUYWJsZSwgc2NvcGVkQXJndW1lbnRzVGFibGUpOworICAg
ICAgICByZXR1cm4gc3ltYm9sVGFibGU7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZEhh
c2hNYXA8Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgQ2FjaGVkU3ltYm9s
VGFibGVFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRT
dHJpbmdJbXBsPj4sIFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzPiBtX21hcDsKKyAgICBTY29w
ZU9mZnNldCBtX21heFNjb3BlT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fdXNlc05vblN0cmljdEV2
YWwgOiAxOworICAgIHVuc2lnbmVkIG1fbmVzdGVkTGV4aWNhbFNjb3BlIDogMTsKKyAgICB1bnNp
Z25lZCBtX3Njb3BlVHlwZSA6IDM7CisgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gY2FjaGVk
IHRoaXMgZXZlbnR1YWxseT8KKyAgICAvLyBDYWNoZWRQdHI8U3ltYm9sVGFibGVSYXJlRGF0YT4g
cmFyZURhdGE7CisgICAgQ2FjaGVkUHRyPENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2Fy
Z3VtZW50czsKK307CisKK2NsYXNzIENhY2hlZEpTVmFsdWU7CitjbGFzcyBDYWNoZWRJbW11dGFi
bGVCdXR0ZXJmbHkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5PiB7
CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgSlNJbW11dGFibGVC
dXR0ZXJmbHkmIGltbXV0YWJsZUJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0g
aW1tdXRhYmxlQnV0dGVyZmx5Lmxlbmd0aCgpOworICAgICAgICBtX2luZGV4aW5nVHlwZSA9IGlt
bXV0YWJsZUJ1dHRlcmZseS5pbmRleGluZ1R5cGVBbmRNaXNjKCk7CisgICAgICAgIGlmIChoYXNE
b3VibGUobV9pbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmVuY29k
ZShlbmNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+Y29udGlndW91c0Rv
dWJsZSgpLmRhdGEoKSwgbV9sZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nh
Y2hlZFZhbHVlcy5lbmNvZGUoZW5jb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LnRvQnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1fbGVuZ3RoKTsKKyAgICB9CisKKyAgICBKU0ltbXV0
YWJsZUJ1dHRlcmZseSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJbW11dGFi
bGVCdXR0ZXJmbHk6OmNyZWF0ZShkZWNvZGVyLnZtKCksIG1faW5kZXhpbmdUeXBlLCBtX2xlbmd0
aCk7CisgICAgICAgIGlmIChoYXNEb3VibGUobV9pbmRleGluZ1R5cGUpKQorICAgICAgICAgICAg
bV9jYWNoZWREb3VibGVzLmRlY29kZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIG1fbGVuZ3RoLCBpbW11dGFibGVC
dXR0ZXJmbHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5kZWNv
ZGUoZGVjb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3Vz
KCkuZGF0YSgpLCBtX2xlbmd0aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJu
IGltbXV0YWJsZUJ1dHRlcmZseTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5kZXhpbmdUeXBl
IG1faW5kZXhpbmdUeXBlOworICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIHVuaW9uIHsKKyAg
ICAgICAgQ2FjaGVkQXJyYXk8ZG91YmxlPiBtX2NhY2hlZERvdWJsZXM7CisgICAgICAgIENhY2hl
ZEFycmF5PENhY2hlZEpTVmFsdWUsIFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jYWNoZWRWYWx1
ZXM7CisgICAgfTsKK307CisKK2NsYXNzIENhY2hlZFJlZ0V4cCA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8UmVnRXhwPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgUmVnRXhwJiByZWdFeHApCisgICAgeworICAgICAgICBtX3BhdHRlcm5TdHJpbmcuZW5j
b2RlKGVuY29kZXIsIHJlZ0V4cC5tX3BhdHRlcm5TdHJpbmcpOworICAgICAgICBtX2ZsYWdzID0g
cmVnRXhwLm1fZmxhZ3M7CisgICAgfQorCisgICAgUmVnRXhwKiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuIHsgbV9wYXR0ZXJuU3Ry
aW5nLmRlY29kZShkZWNvZGVyKSB9OworICAgICAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZGVj
b2Rlci52bSgpLCBwYXR0ZXJuLCBtX2ZsYWdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2Fj
aGVkU3RyaW5nIG1fcGF0dGVyblN0cmluZzsKKyAgICBSZWdFeHBGbGFncyBtX2ZsYWdzOworfTsK
KworY2xhc3MgQ2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yIDogcHVibGljIENhY2hlZE9i
amVjdDxUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3ImIHRlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvcikKKyAgICB7CisgICAgICAgIG1fcmF3U3RyaW5ncy5lbmNvZGUo
ZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLnJhd1N0cmluZ3MoKSk7CisgICAgICAg
IG1fY29va2VkU3RyaW5ncy5lbmNvZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
LmNvb2tlZFN0cmluZ3MoKSk7CisgICAgfQorCisgICAgUmVmPFRlbXBsYXRlT2JqZWN0RGVzY3Jp
cHRvcj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBUZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3I6OlN0cmluZ1ZlY3RvciBkZWNvZGVkUmF3U3RyaW5nczsKKyAg
ICAgICAgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpPcHRpb25hbFN0cmluZ1ZlY3RvciBkZWNv
ZGVkQ29va2VkU3RyaW5nczsKKyAgICAgICAgbV9yYXdTdHJpbmdzLmRlY29kZShkZWNvZGVyLCBk
ZWNvZGVkUmF3U3RyaW5ncyk7CisgICAgICAgIG1fY29va2VkU3RyaW5ncy5kZWNvZGUoZGVjb2Rl
ciwgZGVjb2RlZENvb2tlZFN0cmluZ3MpOworICAgICAgICByZXR1cm4gVGVtcGxhdGVPYmplY3RE
ZXNjcmlwdG9yOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkUmF3U3RyaW5ncyksIFdURk1vdmUoZGVj
b2RlZENvb2tlZFN0cmluZ3MpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkVmVjdG9y
PENhY2hlZFN0cmluZywgND4gbV9yYXdTdHJpbmdzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRP
cHRpb25hbDxDYWNoZWRTdHJpbmc+LCA0PiBtX2Nvb2tlZFN0cmluZ3M7Cit9OworCitjbGFzcyBD
YWNoZWRCaWdJbnQgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQ+IHsKK3B1
YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0JpZ0ludCYgYmlnSW50
KQorICAgIHsKKyAgICAgICAgbV9sZW5ndGggPSBiaWdJbnQubGVuZ3RoKCk7CisgICAgICAgIG1f
c2lnbiA9IGJpZ0ludC5zaWduKCk7CisKKyAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKEpTQmlnSW50OjpE
aWdpdCkgKiBtX2xlbmd0aDsKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2Nh
dGUoZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGJpZ0ludC5kYXRhU3Rv
cmFnZSgpLCBzaXplKTsKKyAgICB9CisKKyAgICBKU0JpZ0ludCogZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6
OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7CisgICAg
ICAgIGJpZ0ludC0+c2V0U2lnbihtX3NpZ24pOworICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRh
U3RvcmFnZSgpLCB0aGlzLT5idWZmZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xl
bmd0aCk7CisgICAgICAgIHJldHVybiBiaWdJbnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOworICAgIGJvb2wgbV9zaWduOworfTsKKworY2xhc3MgQ2FjaGVkSlNW
YWx1ZSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gdmFsdWUpCisgICAgeworICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1
ZS5nZXQoKTsKKworICAgICAgICBpZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIG1fdHlwZSA9IEVuY29kZWRUeXBlOjpKU1ZhbHVlOworICAgICAgICAgICAgKnRo
aXMtPmFsbG9jYXRlPEVuY29kZWRKU1ZhbHVlPihlbmNvZGVyKSA9IEpTVmFsdWU6OmVuY29kZSh2
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHYuYXNDZWxsKCk7CisgICAgICAgIFZNJiB2bSA9IGVuY29kZXIudm0oKTsKKworICAgICAg
ICBpZiAoYXV0byogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4odm0s
IGNlbGwpKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6U3ltYm9sVGFibGU7
CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRTeW1ib2xUYWJsZT4oZW5jb2Rlcikt
PmVuY29kZShlbmNvZGVyLCAqc3ltYm9sVGFibGUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIHN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJp
bmcqPih2bSwgY2VsbCkpIHsKKyAgICAgICAgICAgIG1fdHlwZSA9IEVuY29kZWRUeXBlOjpTdHJp
bmc7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZSgp
LmltcGwoKTsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFVuaXF1ZWRTdHJpbmdJ
bXBsPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICppbXBsKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBpbW11dGFibGVCdXR0ZXJmbHkgPSBq
c0R5bmFtaWNDYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4odm0sIGNlbGwpKSB7CisgICAgICAg
ICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OworICAgICAgICAg
ICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PihlbmNvZGVyKS0+ZW5j
b2RlKGVuY29kZXIsICppbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIHJlZ2V4cCA9IGpzRHluYW1pY0Nhc3Q8UmVn
RXhwKj4odm0sIGNlbGwpKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6UmVn
RXhwOworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkUmVnRXhwPihlbmNvZGVyKS0+
ZW5jb2RlKGVuY29kZXIsICpyZWdleHApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGF1dG8qIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IqPih2bSwgY2VsbCkpIHsKKyAgICAgICAg
ICAgIG1fdHlwZSA9IEVuY29kZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7CisgICAg
ICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KGVu
Y29kZXIpLT5lbmNvZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLT5kZXNjcmlw
dG9yKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1
dG8qIGJpZ0ludCA9IGpzRHluYW1pY0Nhc3Q8SlNCaWdJbnQqPih2bSwgY2VsbCkpIHsKKyAgICAg
ICAgICAgIG1fdHlwZSA9IEVuY29kZWRUeXBlOjpCaWdJbnQ7CisgICAgICAgICAgICB0aGlzLT5h
bGxvY2F0ZTxDYWNoZWRCaWdJbnQ+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmJpZ0ludCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNv
bnN0CisgICAgeworICAgICAgICBKU1ZhbHVlIHY7CisgICAgICAgIHN3aXRjaCAobV90eXBlKSB7
CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkpTVmFsdWU6CisgICAgICAgICAgICB2ID0gSlNW
YWx1ZTo6ZGVjb2RlKCp0aGlzLT5idWZmZXI8RW5jb2RlZEpTVmFsdWU+KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN5bWJvbFRhYmxlOgorICAgICAg
ICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRTeW1ib2xUYWJsZT4oKS0+ZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN0cmlu
ZzogeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgPSB0aGlzLT5idWZmZXI8
Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAg
IHYgPSBKU1N0cmluZzo6Y3JlYXRlKGRlY29kZXIudm0oKSwgYWRvcHRSZWYoKmltcGwpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6Oklt
bXV0YWJsZUJ1dHRlcmZseToKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkSW1t
dXRhYmxlQnV0dGVyZmx5PigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6UmVnRXhwOgorICAgICAgICAgICAgdiA9IHRoaXMt
PmJ1ZmZlcjxDYWNoZWRSZWdFeHA+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6
CisgICAgICAgICAgICB2ID0gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShkZWNv
ZGVyLnZtKCksIHRoaXMtPmJ1ZmZlcjxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KCkt
PmRlY29kZShkZWNvZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNv
ZGVkVHlwZTo6QmlnSW50OgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRCaWdJ
bnQ+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgICAgICB2YWx1ZS5zZXQoZGVjb2Rlci52bSgpLCBvd25lciwgdik7CisgICAgfQorCitw
cml2YXRlOgorICAgIGVudW0gY2xhc3MgRW5jb2RlZFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAg
SlNWYWx1ZSwKKyAgICAgICAgU3ltYm9sVGFibGUsCisgICAgICAgIFN0cmluZywKKyAgICAgICAg
SW1tdXRhYmxlQnV0dGVyZmx5LAorICAgICAgICBSZWdFeHAsCisgICAgICAgIFRlbXBsYXRlT2Jq
ZWN0RGVzY3JpcHRvciwKKyAgICAgICAgQmlnSW50LAorICAgIH07CisKKyAgICBFbmNvZGVkVHlw
ZSBtX3R5cGU7Cit9OworCitjbGFzcyBDYWNoZWRJbnN0cnVjdGlvblN0cmVhbSA6IHB1YmxpYyBD
YWNoZWRPYmplY3Q8SW5zdHJ1Y3Rpb25TdHJlYW0+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgc3RyZWFtKQorICAg
IHsKKyAgICAgICAgbV9pbnN0cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIHN0cmVhbS5tX2luc3Ry
dWN0aW9ucyk7CisgICAgfQorCisgICAgSW5zdHJ1Y3Rpb25TdHJlYW0qIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBpbnN0cnVjdGlvbnNWZWN0b3I7CisgICAgICAgIG1faW5zdHJ1Y3Rp
b25zLmRlY29kZShkZWNvZGVyLCBpbnN0cnVjdGlvbnNWZWN0b3IpOworICAgICAgICByZXR1cm4g
bmV3IEluc3RydWN0aW9uU3RyZWFtKFdURk1vdmUoaW5zdHJ1Y3Rpb25zVmVjdG9yKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIENhY2hlZFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV9pbnN0cnVjdGlvbnM7Cit9OworCitjbGFzcyBDYWNoZWRNZXRhZGF0YVRhYmxl
IDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZE1ldGFkYXRhVGFibGU+IHsKK3B1YmxpYzoK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgVW5saW5rZWRNZXRhZGF0YVRhYmxlJiBt
ZXRhZGF0YVRhYmxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhVGFibGUubV9pc0Zp
bmFsaXplZCk7CisgICAgICAgIG1faGFzTWV0YWRhdGEgPSBtZXRhZGF0YVRhYmxlLm1faGFzTWV0
YWRhdGE7CisgICAgICAgIGlmICghbV9oYXNNZXRhZGF0YSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNl
dFRhYmxlRW50cmllczsgaS0tOykKKyAgICAgICAgICAgIG1fbWV0YWRhdGFbaV0gPSBtZXRhZGF0
YVRhYmxlLmJ1ZmZlcigpW2ldOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBV
bmxpbmtlZE1ldGFkYXRhVGFibGUmIG1ldGFkYXRhVGFibGUpIGNvbnN0CisgICAgeworICAgICAg
ICBtZXRhZGF0YVRhYmxlLm1faXNGaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBtZXRhZGF0YVRh
YmxlLm1faXNMaW5rZWQgPSBmYWxzZTsKKyAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2hhc01ldGFk
YXRhID0gbV9oYXNNZXRhZGF0YTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRN
ZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllczsgaS0tOykKKyAgICAgICAgICAgIG1l
dGFkYXRhVGFibGUuYnVmZmVyKClbaV0gPSBtX21ldGFkYXRhW2ldOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBib29sIG1faGFzTWV0YWRhdGE7CisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgVW5s
aW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllcz4gbV9tZXRhZGF0YTsKK307
CisKK2NsYXNzIENhY2hlZFNvdXJjZU9yaWdpbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNl
T3JpZ2luPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgU291cmNlT3JpZ2luJiBzb3VyY2VPcmlnaW4pCisgICAgeworICAgICAgICBtX3N0cmluZy5l
bmNvZGUoZW5jb2Rlciwgc291cmNlT3JpZ2luLnN0cmluZygpKTsKKyAgICB9CisKKyAgICBTb3Vy
Y2VPcmlnaW4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gU291cmNlT3JpZ2luIHsgbV9zdHJpbmcuZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQor
Citwcml2YXRlOgorICAgIENhY2hlZFN0cmluZyBtX3N0cmluZzsKK307CisKK2NsYXNzIENhY2hl
ZFRleHRQb3NpdGlvbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VGV4dFBvc2l0aW9uPiB7CitwdWJs
aWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24p
CisgICAgeworICAgICAgICBtX2xpbmUgPSB0ZXh0UG9zaXRpb24ubV9saW5lLnplcm9CYXNlZElu
dCgpOworICAgICAgICBtX2NvbHVtbiA9IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJ
bnQoKTsKKyAgICB9CisKKyAgICBUZXh0UG9zaXRpb24gZGVjb2RlKERlY29kZXImKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbiB7IE9yZGluYWxOdW1iZXI6OmZyb21a
ZXJvQmFzZWRJbnQobV9saW5lKSwgT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2Nv
bHVtbikgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbGluZTsKKyAgICBpbnQgbV9j
b2x1bW47Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBDYWNoZWRU
eXBlPgorY2xhc3MgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8U291cmNlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgbV92
YWxpZGF0ZWQgPSBzb3VyY2VQcm92aWRlci5pc1ZhbGlkKCk7CisgICAgICAgIG1fc291cmNlT3Jp
Z2luLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3VyY2VPcmlnaW4oKSk7CisgICAg
ICAgIG1fdXJsLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci51cmwoKSk7CisgICAgICAg
IG1fc291cmNlVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3Vy
Y2VVUkwoKSk7CisgICAgICAgIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5j
b2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlTWFwcGluZ1VSTCgpKTsKKyAgICAgICAgbV9zdGFy
dFBvc2l0aW9uLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zdGFydFBvc2l0aW9uKCkp
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZVByb3Zp
ZGVyJiBzb3VyY2VQcm92aWRlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbGlkYXRl
ZCkKKyAgICAgICAgICAgIHNvdXJjZVByb3ZpZGVyLnNldFZhbGlkKCk7CisgICAgICAgIHNvdXJj
ZVByb3ZpZGVyLnNldFNvdXJjZVVSTERpcmVjdGl2ZShtX3NvdXJjZVVSTERpcmVjdGl2ZS5kZWNv
ZGUoZGVjb2RlcikpOworICAgICAgICBzb3VyY2VQcm92aWRlci5zZXRTb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgbV92YWxpZGF0ZWQgOiAxOworICAgIENhY2hl
ZFNvdXJjZU9yaWdpbiBtX3NvdXJjZU9yaWdpbjsKKyAgICBDYWNoZWRTdHJpbmcgbV91cmw7Cisg
ICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOworICAgIENhY2hlZFN0cmluZyBt
X3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CisgICAgQ2FjaGVkVGV4dFBvc2l0aW9uIG1fc3Rh
cnRQb3NpdGlvbjsKK307CisKK2NsYXNzIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyIDogcHVi
bGljIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8U3RyaW5nU291cmNlUHJvdmlkZXIsIENhY2hl
ZFN0cmluZ1NvdXJjZVByb3ZpZGVyPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZFNvdXJjZVBy
b3ZpZGVyU2hhcGU8U3RyaW5nU291cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3Zp
ZGVyPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFN0cmluZ1NvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJh
c2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIG1fc291cmNlLmVu
Y29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3VyY2UoKS50b1N0cmluZygpKTsKKyAgICB9
CisKKyAgICBTdHJpbmdTb3VyY2VQcm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNv
dXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlKSBjb25zdAorICAgIHsKKyAgICAgICAg
U3RyaW5nIGRlY29kZWRTb3VyY2UgPSBtX3NvdXJjZS5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAg
IFNvdXJjZU9yaWdpbiBkZWNvZGVkU291cmNlT3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVjb2Rl
KGRlY29kZXIpOworICAgICAgICBTdHJpbmcgZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShkZWNv
ZGVyKTsKKyAgICAgICAgVGV4dFBvc2l0aW9uIGRlY29kZWRTdGFydFBvc2l0aW9uID0gbV9zdGFy
dFBvc2l0aW9uLmRlY29kZShkZWNvZGVyKTsKKworICAgICAgICBSZWY8U3RyaW5nU291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShkZWNv
ZGVkU291cmNlLCBkZWNvZGVkU291cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRVUkwpLCBk
ZWNvZGVkU3RhcnRQb3NpdGlvbiwgc291cmNlVHlwZSk7CisgICAgICAgIEJhc2U6OmRlY29kZShk
ZWNvZGVyLCBzb3VyY2VQcm92aWRlci5nZXQoKSk7CisgICAgICAgIHJldHVybiAmc291cmNlUHJv
dmlkZXIubGVha1JlZigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRTdHJpbmcgbV9z
b3VyY2U7Cit9OworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorY2xhc3MgQ2FjaGVkV2ViQXNz
ZW1ibHlTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdl
YkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+
IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxXZWJBc3NlbWJs
eVNvdXJjZVByb3ZpZGVyLCBDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPjsKKworcHVi
bGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkFzc2VtYmx5
U291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5j
b2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgbV9kYXRhLmVuY29kZShlbmNv
ZGVyLCBzb3VyY2VQcm92aWRlci5kYXRhKCkpOworICAgIH0KKworICAgIFdlYkFzc2VtYmx5U291
cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZWREYXRhOworICAgICAgICBTb3VyY2VPcmlnaW4gZGVj
b2RlZFNvdXJjZU9yaWdpbiA9IG1fc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKKyAgICAg
ICAgU3RyaW5nIGRlY29kZWRVUkwgPSBtX3VybC5kZWNvZGUoZGVjb2Rlcik7CisKKyAgICAgICAg
bV9kYXRhLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkRGF0YSk7CisKKyAgICAgICAgUmVmPFdlYkFz
c2VtYmx5U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKFdURk1vdmUoZGVjb2RlZERhdGEpLCBkZWNvZGVkU291cmNlT3JpZ2lu
LCBVUkwoVVJMKCksIGRlY29kZWRVUkwpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIs
IHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gJnNvdXJjZVByb3ZpZGVy
LmxlYWtSZWYoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3Q+
IG1fZGF0YTsKK307CisjZW5kaWYKKworY2xhc3MgQ2FjaGVkU291cmNlUHJvdmlkZXIgOiBwdWJs
aWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U291cmNlUHJvdmlkZXI+IHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VQcm92aWRlciYgc291cmNl
UHJvdmlkZXIpCisgICAgeworICAgICAgICBtX3NvdXJjZVR5cGUgPSBzb3VyY2VQcm92aWRlci5z
b3VyY2VUeXBlKCk7CisgICAgICAgIHN3aXRjaCAobV9zb3VyY2VUeXBlKSB7CisgICAgICAgIGNh
c2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNvdXJj
ZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8
Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmdTb3VyY2VQcm92aWRlciY+KHNvdXJjZVByb3ZpZGVy
KSk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAg
IGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAgICAg
IHRoaXMtPmFsbG9jYXRlPENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+KGVuY29kZXIp
LT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXZWJBc3NlbWJseVNvdXJj
ZVByb3ZpZGVyJj4oc291cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlm
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfQorCisgICAgU291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3NvdXJjZVR5cGUp
IHsKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW06CisgICAg
ICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGU6CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy0+YnVmZmVyPENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPigpLT5kZWNvZGUo
ZGVjb2RlciwgbV9zb3VyY2VUeXBlKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAg
IGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLT5idWZmZXI8Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4oKS0+
ZGVjb2RlKGRlY29kZXIpOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRl
OgorICAgIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBtX3NvdXJjZVR5cGU7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBTb3VyY2U+CitjbGFzcyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFw
ZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2Rl
KQorICAgIHsKKyAgICAgICAgbV9wcm92aWRlci5lbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZS5t
X3Byb3ZpZGVyLmdldCgpKTsKKyAgICAgICAgbV9zdGFydE9mZnNldCA9IHNvdXJjZUNvZGUuc3Rh
cnRPZmZzZXQoKTsKKyAgICAgICAgbV9lbmRPZmZzZXQgPSBzb3VyY2VDb2RlLmVuZE9mZnNldCgp
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU291
cmNlQ29kZSYgc291cmNlQ29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHNvdXJjZUNvZGUubV9w
cm92aWRlciA9IG1fcHJvdmlkZXIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBzb3VyY2VDb2Rl
Lm1fc3RhcnRPZmZzZXQgPSBtX3N0YXJ0T2Zmc2V0OworICAgICAgICBzb3VyY2VDb2RlLm1fZW5k
T2Zmc2V0ID0gbV9lbmRPZmZzZXQ7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFB0cjxD
YWNoZWRTb3VyY2VQcm92aWRlcj4gbV9wcm92aWRlcjsKKyAgICBpbnQgbV9zdGFydE9mZnNldDsK
KyAgICBpbnQgbV9lbmRPZmZzZXQ7Cit9OworCisKK2NsYXNzIENhY2hlZFVubGlua2VkU291cmNl
Q29kZSA6IHB1YmxpYyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxVbmxpbmtlZFNvdXJj
ZUNvZGU+IHsgfTsKKworY2xhc3MgQ2FjaGVkU291cmNlQ29kZSA6IHB1YmxpYyBDYWNoZWRVbmxp
bmtlZFNvdXJjZUNvZGVTaGFwZTxTb3VyY2VDb2RlPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hl
ZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFNvdXJjZUNvZGU+OworCitwdWJsaWM6CisgICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkK
KyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VDb2RlKTsKKyAgICAg
ICAgbV9maXJzdExpbmUgPSBzb3VyY2VDb2RlLmZpcnN0TGluZSgpLnplcm9CYXNlZEludCgpOwor
ICAgICAgICBtX3N0YXJ0Q29sdW1uID0gc291cmNlQ29kZS5zdGFydENvbHVtbigpLnplcm9CYXNl
ZEludCgpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJj
ZUNvZGUmIHNvdXJjZUNvZGUpIGNvbnN0CisgICAgeworICAgICAgICBCYXNlOjpkZWNvZGUoZGVj
b2Rlciwgc291cmNlQ29kZSk7CisgICAgICAgIHNvdXJjZUNvZGUubV9maXJzdExpbmUgPSBPcmRp
bmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fZmlyc3RMaW5lKTsKKyAgICAgICAgc291cmNl
Q29kZS5tX3N0YXJ0Q29sdW1uID0gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX3N0
YXJ0Q29sdW1uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fZmlyc3RMaW5lOworICAg
IGludCBtX3N0YXJ0Q29sdW1uOworfTsKKworY2xhc3MgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxl
IDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4geworcHVi
bGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSYpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBkZWNvZGUoRGVjb2Rl
ciYpIGNvbnN0OworCisgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9maXJzdExpbmVPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVDb3VudDsgfQorICAgIHVuc2lnbmVkIHVubGlua2VkRnVuY3Rpb25OYW1l
U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7IH0KKyAg
ICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlTdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRCb2R5U3RhcnRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1
bW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQm9keUVuZENvbHVtbjsgfQorICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQorICAgIHVu
c2lnbmVkIHNvdXJjZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9Cisg
ICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzU3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsgfQorICAgIHVu
c2lnbmVkIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9m
aWxpbmdFbmRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH0KKworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygp
IGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKyAgICBTb3VyY2VQYXJzZU1vZGUgc291cmNl
UGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VQYXJzZU1vZGU7IH0KKworICAgIHVu
c2lnbmVkIGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29u
dGV4dDsgfQorICAgIHVuc2lnbmVkIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQorICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQorICAgIHVuc2lnbmVk
IGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1
aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcjsgfQorICAgIHVuc2lnbmVkIGNvbnN0cnVjdEFi
aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdEFiaWxpdHk7IH0KKyAgICB1bnNpZ25l
ZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZDsgfQor
ICAgIHVuc2lnbmVkIGZ1bmN0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25Nb2Rl
OyB9CisgICAgdW5zaWduZWQgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0TW9k
ZTsgfQorICAgIHVuc2lnbmVkIHN1cGVyQmluZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3VwZXJC
aW5kaW5nOyB9CisgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9kZXJpdmVkQ29udGV4dFR5cGU7IH0KKworICAgIElkZW50aWZpZXIgbmFtZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdCB7IHJldHVybiBtX25hbWUuZGVjb2RlKGRlY29kZXIpOyB9CisgICAg
SWRlbnRpZmllciBlY21hTmFtZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJldHVybiBtX2Vj
bWFOYW1lLmRlY29kZShkZWNvZGVyKTsgfQorICAgIElkZW50aWZpZXIgaW5mZXJyZWROYW1lKERl
Y29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5mZXJyZWROYW1lLmRlY29kZShkZWNv
ZGVyKTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OworICAg
IHVuc2lnbmVkIG1fbGluZUNvdW50OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRGdW5jdGlvbk5h
bWVTdGFydDsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uOworICAgIHVu
c2lnbmVkIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uOworICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZz
ZXQ7CisgICAgdW5zaWduZWQgbV9zb3VyY2VMZW5ndGg7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0
ZXJzU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7
CisgICAgdW5zaWduZWQgbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OworICAgIHVuc2lnbmVkIG1f
cGFyYW1ldGVyQ291bnQ7CisgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgU291cmNl
UGFyc2VNb2RlIG1fc291cmNlUGFyc2VNb2RlOworICAgIHVuc2lnbmVkIG1faXNJblN0cmljdENv
bnRleHQgOiAxOworICAgIHVuc2lnbmVkIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOworICAg
IHVuc2lnbmVkIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAgIHVuc2lnbmVkIG1faXNCdWls
dGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1fY29uc3RydWN0
QWJpbGl0eTogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7CisgICAgdW5z
aWduZWQgbV9mdW5jdGlvbk1vZGUgOiAyOyAvLyBGdW5jdGlvbk1vZGUKKyAgICB1bnNpZ25lZCBt
X3NjcmlwdE1vZGU6IDE7IC8vIEpTUGFyc2VyU2NyaXB0TW9kZQorICAgIHVuc2lnbmVkIG1fc3Vw
ZXJCaW5kaW5nIDogMTsKKyAgICB1bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZTogMjsKKwor
ICAgIENhY2hlZFNvdXJjZUNvZGUgbV9jbGFzc1NvdXJjZTsKKworICAgIENhY2hlZElkZW50aWZp
ZXIgbV9uYW1lOworICAgIENhY2hlZElkZW50aWZpZXIgbV9lY21hTmFtZTsKKyAgICBDYWNoZWRJ
ZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOworCisgICAgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVu
dCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOworCisgICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENh
Y2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX3VubGlu
a2VkQ29kZUJsb2NrRm9yQ2FsbDsKKyAgICBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rp
b25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxv
Y2tGb3JDb25zdHJ1Y3Q7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
Y2xhc3MgQ2FjaGVkQ29kZUJsb2NrIDogcHVibGljIENhY2hlZE9iamVjdDxDb2RlQmxvY2tUeXBl
PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkQ29k
ZUJsb2NrJik7CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYsIFVubGlua2VkQ29kZUJsb2NrJikg
Y29uc3Q7CisKKyAgICBJbnN0cnVjdGlvblN0cmVhbSogaW5zdHJ1Y3Rpb25zKERlY29kZXImIGRl
Y29kZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyKTsgfQor
CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhp
c1JlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7
IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2Jq
ZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOyB9CisK
KyAgICBTdHJpbmcgc291cmNlVVJMRGlyZWN0aXZlKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKTsgfQorICAgIFN0cmlu
ZyBzb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2Rlcik7IH0KKworICAg
IHVuc2lnbmVkIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQorICAgIHVu
c2lnbmVkIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9Cisg
ICAgdW5zaWduZWQgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3Rv
cjsgfQorICAgIHVuc2lnbmVkIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQorICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQorICAgIHVuc2lnbmVkIHN1
cGVyQmluZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3VwZXJCaW5kaW5nOyB9CisgICAgdW5zaWdu
ZWQgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0TW9kZTsgfQorICAgIHVuc2ln
bmVkIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzQXJyb3dGdW5j
dGlvbkNvbnRleHQ7IH0KKyAgICB1bnNpZ25lZCBpc0NsYXNzQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNDbGFzc0NvbnRleHQ7IH0KKyAgICB1bnNpZ25lZCB3YXNDb21waWxlZFdpdGhEZWJ1
Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdP
cGNvZGVzOyB9CisgICAgdW5zaWduZWQgY29uc3RydWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdHJ1Y3RvcktpbmQ7IH0KKyAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2Rlcml2ZWRDb250ZXh0VHlwZTsgfQorICAgIHVuc2lnbmVkIGV2YWxD
b250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9CisgICAgdW5z
aWduZWQgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQorICAg
IHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CisKKyAg
ICBpbnQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1D
YWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQorICAgIGlu
dCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CisKKyAg
ICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9Cisg
ICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VNb2Rl
OyB9CisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9
CisKKyAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEqIHJhcmVEYXRhKERlY29kZXImIGRl
Y29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEuZGVjb2RlQXNQdHIoZGVjb2Rlcik7IH0K
KworcHJpdmF0ZToKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9nbG9i
YWxPYmplY3RSZWdpc3RlcjsKKworICAgIHVuc2lnbmVkIG1fdXNlc0V2YWwgOiAxOworICAgIHVu
c2lnbmVkIG1faXNTdHJpY3RNb2RlIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQ29uc3RydWN0b3Ig
OiAxOworICAgIHVuc2lnbmVkIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOworICAgIHVuc2ln
bmVkIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5n
IDogMTsKKyAgICB1bnNpZ25lZCBtX3NjcmlwdE1vZGU6IDE7CisgICAgdW5zaWduZWQgbV9pc0Fy
cm93RnVuY3Rpb25Db250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQ2xhc3NDb250ZXh0IDog
MTsKKyAgICB1bnNpZ25lZCBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOwor
ICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5kIDogMjsKKyAgICB1bnNpZ25lZCBtX2Rlcml2
ZWRDb250ZXh0VHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOwor
ICAgIHVuc2lnbmVkIG1faGFzVGFpbENhbGxzIDogMTsKKworICAgIHVuc2lnbmVkIG1fbGluZUNv
dW50OworICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOworCisgICAgaW50IG1fbnVtVmFyczsKKyAg
ICBpbnQgbV9udW1DYWxsZWVMb2NhbHM7CisgICAgaW50IG1fbnVtUGFyYW1ldGVyczsKKworICAg
IENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9k
ZTsKKyAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOworCisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwg
TGlua1RpbWVDb25zdGFudENvdW50PiBtX2xpbmtUaW1lQ29uc3RhbnRzOworICAgIENhY2hlZE1l
dGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKKworICAgIENhY2hlZE9wdGlvbmFsPENhY2hlZENvZGVC
bG9ja1JhcmVEYXRhPiBtX3JhcmVEYXRhOworCisgICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlVVJM
RGlyZWN0aXZlOworICAgIENhY2hlZFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7
CisKKyAgICBDYWNoZWRQdHI8Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25z
OworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJn
ZXRzOworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRKU1ZhbHVlPiBt
X2NvbnN0YW50UmVnaXN0ZXJzOworICAgIENhY2hlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOworICAgIENhY2hlZFZl
Y3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIENhY2hlZEhh
c2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PiBtX291dE9mTGluZUp1bXBUYXJn
ZXRzOworCisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50
aWZpZXI+IG1faWRlbnRpZmllcnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZEJpdFZlY3Rvcj4g
bV9iaXRWZWN0b3JzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkRlY2xzOworICAgIENhY2hlZFZlY3RvcjxD
YWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4
cHJzOworfTsKKworY2xhc3MgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRD
b2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENh
Y2hlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+OworCitwdWJsaWM6CisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29k
ZUJsb2NrKTsKKyAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVC
bG9jay5tX3ZhckRlY2xhcmF0aW9ucyk7CisgICAgICAgIG1fbGV4aWNhbERlY2xhcmF0aW9ucy5l
bmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7CisgICAgfQor
CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2Nr
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihk
ZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhp
cyk7CisgICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAg
ICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICBtX3ZhckRl
Y2xhcmF0aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX3ZhckRlY2xhcmF0aW9ucyk7
CisgICAgICAgIG1fbGV4aWNhbERlY2xhcmF0aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2Nr
LT5tX2xleGljYWxEZWNsYXJhdGlvbnMpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFy
YXRpb25zOworICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRp
b25zOworfTsKKworY2xhc3MgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENv
ZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNl
ID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz47CisKK3B1
YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2spOworICAgICAgICBtX21vZHVsZUVudmlyb25tZW50U3lt
Ym9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0ID0gY29kZUJsb2NrLm1fbW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7CisgICAgfQorCisgICAgVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJs
b2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVj
b2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOwor
ICAgICAgICBjb2RlQmxvY2stPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50
UmVnaXN0ZXJPZmZzZXQgPSBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJl
Z2lzdGVyT2Zmc2V0OworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBpbnQgbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rl
ck9mZnNldDsKK307CisKK2NsYXNzIENhY2hlZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVk
Q29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBDYWNo
ZWRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrPjsKKworcHVibGljOgorICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkRXZhbENvZGVCbG9jayYgY29k
ZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7
CisgICAgICAgIG1fdmFyaWFibGVzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV92YXJpYWJs
ZXMpOworICAgICAgICBtX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzLmVuY29kZShlbmNvZGVy
LCBjb2RlQmxvY2subV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7CisgICAgfQorCisgICAg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVh
cCkpIFVubGlua2VkRXZhbENvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAgIGNvZGVC
bG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2Rl
KGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICBtX3ZhcmlhYmxlcy5kZWNvZGUoZGVjb2Rl
ciwgY29kZUJsb2NrLT5tX3ZhcmlhYmxlcyk7CisgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0Nh
bmRpZGF0ZXMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV9mdW5jdGlvbkhvaXN0aW5nQ2Fu
ZGlkYXRlcyk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorCitwcml2YXRlOgor
ICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gbV92YXJpYWJsZXM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAsIFVu
c2FmZVZlY3Rvck92ZXJmbG93PiBtX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzOworfTsKKwor
Y2xhc3MgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJs
b2NrPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayYgY29k
ZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7
CisgICAgfQorCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2so
ZGVjb2RlciwgKnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29k
ZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9Cit9OworCitBTFdBWVNfSU5MSU5FIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYg
ZGVjb2RlciwgY29uc3QgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykK
KyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDsKKworZW51bSBDYWNoZWRD
b2RlQmxvY2tUYWcgeworICAgIENhY2hlZFByb2dyYW1Db2RlQmxvY2tUYWcsCisgICAgQ2FjaGVk
TW9kdWxlQ29kZUJsb2NrVGFnLAorICAgIENhY2hlZEV2YWxDb2RlQmxvY2tUYWcsCit9OworCit0
ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrPiB7CisgICAgdXNpbmcgdHlwZSA9IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWRDb2RlQmxvY2tUYWcgdGFnID0gQ2FjaGVkUHJvZ3Jh
bUNvZGVCbG9ja1RhZzsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tU
eXBlSW1wbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBl
ID0gQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29k
ZUJsb2NrVGFnIHRhZyA9IENhY2hlZE1vZHVsZUNvZGVCbG9ja1RhZzsKK307CisKK3RlbXBsYXRl
PD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+
IHsKKyAgICB1c2luZyB0eXBlID0gQ2FjaGVkRXZhbENvZGVCbG9jazsKKyAgICBzdGF0aWMgY29u
c3RleHByIENhY2hlZENvZGVCbG9ja1RhZyB0YWcgPSBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VzaW5nIENhY2hlZENvZGVCbG9ja1R5cGUgPSB0
eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxUPjo6dHlwZTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT4mIGNhY2hlZENvZGVCbG9jaykKKyAg
ICA6IEJhc2UoZGVjb2Rlci52bSgpLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2luc3RydWN0aW9ucyhj
YWNoZWRDb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKGRlY29kZXIpKQorICAgICwgbV9saXZlbmVzcyhu
dWxscHRyKQorICAgICwgbV90aGlzUmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnRoaXNSZWdpc3Rl
cigpKQorICAgICwgbV9zY29wZVJlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay5zY29wZVJlZ2lzdGVy
KCkpCisgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay5nbG9iYWxP
YmplY3RSZWdpc3RlcigpKQorCisgICAgLCBtX3NvdXJjZVVSTERpcmVjdGl2ZShjYWNoZWRDb2Rl
QmxvY2suc291cmNlVVJMRGlyZWN0aXZlKGRlY29kZXIpKQorICAgICwgbV9zb3VyY2VNYXBwaW5n
VVJMRGlyZWN0aXZlKGNhY2hlZENvZGVCbG9jay5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGRl
Y29kZXIpKQorCisgICAgLCBtX3VzZXNFdmFsKGNhY2hlZENvZGVCbG9jay51c2VzRXZhbCgpKQor
ICAgICwgbV9pc1N0cmljdE1vZGUoY2FjaGVkQ29kZUJsb2NrLmlzU3RyaWN0TW9kZSgpKQorICAg
ICwgbV9pc0NvbnN0cnVjdG9yKGNhY2hlZENvZGVCbG9jay5pc0NvbnN0cnVjdG9yKCkpCisgICAg
LCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGNhY2hlZENvZGVCbG9jay5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpKQorICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihjYWNoZWRDb2RlQmxvY2suaXNCdWls
dGluRnVuY3Rpb24oKSkKKyAgICAsIG1fc3VwZXJCaW5kaW5nKGNhY2hlZENvZGVCbG9jay5zdXBl
ckJpbmRpbmcoKSkKKyAgICAsIG1fc2NyaXB0TW9kZShjYWNoZWRDb2RlQmxvY2suc2NyaXB0TW9k
ZSgpKQorICAgICwgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0Fy
cm93RnVuY3Rpb25Db250ZXh0KCkpCisgICAgLCBtX2lzQ2xhc3NDb250ZXh0KGNhY2hlZENvZGVC
bG9jay5pc0NsYXNzQ29udGV4dCgpKQorICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdP
cGNvZGVzKGNhY2hlZENvZGVCbG9jay53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkp
CisgICAgLCBtX2NvbnN0cnVjdG9yS2luZChjYWNoZWRDb2RlQmxvY2suY29uc3RydWN0b3JLaW5k
KCkpCisgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZGVyaXZlZENv
bnRleHRUeXBlKCkpCisgICAgLCBtX2V2YWxDb250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZXZh
bENvbnRleHRUeXBlKCkpCisgICAgLCBtX2hhc1RhaWxDYWxscyhjYWNoZWRDb2RlQmxvY2suaGFz
VGFpbENhbGxzKCkpCisgICAgLCBtX2xpbmVDb3VudChjYWNoZWRDb2RlQmxvY2subGluZUNvdW50
KCkpCisgICAgLCBtX2VuZENvbHVtbihjYWNoZWRDb2RlQmxvY2suZW5kQ29sdW1uKCkpCisgICAg
LCBtX251bVZhcnMoY2FjaGVkQ29kZUJsb2NrLm51bVZhcnMoKSkKKyAgICAsIG1fbnVtQ2FsbGVl
TG9jYWxzKGNhY2hlZENvZGVCbG9jay5udW1DYWxsZWVMb2NhbHMoKSkKKyAgICAsIG1fbnVtUGFy
YW1ldGVycyhjYWNoZWRDb2RlQmxvY2subnVtUGFyYW1ldGVycygpKQorICAgICwgbV9mZWF0dXJl
cyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMoKSkKKyAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENv
ZGVCbG9jay5wYXJzZU1vZGUoKSkKKyAgICAsIG1fY29kZVR5cGUoY2FjaGVkQ29kZUJsb2NrLmNv
ZGVUeXBlKCkpCisgICAgLCBtX3JhcmVEYXRhKGNhY2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNv
ZGVyKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBVbmxpbmtlZENvZGVCbG9jayYgY29kZUJsb2NrKSBjb25zdAoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaS0tOykKKyAgICAgICAgY29k
ZUJsb2NrLm1fbGlua1RpbWVDb25zdGFudHNbaV0gPSBtX2xpbmtUaW1lQ29uc3RhbnRzW2ldOwor
CisgICAgbV9tZXRhZGF0YS5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEpOwor
ICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9j
ay5tX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTsKKyAgICBtX2NvbnN0YW50UmVnaXN0ZXJz
LmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudFJlZ2lzdGVycywgJmNvZGVCbG9j
ayk7CisgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uZGVjb2RlKGRlY29k
ZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAg
bV9leHByZXNzaW9uSW5mby5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lvbklu
Zm8pOworICAgIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9j
ay5tX291dE9mTGluZUp1bXBUYXJnZXRzKTsKKyAgICBtX2p1bXBUYXJnZXRzLmRlY29kZShkZWNv
ZGVyLCBjb2RlQmxvY2subV9qdW1wVGFyZ2V0cyk7CisgICAgbV9jb25zdGFudElkZW50aWZpZXJT
ZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudElkZW50aWZpZXJTZXRzKTsK
KyAgICBtX2lkZW50aWZpZXJzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9pZGVudGlmaWVy
cyk7CisgICAgbV9iaXRWZWN0b3JzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0
b3JzKTsKKyAgICBtX2Z1bmN0aW9uRGVjbHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2Z1
bmN0aW9uRGVjbHMsICZjb2RlQmxvY2spOworICAgIG1fZnVuY3Rpb25FeHBycy5kZWNvZGUoZGVj
b2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25FeHBycywgJmNvZGVCbG9jayk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jayYgY2FjaGVk
Q29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7Cit9CisKK0FM
V0FZU19JTkxJTkUgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkTW9kdWxlQ29k
ZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0o
KS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENv
ZGVCbG9jaykKK3sKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVu
bGlua2VkRXZhbENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRFdmFsQ29k
ZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0o
KS51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykK
K3sKK30KKworQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlJiBl
eGVjdXRhYmxlKQoreworICAgIG1fZmlyc3RMaW5lT2Zmc2V0ID0gZXhlY3V0YWJsZS5tX2ZpcnN0
TGluZU9mZnNldDsKKyAgICBtX2xpbmVDb3VudCA9IGV4ZWN1dGFibGUubV9saW5lQ291bnQ7Cisg
ICAgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0ID0gZXhlY3V0YWJsZS5tX3VubGlua2VkRnVu
Y3Rpb25OYW1lU3RhcnQ7CisgICAgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbiA9IGV4ZWN1dGFi
bGUubV91bmxpbmtlZEJvZHlTdGFydENvbHVtbjsKKyAgICBtX3VubGlua2VkQm9keUVuZENvbHVt
biA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEJvZHlFbmRDb2x1bW47CisgICAgbV9zdGFydE9mZnNl
dCA9IGV4ZWN1dGFibGUubV9zdGFydE9mZnNldDsKKyAgICBtX3NvdXJjZUxlbmd0aCA9IGV4ZWN1
dGFibGUubV9zb3VyY2VMZW5ndGg7CisgICAgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSBleGVj
dXRhYmxlLm1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OworICAgIG1fdHlwZVByb2ZpbGluZ1N0YXJ0
T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKKyAgICBtX3R5
cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGluZ0VuZE9mZnNl
dDsKKyAgICBtX3BhcmFtZXRlckNvdW50ID0gZXhlY3V0YWJsZS5tX3BhcmFtZXRlckNvdW50Owor
CisgICAgbV9mZWF0dXJlcyA9IGV4ZWN1dGFibGUubV9mZWF0dXJlczsKKyAgICBtX3NvdXJjZVBh
cnNlTW9kZSA9IGV4ZWN1dGFibGUubV9zb3VyY2VQYXJzZU1vZGU7CisKKyAgICBtX2lzSW5TdHJp
Y3RDb250ZXh0ID0gZXhlY3V0YWJsZS5tX2lzSW5TdHJpY3RDb250ZXh0OworICAgIG1faGFzQ2Fw
dHVyZWRWYXJpYWJsZXMgPSBleGVjdXRhYmxlLm1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CisgICAg
bV9pc0J1aWx0aW5GdW5jdGlvbiA9IGV4ZWN1dGFibGUubV9pc0J1aWx0aW5GdW5jdGlvbjsKKyAg
ICBtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID0gZXhlY3V0YWJsZS5tX2lzQnVp
bHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yOworICAgIG1fY29uc3RydWN0QWJpbGl0eSA9IGV4
ZWN1dGFibGUubV9jb25zdHJ1Y3RBYmlsaXR5OworICAgIG1fY29uc3RydWN0b3JLaW5kID0gZXhl
Y3V0YWJsZS5tX2NvbnN0cnVjdG9yS2luZDsKKyAgICBtX2Z1bmN0aW9uTW9kZSA9IGV4ZWN1dGFi
bGUubV9mdW5jdGlvbk1vZGU7CisgICAgbV9zY3JpcHRNb2RlID0gZXhlY3V0YWJsZS5tX3Njcmlw
dE1vZGU7CisgICAgbV9zdXBlckJpbmRpbmcgPSBleGVjdXRhYmxlLm1fc3VwZXJCaW5kaW5nOwor
ICAgIG1fZGVyaXZlZENvbnRleHRUeXBlID0gZXhlY3V0YWJsZS5tX2Rlcml2ZWRDb250ZXh0VHlw
ZTsKKworICAgIG1fY2xhc3NTb3VyY2UuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubV9jbGFz
c1NvdXJjZSk7CisKKyAgICBtX25hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubmFtZSgp
KTsKKyAgICBtX2VjbWFOYW1lLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmVjbWFOYW1lKCkp
OworICAgIG1faW5mZXJyZWROYW1lLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmluZmVycmVk
TmFtZSgpKTsKKworICAgIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29kZXIs
IGV4ZWN1dGFibGUucGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSk7CisKKyAgICBtX3VubGlua2Vk
Q29kZUJsb2NrRm9yQ2FsbC5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29k
ZUJsb2NrRm9yQ2FsbCk7CisgICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5lbmNv
ZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KTsK
K30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ2FjaGVkRnVu
Y3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKK3sKKyAgICBW
YXJpYWJsZUVudmlyb25tZW50IGVudjsKKyAgICBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzLmRl
Y29kZShkZWNvZGVyLCBlbnYpOworCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZT4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShk
ZWNvZGVyLCBlbnYsICp0aGlzKTsKKyAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNv
ZGVyLnZtKCkpOworCisgICAgbV9jbGFzc1NvdXJjZS5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJs
ZS0+bV9jbGFzc1NvdXJjZSk7CisgICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZGVjb2Rl
KGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLCBleGVjdXRh
YmxlKTsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmRlY29kZShkZWNvZGVy
LCBleGVjdXRhYmxlLT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LCBleGVjdXRhYmxl
KTsKKworICAgIHJldHVybiBleGVjdXRhYmxlOworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBk
ZWNvZGVyLCBWYXJpYWJsZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29u
c3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJiBjYWNoZWRFeGVjdXRhYmxlKQorICAgIDogQmFz
ZShkZWNvZGVyLnZtKCksIGRlY29kZXIudm0oKS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0
cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fZmlyc3RMaW5lT2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUu
Zmlyc3RMaW5lT2Zmc2V0KCkpCisgICAgLCBtX2xpbmVDb3VudChjYWNoZWRFeGVjdXRhYmxlLmxp
bmVDb3VudCgpKQorICAgICwgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KGNhY2hlZEV4ZWN1
dGFibGUudW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydCgpKQorICAgICwgbV91bmxpbmtlZEJvZHlT
dGFydENvbHVtbihjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQm9keVN0YXJ0Q29sdW1uKCkpCisg
ICAgLCBtX3VubGlua2VkQm9keUVuZENvbHVtbihjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQm9k
eUVuZENvbHVtbigpKQorICAgICwgbV9zdGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnN0YXJ0
T2Zmc2V0KCkpCisgICAgLCBtX3NvdXJjZUxlbmd0aChjYWNoZWRFeGVjdXRhYmxlLnNvdXJjZUxl
bmd0aCgpKQorICAgICwgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5w
YXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSkKKyAgICAsIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0
KGNhY2hlZEV4ZWN1dGFibGUudHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCkpCisgICAgLCBtX3R5
cGVQcm9maWxpbmdFbmRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkpCisgICAgLCBtX3BhcmFtZXRlckNvdW50KGNhY2hlZEV4ZWN1dGFibGUucGFyYW1ldGVy
Q291bnQoKSkKKyAgICAsIG1fZmVhdHVyZXMoY2FjaGVkRXhlY3V0YWJsZS5mZWF0dXJlcygpKQor
ICAgICwgbV9zb3VyY2VQYXJzZU1vZGUoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VQYXJzZU1vZGUo
KSkKKyAgICAsIG1faXNJblN0cmljdENvbnRleHQoY2FjaGVkRXhlY3V0YWJsZS5pc0luU3RyaWN0
Q29udGV4dCgpKQorICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhjYWNoZWRFeGVjdXRhYmxl
Lmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpCisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hl
ZEV4ZWN1dGFibGUuaXNCdWlsdGluRnVuY3Rpb24oKSkKKyAgICAsIG1faXNCdWlsdGluRGVmYXVs
dENsYXNzQ29uc3RydWN0b3IoY2FjaGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3RvcigpKQorICAgICwgbV9jb25zdHJ1Y3RBYmlsaXR5KGNhY2hlZEV4ZWN1dGFibGUu
Y29uc3RydWN0QWJpbGl0eSgpKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVkRXhlY3V0
YWJsZS5jb25zdHJ1Y3RvcktpbmQoKSkKKyAgICAsIG1fZnVuY3Rpb25Nb2RlKGNhY2hlZEV4ZWN1
dGFibGUuZnVuY3Rpb25Nb2RlKCkpCisgICAgLCBtX3NjcmlwdE1vZGUoY2FjaGVkRXhlY3V0YWJs
ZS5zY3JpcHRNb2RlKCkpCisgICAgLCBtX3N1cGVyQmluZGluZyhjYWNoZWRFeGVjdXRhYmxlLnN1
cGVyQmluZGluZygpKQorICAgICwgbV9kZXJpdmVkQ29udGV4dFR5cGUoY2FjaGVkRXhlY3V0YWJs
ZS5kZXJpdmVkQ29udGV4dFR5cGUoKSkKKworICAgICwgbV9uYW1lKGNhY2hlZEV4ZWN1dGFibGUu
bmFtZShkZWNvZGVyKSkKKyAgICAsIG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0YWJsZS5lY21hTmFt
ZShkZWNvZGVyKSkKKyAgICAsIG1faW5mZXJyZWROYW1lKGNhY2hlZEV4ZWN1dGFibGUuaW5mZXJy
ZWROYW1lKGRlY29kZXIpKQorCisgICAgLCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzKGRlY29k
ZXIudm0oKS5tX2NvbXBhY3RWYXJpYWJsZU1hcC0+Z2V0KHBhcmVudFNjb3BlVERaVmFyaWFibGVz
KSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayYgY29kZUJsb2NrKQoreworICAgIG1fdGhp
c1JlZ2lzdGVyID0gY29kZUJsb2NrLm1fdGhpc1JlZ2lzdGVyOworICAgIG1fc2NvcGVSZWdpc3Rl
ciA9IGNvZGVCbG9jay5tX3Njb3BlUmVnaXN0ZXI7CisgICAgbV9nbG9iYWxPYmplY3RSZWdpc3Rl
ciA9IGNvZGVCbG9jay5tX2dsb2JhbE9iamVjdFJlZ2lzdGVyOworICAgIG1fdXNlc0V2YWwgPSBj
b2RlQmxvY2subV91c2VzRXZhbDsKKyAgICBtX2lzU3RyaWN0TW9kZSA9IGNvZGVCbG9jay5tX2lz
U3RyaWN0TW9kZTsKKyAgICBtX2lzQ29uc3RydWN0b3IgPSBjb2RlQmxvY2subV9pc0NvbnN0cnVj
dG9yOworICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBjb2RlQmxvY2subV9oYXNDYXB0dXJl
ZFZhcmlhYmxlczsKKyAgICBtX2lzQnVpbHRpbkZ1bmN0aW9uID0gY29kZUJsb2NrLm1faXNCdWls
dGluRnVuY3Rpb247CisgICAgbV9zdXBlckJpbmRpbmcgPSBjb2RlQmxvY2subV9zdXBlckJpbmRp
bmc7CisgICAgbV9zY3JpcHRNb2RlID0gY29kZUJsb2NrLm1fc2NyaXB0TW9kZTsKKyAgICBtX2lz
QXJyb3dGdW5jdGlvbkNvbnRleHQgPSBjb2RlQmxvY2subV9pc0Fycm93RnVuY3Rpb25Db250ZXh0
OworICAgIG1faXNDbGFzc0NvbnRleHQgPSBjb2RlQmxvY2subV9pc0NsYXNzQ29udGV4dDsKKyAg
ICBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMgPSBjb2RlQmxvY2subV93YXNDb21w
aWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOworICAgIG1fY29uc3RydWN0b3JLaW5kID0gY29kZUJs
b2NrLm1fY29uc3RydWN0b3JLaW5kOworICAgIG1fZGVyaXZlZENvbnRleHRUeXBlID0gY29kZUJs
b2NrLm1fZGVyaXZlZENvbnRleHRUeXBlOworICAgIG1fZXZhbENvbnRleHRUeXBlID0gY29kZUJs
b2NrLm1fZXZhbENvbnRleHRUeXBlOworICAgIG1faGFzVGFpbENhbGxzID0gY29kZUJsb2NrLm1f
aGFzVGFpbENhbGxzOworICAgIG1fbGluZUNvdW50ID0gY29kZUJsb2NrLm1fbGluZUNvdW50Owor
ICAgIG1fZW5kQ29sdW1uID0gY29kZUJsb2NrLm1fZW5kQ29sdW1uOworICAgIG1fbnVtVmFycyA9
IGNvZGVCbG9jay5tX251bVZhcnM7CisgICAgbV9udW1DYWxsZWVMb2NhbHMgPSBjb2RlQmxvY2su
bV9udW1DYWxsZWVMb2NhbHM7CisgICAgbV9udW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLm1fbnVt
UGFyYW1ldGVyczsKKyAgICBtX2ZlYXR1cmVzID0gY29kZUJsb2NrLm1fZmVhdHVyZXM7CisgICAg
bV9wYXJzZU1vZGUgPSBjb2RlQmxvY2subV9wYXJzZU1vZGU7CisgICAgbV9jb2RlVHlwZSA9IGNv
ZGVCbG9jay5tX2NvZGVUeXBlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVDb25z
dGFudENvdW50OyBpLS07KQorICAgICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW2ldID0gY29kZUJs
b2NrLm1fbGlua1RpbWVDb25zdGFudHNbaV07CisKKyAgICBtX21ldGFkYXRhLmVuY29kZShlbmNv
ZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YSk7CisgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2Rl
ciwgY29kZUJsb2NrLm1fcmFyZURhdGEpOworCisgICAgbV9zb3VyY2VVUkxEaXJlY3RpdmUuZW5j
b2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3NvdXJjZVVSTERpcmVjdGl2ZS5pbXBsKCkpOworICAg
IG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1f
c291cmNlVVJMRGlyZWN0aXZlLmltcGwoKSk7CisKKyAgICBtX2luc3RydWN0aW9ucy5lbmNvZGUo
ZW5jb2RlciwgY29kZUJsb2NrLm1faW5zdHJ1Y3Rpb25zLmdldCgpKTsKKyAgICBtX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucyk7CisgICAgbV9jb25zdGFudFJlZ2lzdGVycy5lbmNvZGUoZW5jb2Rl
ciwgY29kZUJsb2NrLm1fY29uc3RhbnRSZWdpc3RlcnMpOworICAgIG1fY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgIG1fZXhwcmVzc2lvbkluZm8uZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX2V4cHJlc3Npb25JbmZvKTsKKyAgICBtX2p1bXBUYXJnZXRzLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9qdW1wVGFyZ2V0cyk7CisgICAgbV9vdXRPZkxpbmVK
dW1wVGFyZ2V0cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdl
dHMpOworCisgICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmVuY29kZShlbmNvZGVyLCBjb2Rl
QmxvY2subV9jb25zdGFudElkZW50aWZpZXJTZXRzKTsKKyAgICBtX2lkZW50aWZpZXJzLmVuY29k
ZShlbmNvZGVyLCBjb2RlQmxvY2subV9pZGVudGlmaWVycyk7CisgICAgbV9iaXRWZWN0b3JzLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0b3JzKTsKKyAgICBtX2Z1bmN0aW9uRGVj
bHMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRGVjbHMpOworICAgIG1fZnVu
Y3Rpb25FeHBycy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25FeHBycyk7Cit9
CisKK2NsYXNzIENhY2hlZFNvdXJjZUNvZGVLZXkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJj
ZUNvZGVLZXk+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisgICAgeworICAgICAgICBtX3NvdXJjZUNvZGUuZW5j
b2RlKGVuY29kZXIsIGtleS5tX3NvdXJjZUNvZGUpOworICAgICAgICBtX25hbWUuZW5jb2RlKGVu
Y29kZXIsIGtleS5tX25hbWUpOworICAgICAgICBtX2ZsYWdzID0ga2V5Lm1fZmxhZ3MubV9mbGFn
czsKKyAgICAgICAgbV9oYXNoID0ga2V5Lmhhc2goKTsKKyAgICAgICAgbV9mdW5jdGlvbkNvbnN0
cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0ga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBh
cmFtZXRlcnNFbmRQb3NpdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBTb3VyY2VDb2RlS2V5JiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBtX3NvdXJj
ZUNvZGUuZGVjb2RlKGRlY29kZXIsIGtleS5tX3NvdXJjZUNvZGUpOworICAgICAgICBtX25hbWUu
ZGVjb2RlKGRlY29kZXIsIGtleS5tX25hbWUpOworICAgICAgICBrZXkubV9mbGFncy5tX2ZsYWdz
ID0gbV9mbGFnczsKKyAgICAgICAga2V5Lm1faGFzaCA9IG1faGFzaDsKKyAgICAgICAga2V5Lm1f
ZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiA9IG1fZnVuY3Rpb25Db25z
dHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2Fj
aGVkVW5saW5rZWRTb3VyY2VDb2RlIG1fc291cmNlQ29kZTsKKyAgICBDYWNoZWRTdHJpbmcgbV9u
YW1lOworICAgIHVuc2lnbmVkIG1fZmxhZ3M7CisgICAgdW5zaWduZWQgbV9oYXNoOworICAgIGlu
dCBtX2Z1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb247Cit9OworCitjbGFz
cyBHZW5lcmljQ2FjaGVFbnRyeSB7CitwdWJsaWM6CisgICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVL
ZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZGVjb2RlKERlY29kZXImKSBjb25zdDsKKworcHJvdGVj
dGVkOgorICAgIENhY2hlZENvZGVCbG9ja1RhZyBtX3RhZzsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KK2NsYXNzIENhY2hlRW50cnkgOiBwdWJsaWMgR2Vu
ZXJpY0NhY2hlRW50cnkgeworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9ja1R5cGUq
PiBwYWlyKQorICAgIHsKKyAgICAgICAgbV90YWcgPSBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxV
bmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp0YWc7CisgICAgICAgIG1fa2V5LmVuY29kZShlbmNvZGVy
LCBwYWlyLmZpcnN0KTsKKyAgICAgICAgbV9jb2RlQmxvY2suZW5jb2RlKGVuY29kZXIsIHBhaXIu
c2Vjb25kKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIEdlbmVyaWNDYWNoZUVudHJ5
OworCisgICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dGFnID09IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnRh
Zyk7CisgICAgICAgIFNvdXJjZUNvZGVLZXkgZGVjb2RlZEtleTsKKyAgICAgICAgbV9rZXkuZGVj
b2RlKGRlY29kZXIsIGRlY29kZWRLZXkpOworICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGRlY29k
ZWRLZXkpLCBtX2NvZGVCbG9jay5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9CisKKyAgICBDYWNo
ZWRTb3VyY2VDb2RlS2V5IG1fa2V5OworICAgIENhY2hlZFB0cjxDYWNoZWRDb2RlQmxvY2tUeXBl
PFVubGlua2VkQ29kZUJsb2NrVHlwZT4+IG1fY29kZUJsb2NrOworfTsKKworc3RkOjpwYWlyPFNv
dXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gR2VuZXJpY0NhY2hlRW50cnk6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAoreworICAgIHN3aXRjaCAobV90YWcpIHsKKyAgICBj
YXNlIENhY2hlZFByb2dyYW1Db2RlQmxvY2tUYWc6CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMp
LT5kZWNvZGUoZGVjb2Rlcik7CisgICAgY2FzZSBDYWNoZWRNb2R1bGVDb2RlQmxvY2tUYWc6Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgY2Fz
ZSBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnOgorICAgICAgICAvLyBXZSBkbyBub3QgY2FjaGUgZXZh
bCBjb2RlIGJsb2NrcworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyNpZiBDT01QSUxFUihNU1ZDKQorICAgIC8vIFdpdGhvdXQgdGhpcywgTVNWQyB3aWxsIGNv
bXBsYWluIHRoYXQgdGhpcyBwYXRoIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLgorICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRFdmFsQ29kZUJsb2Nr
Pio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7CisjZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgordm9pZCBlbmNvZGVDb2RlQmxvY2soRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIGF1dG8qIGVudHJ5ID0gZW5jb2Rlci50ZW1wbGF0ZSBtYWxs
b2M8Q2FjaGVFbnRyeTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+PigpOworICAgIGVudHJ5LT5lbmNv
ZGUoZW5jb2RlciwgIHsga2V5LCBqc0Nhc3Q8Y29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4o
Y29kZUJsb2NrKSB9KTsKK30KKworc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90
PiBlbmNvZGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0
IFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8gPSBjb2RlQmxvY2stPmNsYXNzSW5mbyh2bSk7CisKKyAgICBFbmNvZGVyIGVuY29k
ZXIodm0pOworICAgIGlmIChjbGFzc0luZm8gPT0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpp
bmZvKCkpCisgICAgICAgIGVuY29kZUNvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+
KGVuY29kZXIsIGtleSwgY29kZUJsb2NrKTsKKyAgICBlbHNlIGlmIChjbGFzc0luZm8gPT0gVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIGVuY29kZUNvZGVC
bG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KGVuY29kZXIsIGtleSwgY29kZUJs
b2NrKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVChjbGFzc0luZm8gPT0gVW5saW5rZWRFdmFs
Q29kZUJsb2NrOjppbmZvKCkpOworCisgICAgcmV0dXJuIGVuY29kZXIucmVsZWFzZSgpOworfQor
CitVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNvbnN0IFNv
dXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAg
ICBjb25zdCBhdXRvKiBjYWNoZWRFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR2VuZXJp
Y0NhY2hlRW50cnkqPihidWZmZXIpOworICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBz
aXplKTsKKyAgICBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBl
bnRyeTsKKyAgICB7CisgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAg
ZW50cnkgPSBjYWNoZWRFbnRyeS0+ZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworICAgIGlmIChl
bnRyeS5maXJzdCAhPSBrZXkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBl
bnRyeS5zZWNvbmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNiOGFjYjZjZTU3MGU5NzI2
Mzg5YzI2ZDcwYmNiYTIxZGE4ZDRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgU291cmNlQ29kZUtleTsKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrOwor
CitzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IGVuY29kZUNvZGVCbG9jayhW
TSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayopOworVW5s
aW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25zdCBTb3VyY2VDb2Rl
S2V5JiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlPgorVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBkZWNvZGVDb2RlQmxvY2so
Vk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6
ZV90IHNpemUpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihk
ZWNvZGVDb2RlQmxvY2tJbXBsKHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
ZGVDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3Bw
CmluZGV4IDQ2MDE3OTIxYTQ2ZWZjNjQxNzI1ZDBhMjM1MjUyOTAzNWFmNWYzYWQuLmMzMmQyMDRi
NmNkODk2ODE4MWNiMGQxZGYwZWFiODNlYzExODE5ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcApAQCAtNDMsNiArNDMsOSBAQCB2b2lkIENvZGVDYWNo
ZU1hcDo6cHJ1bmVTbG93Q2FzZSgpCiAKICAgICB3aGlsZSAobV9zaXplID4gbV9jYXBhY2l0eSB8
fCAhY2FuUHJ1bmVRdWlja2x5KCkpIHsKICAgICAgICAgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBt
X21hcC5iZWdpbigpOworCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKCppdC0+dmFsdWUuY2VsbC0+
dm0oKSwgaXQtPmtleSwgaXQtPnZhbHVlKTsKKwogICAgICAgICBtX3NpemUgLT0gaXQtPmtleS5s
ZW5ndGgoKTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKICAgICB9CkBAIC01OSw5ICs2Miw4
IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbENv
ZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUCiAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8g
VHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAg
ICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxl
ZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAgICBXVEY6Om51
bGxvcHQpOwotICAgIFNvdXJjZUNvZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENh
Y2hlQW5kVXBkYXRlQWdlKGtleSk7Ci0gICAgaWYgKGNhY2hlICYmIE9wdGlvbnM6OnVzZUNvZGVD
YWNoZSgpKSB7Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxv
Y2sgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY2FjaGUtPmNlbGwuZ2V0KCkpOwor
ICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3NvdXJjZUNv
ZGUuZmluZENhY2hlQW5kVXBkYXRlQWdlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7
CisgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7
CiAgICAgICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5saW5lQ291
bnQoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZENvZGVCbG9jay0+
c3RhcnRDb2x1bW4oKSArIHNvdXJjZS5zdGFydENvbHVtbigpLm9uZUJhc2VkSW50KCk7CiAgICAg
ICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9ICFsaW5lQ291bnQ7CkBAIC03MSw5ICs3
Myw5IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUCiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigp
LT5zZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKHVubGlua2VkQ29kZUJsb2NrLT5zb3VyY2VN
YXBwaW5nVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7
CiAgICAgfQotICAgIAorCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJsZXNVbmRlclRE
WjsKLSAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZ2VuZXJh
dGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBl
Pih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dl
ck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7CisgICAg
dW5saW5rZWRDb2RlQmxvY2sgPSBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkQ29k
ZUJsb2NrVHlwZSwgRXhlY3V0YWJsZVR5cGU+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmlj
dE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwg
JnZhcmlhYmxlc1VuZGVyVERaKTsKIAogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jayAmJiBPcHRp
b25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgbV9zb3VyY2VDb2RlLmFkZENhY2hlKGtleSwg
U291cmNlQ29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgbV9zb3VyY2VDb2RlLmFnZSgp
KSk7CkBAIC0xMTAsOSArMTEyLDggQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVD
YWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHYKICAgICAgICAg
dm0udHlwZVByb2ZpbGVyKCkgPyBUeXBlUHJvZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJvZmls
ZXJFbmFibGVkOjpObywgCiAgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRy
b2xGbG93UHJvZmlsZXJFbmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6
Tm8sCiAgICAgICAgIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwot
ICAgIFNvdXJjZUNvZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBk
YXRlQWdlKGtleSk7Ci0gICAgaWYgKGNhY2hlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7
Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0
PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FjaGUtPmNlbGwuZ2V0KCkpOworICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV9zb3VyY2VDb2RlLmZpbmRD
YWNoZUFuZFVwZGF0ZUFnZTxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGtleSk7Cisg
ICAgaWYgKGV4ZWN1dGFibGUgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpIHsKICAgICAgICAg
c291cmNlLnByb3ZpZGVyKCktPnNldFNvdXJjZVVSTERpcmVjdGl2ZShleGVjdXRhYmxlLT5zb3Vy
Y2VVUkxEaXJlY3RpdmUoKSk7CiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5zZXRTb3VyY2VN
YXBwaW5nVVJMRGlyZWN0aXZlKGV4ZWN1dGFibGUtPnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUo
KSk7CiAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwpAQCAtMTU1LDQgKzE1NiwxMCBAQCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0
aW9uRXhlY3V0YWJsZShWTSYgdgogICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7CiB9CiAK
K3ZvaWQgQ29kZUNhY2hlOjp3cml0ZShWTSYgdm0pCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBp
dCA6IG1fc291cmNlQ29kZSkKKyAgICAgICAgd3JpdGVDb2RlQmxvY2sodm0sIGl0LmtleSwgaXQu
dmFsdWUpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5o
CmluZGV4IDhhNDQxOWY5NmNhOGZhNGE2MjliZTBlOWE3ODI3Y2JhZjY4Y2ZmODYuLjk5Mzk1ZjJj
ZDI4NDExMzlhMDM1YzhiMTU4OWJiOTM5YzY5YzU3MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIK
ICNpbmNsdWRlICJFeGVjdXRhYmxlSW5mby5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJQYXJzZXIuaCIKQEAgLTM3LDYgKzM4LDcgQEAKICNpbmNsdWRlICJVbmxpbmtlZEV2
YWxDb2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2su
aCIKICNpbmNsdWRlICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlIDxzeXMv
c3RhdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKQEAgLTg5LDEzICs5MSw3NiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIFNvdXJjZUNvZGVWYWx1ZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKGNvbnN0IFNvdXJjZUNv
ZGVLZXkmIGtleSkKKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7
IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorICAgIFVubGlua2VkQ29kZUJs
b2NrVHlwZSogZmV0Y2hGcm9tRGlza0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBr
ZXkpCisgICAgeworI2lmIE9TKERBUldJTikKKyAgICAgICAgY29uc3QgY2hhciogY2FjaGVQYXRo
ID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOworICAgICAgICBpZiAoIWNhY2hlUGF0aCkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBrZXku
aGFzaCgpOworICAgICAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisgICAgICAgIGludCBjb3VudCA9
IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7
CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7
CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX1NIIHwgTE9DS19OQik7CisgICAgICAgIGlm
IChyYykgeworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICAgICAgaW50IHJl
cyA9IGZzdGF0KGZkLCAmc2IpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNp
emVfdD4oc2Iuc3Rfc2l6ZSk7CisgICAgICAgIGlmIChyZXMgfHwgIXNpemUpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIgPSBtbWFwKG51
bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxV
bmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSk7CisKKyAgICAgICAg
aWYgKCF1bmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGFkZENhY2hlKGtleSwgU291cmNlQ29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9j
aywgbV9hZ2UpKTsKKyAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOworI2Vsc2UKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19i
YXNlX29mPFVubGlua2VkQ29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPFVubGlua2VkQ29kZUJsb2NrVHlwZSwgVW5saW5rZWRFdmFsQ29kZUJs
b2NrPjo6dmFsdWUsIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+CisgICAgZmV0Y2hGcm9tRGlzayhW
TSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKKyAgICB7CisgICAgICAgIFVubGlua2Vk
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrID0gZmV0Y2hGcm9tRGlza0ltcGw8VW5saW5rZWRDb2Rl
QmxvY2tUeXBlPih2bSwga2V5KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNl
RGlza0NhY2hlKCkpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrKTsKKyAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVCbG9j
aywgVD46OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s+Ojp2
YWx1ZSwgVCo+CisgICAgZmV0Y2hGcm9tRGlzayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmKSB7
IHJldHVybiBudWxscHRyOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVC
bG9ja1R5cGU+CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBmaW5kQ2FjaGVBbmRVcGRhdGVB
Z2UoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCiAgICAgewogICAgICAgICBwcnVu
ZSgpOwogCiAgICAgICAgIGl0ZXJhdG9yIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKGtleSk7CiAg
ICAgICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gZmV0Y2hGcm9tRGlzazxVbmxpbmtlZENvZGVC
bG9ja1R5cGU+KHZtLCBrZXkpOwogCiAgICAgICAgIGludDY0X3QgYWdlID0gbV9hZ2UgLSBmaW5k
UmVzdWx0LT52YWx1ZS5hZ2U7CiAgICAgICAgIGlmIChhZ2UgPiBtX2NhcGFjaXR5KSB7CkBAIC0x
MTUsNyArMTgwLDcgQEAgcHVibGljOgogICAgICAgICBmaW5kUmVzdWx0LT52YWx1ZS5hZ2UgPSBt
X2FnZTsKICAgICAgICAgbV9hZ2UgKz0ga2V5Lmxlbmd0aCgpOwogCi0gICAgICAgIHJldHVybiAm
ZmluZFJlc3VsdC0+dmFsdWU7CisgICAgICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlKj4oZmluZFJlc3VsdC0+dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAgfQogCiAgICAgQWRk
UmVzdWx0IGFkZENhY2hlKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNlQ29k
ZVZhbHVlJiB2YWx1ZSkKQEAgLTE5Nyw2ICsyNjIsNyBAQCBwdWJsaWM6CiAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGdldFVubGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZN
JiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFNvdXJjZUNvZGUmLCBEZWJ1Z2dlck1vZGUsIE9w
dGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgUGFy
c2VyRXJyb3ImKTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fc291cmNlQ29kZS5jbGVhcigpOyB9
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZShWTSYpOwogCiBwcml2YXRlOgogICAg
IHRlbXBsYXRlIDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVU
eXBlPiAKQEAgLTI1Niw0ICszMjIsMzYgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZW5lcmF0
ZVVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGEKICAgICBy
ZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7CiB9CiAKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQg
d3JpdGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNv
dXJjZUNvZGVWYWx1ZSYgdmFsdWUpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0IGNoYXIq
IGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFj
YWNoZVBhdGgpKQorICAgICAgICByZXR1cm47CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29k
ZUJsb2NrID0ganNEeW5hbWljQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxs
LmdldCgpKTsKKyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgaGFzaCA9IGtleS5oYXNoKCk7CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGlu
dCBjb3VudCA9IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0
aCwgaGFzaCk7CisgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZXN1bHQg
PSBlbmNvZGVDb2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKKworICAgIGludCBmZCA9IG9w
ZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaW50IHJjID0gZmxv
Y2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJjKQorICAgICAgICA6OndyaXRl
KGZkLCByZXN1bHQuZmlyc3QuZ2V0KCksIHJlc3VsdC5zZWNvbmQpOworICAgIGNsb3NlKGZkKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmCit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKaW5kZXggY2E1MzE2
MzZiNzgxZTg2OWVhNzhmNzZkMjViNWU0YWVhZDQxNjE4NS4uMmJjYWE5YjY3NjJkMjUyZjBiMzFl
ZTFhODk0OWNkZDgzNzQ2ODAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmNwcApAQCAtMTY4OCwxMSArMTY4OCw2IEBAIGJvb2wgSlNCaWdJbnQ6OmdldFByaW1p
dGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBzaXplX3QgSlNCaWdJbnQ6Om9mZnNldE9m
RGF0YSgpCi17Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoRGln
aXQpPihzaXplb2YoSlNCaWdJbnQpKTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBl
PgogSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIENoYXJUeXBl
KiAgZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBFcnJvclBhcnNlTW9kZSBlcnJvclBhcnNlTW9kZSkK
IHsKQEAgLTE3OTUsMTEgKzE3OTAsNiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4
ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwgdW5zaWduZWQgbAogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1pbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0KiBKU0JpZ0ludDo6ZGF0
YVN0b3JhZ2UoKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PERpZ2l0Kj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkRhdGEoKSk7Ci19Ci0KIGlubGluZSBK
U0JpZ0ludDo6RGlnaXQgSlNCaWdJbnQ6OmRpZ2l0KHVuc2lnbmVkIG4pCiB7CiAgICAgQVNTRVJU
KG4gPCBsZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaApp
bmRleCAyYjNiZjkzMDdkOGRiYmIxMTA3NTMzZWQ4MzAzNDdiY2RkNGE2MTBiLi5kYmJmNjNkZWQx
YzhjYmQ0OGVhN2I5ZmNiNWIwZTg1MTViNWZlYTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQmlnSW50LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHVzaW5nIEJhc2UgPSBKU0Nl
bGw7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVG9UaGlzOworICAg
IGZyaWVuZCBjbGFzcyBDYWNoZWRCaWdJbnQ7CiAKIHB1YmxpYzoKIApAQCAtMjI4LDggKzIyOSwx
NSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChK
U0JpZ0ludCogeCk7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKTsKLSAgICBEaWdpdCog
ZGF0YVN0b3JhZ2UoKTsKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoRGln
aXQpPihzaXplb2YoSlNCaWdJbnQpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgRGlnaXQqIGRhdGFT
dG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PERpZ2l0Kj4o
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkRhdGEoKSk7CisgICAgfQog
CiAgICAgRGlnaXQgZGlnaXQodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGlnaXQodW5zaWduZWQs
IERpZ2l0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
NjZjZWMzYWY3OWY2YTgxM2Q5OGIzMDY3OGU3ZDRmZGY4NmVjNjEyNi4uOTYyZDg3ZTk5MjZkYWNl
Mzc2NmY1OTczZDA5NmQ4ODIyN2UxZGU3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTUxNyw2ICs1MTcsMTIgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRl
RGVwZW5kZW50T3B0aW9ucygpCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3Nzk1NgogICAgIE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpID0gZmFsc2U7
CiAjZW5kaWYKKworICAgIGlmICghT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpCisgICAgICAgIE9w
dGlvbnM6OmRpc2tDYWNoZVBhdGgoKSA9IG51bGxwdHI7CisKKyAgICBpZiAoIU9wdGlvbnM6OmRp
c2tDYWNoZVBhdGgoKSkKKyAgICAgICAgT3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IGZhbHNl
OwogfQogCiB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCmluZGV4IGU2N2Q5MzkzZTBjMjY4Zjg5MTdjOTgyMjljMWFmMzQ4YWUy
MWYzNjEuLjQ4ZjZlNjJhN2EwMmI5NDFhOWMzMWU4ODFjYTZjYjFmMjlkMjI0YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTUwOCw2ICs1MDgsOCBAQCBjb25z
dGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYo
Ym9vbCwgdHJhY2VMTEludEV4ZWN1dGlvbiwgZmFsc2UsIENvbmZpZ3VyYWJsZSwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgdHJhY2VMTEludFNsb3dQYXRoLCBmYWxzZSwgQ29uZmlndXJhYmxlLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCB0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCisgICAgdihvcHRpb25TdHJpbmcsIGRpc2tDYWNoZVBhdGgsIG51
bGxwdHIsIFJlc3RyaWN0ZWQsICIiKSBcCisgICAgdihib29sLCBmb3JjZURpc2tDYWNoZSwgZmFs
c2UsIFJlc3RyaWN0ZWQsICIiKSBcCiAKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCmluZGV4IDgzYWFkMzU2MDM4ZWIyZWM3NmU2
YjhiZDM3Yzc0NzZjZWM5MTM1MmUuLjAzYWRkNDVmYjU1NzA0Y2ZhMDJkNmU1YTIzY2IwMmM4MDQ3
YmJlNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCkBAIC00MSw2ICs0
MSw4IEBAIGNsYXNzIFZNOwogSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwRmxhZ3MgcmVnRXhwRmxh
Z3MoY29uc3QgU3RyaW5nJik7CiAKIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
eworICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRSZWdFeHA7CisKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCmluZGV4
IDQwZTdjN2VjMmZkNjBiNTg0MmE1NzI4NWFjOTdiMGY2YTk1OTM5NWQuLmU4MTIzNDI5N2IwYmI4
YTAyNTgwMmYzN2E4OTg0NzA4OGE1YWUxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaApAQCAtMzksNiArMzksOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIC8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25z
IGFyZSBzbyB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQog
Ly8gImRlbGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9w
ZXJ0eS4KIGNsYXNzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOworCiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKaW5kZXggZWQ5ODJl
MzFmNTViYmJjOTE2MjhkMjM0MTc4MTJiYjRmNmM2ODcxMS4uNWVlZGVlNmY4MTg2ZGFlYTMwNDA5
ODEzZDQ1MzQ2YWMwNzVlZmQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RhY2tGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
YWNrRnJhbWUuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkhlYXAuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJh
cnJpZXIuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAzODI2NDQyNzAxNTQ5MWEzNDc2Mzky
MzUxZTVmNTY1NmY2YzEwM2RlLi40YTMwZjM3ZGQ3NWE2MzE1MDM3NWI4OTFmOWRlODIxMGQ0NDMz
ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKaW5kZXggOTE1
N2Q1YjgyOTIwMGZiNmE5NjVlYTNiYzc4Njk2ZTUzMmE5MmI5NS4uNTk2OTFiMmVjNDFlYzdhZTk3
YWQ0MGM5ODQ5MDE1NjRjZmZkNDAxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGlu
dCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
CiAvLyBjb3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0
cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU3ltYm9sVGFi
bGVFbnRyeTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgVmFyT2Zmc2V0IHZhck9mZnNldEZyb21C
aXRzKGludHB0cl90IGJpdHMpCiAgICAgewpAQCAtNDM2LDYgKzQzOCw4IEBAIHN0cnVjdCBTeW1i
b2xUYWJsZUluZGV4SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8U3ltYm9sVGFibGVFbnRyeT4gewog
fTsKIAogY2xhc3MgU3ltYm9sVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBmcmll
bmQgY2xhc3MgQ2FjaGVkU3ltYm9sVGFibGU7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2Vs
bCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKaW5kZXgg
NzU1Y2Q3YTlhYTU3NmM2ZjdhNGRiMTRjMGQ5ZTMwMmM3OGRiNTE3OC4uYjhiYjM2NWI1OWQ3ZWJh
Yzc5YWM2ODlhNDQ0ZGE1OTI3MjNjNTBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKQEAgLTMzLDYgKzMzLDEw
IEBACiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIENhY2hlZEJpdFZlY3RvcjsKK30KKwog
bmFtZXNwYWNlIFdURiB7CiAKIC8vIFRoaXMgaXMgYSBzcGFjZS1lZmZpY2llbnQsIHJlc2l6ZWFi
bGUgYml0dmVjdG9yIGNsYXNzLiBJbiB0aGUgY29tbW9uIGNhc2UgaXQKQEAgLTMzOCw2ICszNDIs
OCBAQCBwdWJsaWM6CiAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIHNpemUoKSk7IH0KICAgICAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBK
U0M6OkNhY2hlZEJpdFZlY3RvcjsKKwogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVy
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCopIDw8IDM7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODIzYjA4Y2U0ZTRmNzMx
ZTM3MmVmZWRkZmE5ODQwZjQwZDBhMDYwMy4uYmFjOGUyN2ZkYTllYjg0MTNhNTIzYjE2YWIxOWVk
ZGM4MTQ0NmE1YiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5LTAxLTE4ICBUYWRldSBaYWdhbGxvICA8dHphZ2Fs
bG9AYXBwbGUuY29tPgorCisgICAgICAgIENhY2hlIGJ5dGVjb2RlIHRvIGRpc2sKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjc4MgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNDYwODQ5MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgaGVscGVyIHRvIGV4ZWN1dGUgYnl0ZWNvZGUtY2Fj
aGUgdGVzdHM6IGl0IGV4ZWN1dGVzIGVhY2ggdGVzdAorICAgICAgICB0d2ljZSwgdGhlIGZpcnN0
IHdpdGggSlNDX2Rpc2tDYWNoZVBhdGggc2V0IHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeQorICAg
ICAgICBhbmQgc2Vjb25kIHdpdGggSlNDX2ZvcmNlRGlza0NhY2hlPXRydWUgKGluIGFkZGl0aW9u
IHRvIHRoZSBjYWNoZSBwYXRoKQorICAgICAgICB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHRoZSBk
aXNrIGNhY2hlIGlzIGJlaW5nIHVzZWQgYW5kIG5vIG5ldworICAgICAgICBVbmxpbmtlZENvZGVC
bG9ja3MgYXJlIGJlaW5nIGNyZWF0ZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL2pzYy1zdHJlc3Mt
dGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyOiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAyMDE5LTAxLTE2ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihQU09OKSBWaWV3IGJl
Y29tZXMgYmxhbmsgYWZ0ZXIgY2xpY2sgYSBjcm9zcy1zaXRlIGRvd25sb2FkIGxpbmsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2Fj
aGUtdGVzdC1oZWxwZXIgYi9Ub29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5
dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4YzkyOTIxZGI4ZDRkZDI1MDI3
NDQwYzZjZjRmZDFmOWZhZjdlODgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2pz
Yy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyCkBAIC0wLDAg
KzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCityZXF1aXJlICdydWJ5Z2VtcycKK3JlcXVpcmUgJ2ZpbGV1dGlscycKK3JlcXVpcmUg
J2pzb24nCityZXF1aXJlICdzaGVsbHdvcmRzJworcmVxdWlyZSAndG1wZGlyJworCitkZWYgbXlz
eXMoKmNtZCkKKyAgICByYWlzZSAiQ29tbWFuZCAje2NtZC5pbnNwZWN0fSBmYWlsZWQ6ICN7JD8u
aW5zcGVjdH0iIHVubGVzcyBzeXN0ZW0oKmNtZCkKK2VuZAorCitwYXRoVG9WTSA9IEFSR1ZbMF0K
K2lucHV0RmlsZSA9IEFSR1ZbMV0KK2V4dHJhT3B0aW9ucyA9IEFSR1ZbMi4uLTFdCitkaXNrQ2Fj
aGVQYXRoID0gRGlyLm1rdG1wZGlyIFtpbnB1dEZpbGUsICdieXRlY29kZS1jYWNoZSddCisKK2Jl
Z2luCisgICAgRU5WWyJKU0NfZGlza0NhY2hlUGF0aCJdID0gZGlza0NhY2hlUGF0aAorICAgIG15
c3lzKHBhdGhUb1ZNLCBpbnB1dEZpbGUsICpleHRyYU9wdGlvbnMpCisgICAgRU5WWyJKU0NfZm9y
Y2VEaXNrQ2FjaGUiXSA9ICJ0cnVlIgorICAgIG15c3lzKHBhdGhUb1ZNLCBpbnB1dEZpbGUsICpl
eHRyYU9wdGlvbnMpCitlbnN1cmUKKyAgICBGaWxlVXRpbHMucm1fcmYoZGlza0NhY2hlUGF0aCkK
K2VuZApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rv
b2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggNjMyOTQwYjNlNGRhN2I2OWNk
OGU4N2YwMTUxYjEyNjE2ZTViZDViYy4uOTFlMjY2NTY3ODFhOWNiYzBhODhhNjNhNGU5ZDM4NWRl
NDY1ODJjMSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwor
KysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02NTUsNiArNjU1LDE1
IEBAIGRlZiBydW5EZWZhdWx0KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcnVu
KCJkZWZhdWx0IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CiBlbmQKIAorZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKKyAgICB1bmxlc3MgJGhvc3RPUyA9PSAiZGFyd2luIgorICAgICAgICBza2lwCisgICAgICAg
IHJldHVybgorICAgIGVuZAorICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyAkdGVzdFNwZWNp
ZmljUmVxdWlyZWRPcHRpb25zICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMKKyAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsicnVieSIsIChwYXRo
VG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyIikudG9fcywgcGF0aFRvVk0u
dG9fcywgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNp
bXBsZUVycm9ySGFuZGxlcikKK2VuZAorCiBkZWYgcnVuQmlnSW50RW5hYmxlZCgqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQogICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80MDMzMTEy
MT4KICAgICBpZiAkcmVtb3RlIG9yICgkYXJjaGl0ZWN0dXJlICF+IC94ODYvaSBhbmQgJGhvc3RP
UyA9PSAiZGFyd2luIikKQEAgLTc1MSw2ICs3NjAsNyBAQCBkZWYgZGVmYXVsdFJ1bgogICAgICAg
ICBkZWZhdWx0UXVpY2tSdW4KICAgICBlbHNlCiAgICAgICAgIHJ1bkRlZmF1bHQKKyAgICAgICAg
cnVuQnl0ZWNvZGVDYWNoZQogICAgICAgICBpZiAkaml0VGVzdHMKICAgICAgICAgICAgIHJ1bk5v
TExJbnQKICAgICAgICAgICAgIHJ1bk5vQ0pJVFZhbGlkYXRlUGhhc2VzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359530</attachid>
            <date>2019-01-18 13:29:35 -0800</date>
            <delta_ts>2019-01-21 06:27:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190118222922.patch</filename>
            <type>text/plain</type>
            <size>137507</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NDdmYTQ5YWEwMmE4MWI1NjkzMjgzNWU5OWMzZDk1MGQ4NDk0MzJiLi5hNDQxOTBhYjIxMTVmNzBi
Yjg4YmI1ZWJiZTk2NWVjYWRmOGFkODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjAgQEAKKzIwMTktMDEtMTggIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLgorCisgICAgICAgIEVhY2ggY2xhc3MgdGhhdCBjYW4gYmUgc2VyaWFsaXplZCBo
YXMgYSBjb3VudGVycGFydCBpbiBDYWNoZWRUeXBlcywgd2hpY2gKKyAgICAgICAgaGFuZGxlcyB0
aGUgZGVjb2RpbmcgYW5kIGVuY29kaW5nLiBXaGVuIGRlY29kaW5nLCB0aGUgY2FjaGVkIG9iamVj
dHMgYXJlCisgICAgICAgIG1tYXAnZCBmcm9tIGRpc2ssIGJ1dCBvbmx5IHVzZWQgZm9yIGNyZWF0
aW5nIGluc3RhbmNlcyBvZiB0aGUgcmVzcGVjdGl2ZQorICAgICAgICBpbi1tZW1vcnkgdmVyc2lv
biBvZiBlYWNoIG9iamVjdC4gSWRlYWxseSwgdGhlIG1tYXAnZCBvYmplY3RzIHNob3VsZCBiZQor
ICAgICAgICB1c2VkIGF0IHJ1bnRpbWUgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMpOgor
ICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEhhbmRs
ZXJJbmZvOjpVbmxpbmtlZEhhbmRsZXJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvblN0cmVhbS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRTZXRDb25zdGFudCk6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudElkZW50aWZpZXJTZXRzKToKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEdsb2Jh
bENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6VW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRh
dGFUYWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoZnVuY3Rpb25RdWl0KToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZUtleS5oOgor
ICAgICAgICAoSlNDOjpTb3VyY2VDb2RlS2V5OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAg
KiBwYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmg6CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxl
RW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkVuY29kZXI6OkFsbG9jYXRpb246OmJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkVuY29kZXI6OkFsbG9jYXRpb246Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6OkVuY29kZXI6OkFsbG9jYXRpb246OkFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpFbmNv
ZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6dm0pOgorICAgICAgICAoSlND
OjpFbmNvZGVyOjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZzZXRPZik6Cisg
ICAgICAgIChKU0M6OkVuY29kZXI6OmNhY2hlUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6
b2Zmc2V0Rm9yUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAgICAg
IChKU0M6OkVuY29kZXI6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdl
OjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdlOjpidWZmZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
RW5jb2Rlcjo6UGFnZTo6Z2V0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6
YWxsb2NhdGVOZXdQYWdlKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6On5EZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6dm0p
OgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRlY29k
ZXI6OmNhY2hlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6YWRkRmluYWxpemVyKToK
KyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAgICAgICAg
KEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgIChKU0M6
OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFB0
cjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRQdHI6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFdy
aXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFBhaXI6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZElk
ZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2lt
cGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFi
bGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZEJpdFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Qml0VmVjdG9yOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRB
cnJheTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRz
VGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkU3ltYm9sVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZEltbXV0YWJsZUJ1dHRlcmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1t
dXRhYmxlQnV0dGVyZmx5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdF
eHA6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkQmlnSW50OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVl
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1l
dGFkYXRhVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9y
aWdpbjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFRleHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU3RyaW5nU291cmNlUHJvdmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0
cmluZ1NvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNl
UHJvdmlkZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJj
ZUNvZGVTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29k
ZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpmaXJzdExpbmVPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmVD
b3VudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5s
aW5rZWRGdW5jdGlvbk5hbWVTdGFydCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRCb2R5U3RhcnRDb2x1bW4gY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQm9keUVuZENvbHVtbiBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c3RhcnRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNvdXJjZUxl
bmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFy
YW1ldGVyc1N0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25F
eGVjdXRhYmxlOjp0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnR5cGVQcm9maWxpbmdFbmRPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlckNvdW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpmZWF0dXJl
cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c291cmNl
UGFyc2VNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxl
Ojppc0luU3RyaWN0Q29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6aGFzQ2FwdHVyZWRWYXJpYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmlzQnVpbHRpbkZ1bmN0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjppc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3RvciBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29uc3RydWN0QWJpbGl0eSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29uc3RydWN0b3JLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlOjpmdW5jdGlvbk1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNjcmlwdE1vZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnN1cGVyQmluZGluZyBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVyaXZlZENvbnRleHRUeXBlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpuYW1lIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjplY21hTmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mZXJyZWROYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3RlciBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c2NvcGVSZWdpc3RlciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0UmVnaXN0ZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNvdXJjZVVSTERpcmVjdGl2ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6dXNlc0V2YWwgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzU3RyaWN0TW9kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aXNDb25zdHJ1Y3RvciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2FwdHVyZWRWYXJpYWJsZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQnVpbHRpbkZ1bmN0aW9uIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpzdXBlckJpbmRpbmcgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNjcmlwdE1vZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQXJyb3dGdW5jdGlvbkNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQ2xhc3NDb250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjp3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpjb25zdHJ1Y3RvcktpbmQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmRlcml2ZWRDb250ZXh0VHlw
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6ZXZhbENvbnRleHRUeXBl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpoYXNUYWlsQ2FsbHMgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmxpbmVDb3VudCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6ZW5kQ29sdW1uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1WYXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrOjpudW1DYWxsZWVMb2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRDb2RlQmxvY2s6Om51bVBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRD
b2RlQmxvY2s6OmZlYXR1cmVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2Nr
OjpwYXJzZU1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmNvZGVU
eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpyYXJlRGF0YSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFByb2dyYW1Db2RlQmxvY2s6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFByb2dyYW1Db2RlQmxvY2s6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZE1vZHVsZUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkTW9kdWxlQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRF
dmFsQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRFdmFsQ29kZUJsb2Nr
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OlVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OiBj
b25zdCk6CisgICAgICAgIChKU0M6OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OmRlY29kZUNvZGVCbG9ja0ltcGwpOgorICAgICAgICAqIHJ1
bnRpbWUvQ2FjaGVkVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmguCisgICAgICAgIChKU0M6OmRlY29kZUNv
ZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpn
ZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZTo6d3JpdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChK
U0M6OkNvZGVDYWNoZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmVu
ZCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAg
ICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAg
IChKU0M6OndyaXRlQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoK
KyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAg
ICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9T
dGFja0ZyYW1lLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAg
ICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorCiAyMDE5LTAxLTE2ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBuZXcgYnl0ZWNvZGUgc3RydWN0
cyBzbyB0aGF0IHRoZSBmaWVsZHMgYXJlIHByZWZpeGVkIHdpdGggIm1fIi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMTIxZTZi
ZmVlYTlmYjlkMDFiYjFmZDc4NWViYjJjYmNkZWMxMGM3Mi4uNDA4NGUwZmU1M2M1ZjFkOGJjMzY0
NmQyNjdiNjU4MDE2NjFlM2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wMS0xOCAgVGFk
ZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBieXRlY29k
ZSB0byBkaXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTI3ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MDg0OTMyPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpdFZlY3RvcnMgaGF2ZSB0byBi
ZSBmcmllbmRzIHdpdGggSlNDOjpDYWNoZUJpdFZlY3RvciB0byBhbGxvdworICAgICAgICBzZXJp
YWxpemluZyBpdHMgYnVmZmVyIGFzIHBhcnQgb2YgdGhlIGJ5dGVjb2RlIGNhY2hlIGVuY29kaW5n
LgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorCiAyMDE5LTAxLTE2ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2Mgc2hvdWxkIHVz
ZSBKU0MgVk0gdGFnIGZvciBnaWdhY2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDZhY2RmYjEzNDI2NDY1YmM0OGJmMWQ3YTVkYjc3NzVmMzg0OWE1OWQuLmVhODU4YjE2
ODI0OWExYzEyZDNiMTFjNjAzNTFkYTI4N2RkMGM0NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTgzMyw2ICs4MzMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAogICAgIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3RJbmxpbmVzLmgKKyAgICBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKICAgICBy
dW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmgKICAgICBydW50aW1lL0pTSW50ZXJuYWxQcm9taXNl
RGVmZXJyZWQuaAogICAgIHJ1bnRpbWUvSlNNaWNyb3Rhc2suaApAQCAtODQ4LDYgKzg0OSw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcnVudGlt
ZS9KU1Byb21pc2UuaAogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuaAogICAgIHJ1
bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAorICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgKICAgICBydW50aW1lL0pTUHJveHkuaAogICAgIHJ1bnRpbWUvSlNSdW5Mb29wVGlt
ZXIuaAogICAgIHJ1bnRpbWUvSlNTY29wZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRmN2U2YzA0YWI5YTZhYmQ3YjQwZTJhZTk3YzVhYTBiYWMxMTI5ZDkuLjFiYzkyNWE5Njk1
YmVjMjU4YWM1NjdhYWM1OTQ1YWU0NzVjNDRkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC04MjYsNyArODI2LDcgQEAKIAkJMjYyRDg1QjcxQzBENjUwRjAwNkFDQjYxIC8qIEFp
ckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRp
YWxSZWdpc3RlclN0YWxscy5oICovOyB9OwogCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2NjMgLyog
QWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovOyB9OwogCQky
NjlENjM2RTFCRkJFNUQxMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyog
RlRMT3V0cHV0LmggKi87IH07Ci0JCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCAqLzsgfTsKKwkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJB
MTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMTExMjQ0MTkyRkNFNzkwMDVF
RTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2Fs
bGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIxMUI1NzQxNzZBMjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAq
LzsgfTsKIAkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNEJC
N0YyMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggKi87IH07CkBA
IC0xMDYyLDcgKzEwNjIsNyBAQAogCQk1M0VBRkUyRjIwOERGQUI0MDA3RDUyNEIgLyogdGVzdGFw
aS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFE
NEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFwaS5jcHAgKi87IH07CiAJCTUzRUUwMUI2MjE4
RjY5MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNFRTAx
QjgyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAv
KiBKU1NjcmlwdEludGVybmFsLmggKi87IH07Ci0JCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFBNyAv
KiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0
dGVyZmx5LmggKi87IH07CisJCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJs
ZUJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGNDBFODUx
RDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21T
ZWN0aW9ucy5oICovOyB9OwogCQk1M0Y0MEU4QjFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0
aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi87IH07
CiAJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QzFENTkwMUYyMDA5OUEx
QjYgLyogV2FzbVBhcnNlci5oICovOyB9OwpAQCAtMzEyOSw2ICszMTI5LDcgQEAKIAkJMTQzODZB
NzMxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0Mzg2QTc2MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2
YWxFeGVjdXRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDM4NkE3NzFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBD
YWNoZWRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQwMDUxRjBBNTMxRDNCMDAwNUYw
NjEgLyogTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOb2RlLmg7IHBh
dGggPSB0ZXN0cy9Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNTIw
MEE1MzFEM0IwMDA1RjA2MSAvKiBOb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFt
ZSA9IE5vZGUuYzsgcGF0aCA9IHRlc3RzL05vZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQ0MDA3NDgwQTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5vZGVMaXN0Lmg7IHBhdGggPSB0ZXN0cy9Ob2RlTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI0Myw2ICszMjQ0LDcgQEAKIAkJMTRE
ODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmphdmFzY3JpcHQ7IG5hbWUgPSB0ZXN0YXBpLmpzOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGku
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRG
QiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0xleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNERBRkE0NTIxRTNCODcxMDA0QjY4
RjcgLyogQ2FjaGVkVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FjaGVkVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERFMEQ2
ODBEMDI0MzE0MDBBQUNDQTIgLyogSlNHbG9iYWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVy
ID0geGNvZGUubGFuZy5jcHA7IH07CiAJCTE0REYwNEQ5MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0
aWNQcm9wZXJ0eUFuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
YXRpY1Byb3BlcnR5QW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRF
ODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjYwMiw2ICs2NjA0LDggQEAKIAkJCQk5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUg
LyogQnVuZGxlUGF0aC5tbSAqLywKIAkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0
dGVyZmx5LmggKi8sCiAJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlu
bGluZXMuaCAqLywKKwkJCQkxNERBRkE0NTIxRTNCODcxMDA0QjY4RjcgLyogQ2FjaGVkVHlwZXMu
Y3BwICovLAorCQkJCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0QxNyAvKiBDYWNoZWRUeXBlcy5oICov
LAogCQkJCTBGRUMzQzVGMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLywK
IAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAogCQkJCTE0
NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDk0OWVkY2FhNWI1MzhiODU4YWRjMzRjMTEyNGRjNmMxZWRkNjIyNTUu
LjI1OGQ0OWNlZDFlMmQ1OWRkYmRmMTQ3ZjRhY2IxODk0OTM4ZGJhMTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKQEAgLTcxMyw2ICs3MTMsNyBAQCBydW50aW1lL0Jvb2xlYW5Db25zdHJ1
Y3Rvci5jcHAKIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAKIHJ1bnRpbWUvQm9vbGVhblByb3Rv
dHlwZS5jcHAKIHJ1bnRpbWUvQ2FsbERhdGEuY3BwCitydW50aW1lL0NhY2hlZFR5cGVzLmNwcAog
cnVudGltZS9DYXRjaFNjb3BlLmNwcAogcnVudGltZS9DbGFzc0luZm8uY3BwCiBydW50aW1lL0Ns
b25lZEFyZ3VtZW50cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1
aWx0aW5OYW1lcy5jcHAKaW5kZXggNDVkZTgyZTdjYjU4YTI4M2IyMGZjYWU1OTgyYmJiNWMwNGRh
OTE3NS4uYTBmODUzYTZlMDVkYzQ2MThmZjA0ZGU1OTAxOWIxZWExM2Q2YjM3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKQEAgLTYzLDYg
KzYzLDcgQEAgQnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMoVk0qIHZtLCBDb21tb25JZGVudGlm
aWVycyogY29tbW9uSWRlbnRpZmllcnMpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJ
RVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZ
KQogICAgIEpTQ19GT1JFQUNIX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShJTklUSUFMSVpFX1BVQkxJ
Q19UT19QUklWQVRFX0VOVFJZKQogICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19F
QUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKKyAg
ICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9XRUxMX0tOT1dOX1NZTUJPTChJ
TklUSUFMSVpFX1NZTUJPTF9QUklWQVRFX1RPX1BVQkxJQ19FTlRSWSkKICAgICBKU0NfQ09NTU9O
X1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9XRUxMX0tOT1dOX1NZTUJPTChJTklUSUFMSVpFX1NZ
TUJPTF9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKICAgICBtX3ByaXZhdGVUb1B1YmxpY01hcC5h
ZGQobV9kb2xsYXJWTVByaXZhdGVOYW1lLmltcGwoKSwgJm1fZG9sbGFyVk1OYW1lKTsKICAgICBt
X3B1YmxpY1RvUHJpdmF0ZU1hcC5hZGQobV9kb2xsYXJWTU5hbWUuaW1wbCgpLCAmbV9kb2xsYXJW
TVByaXZhdGVOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuaAppbmRleCBmNjZiOGNiNTFlYjQwMmQ4NzM2ZmQ3ZGQwZDJkMGU3YTI5MmY0NTEyLi44
NTMxZGIyNjBiZDA3MDFiMzcxOTAxYjY3NGJmZjVkZjBiZmJkODc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0yMTMsNiArMjEzLDcgQEAg
ZXh0ZXJuIFN5bWJvbEltcGw6OlN0YXRpY1N5bWJvbEltcGwgcG9seVByb3RvUHJpdmF0ZU5hbWU7
CiAvLyBXZSBjb21tYW5kZWVyIHRoZSBwdWJsaWNUb1ByaXZhdGVNYXAgdG8gYWxsb3cgdXMgdG8g
Y29udmVydCBwcml2YXRlIHN5bWJvbCBuYW1lcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzeW1ib2wu
CiAvLyBlLmcuIEBpdGVyYXRvclN5bWJvbCBwb2ludHMgdG8gU3ltYm9sLml0ZXJhdG9yIGluIHRo
aXMgbWFwIHJhdGhlciB0aGFuIHRvIGEgYW4gYWN0dWFsIHByaXZhdGUgbmFtZS4KIC8vIEZJWE1F
OiBUaGlzIGlzIGEgd2VpcmQgaGFjayBhbmQgd2Ugc2hvdWxkbid0IG5lZWQgdG8gZG8gdGhpcy4K
KyNkZWZpbmUgSU5JVElBTElaRV9TWU1CT0xfUFJJVkFURV9UT19QVUJMSUNfRU5UUlkobmFtZSkg
bV9wcml2YXRlVG9QdWJsaWNNYXAuYWRkKG1fIyNuYW1lIyNTeW1ib2wuaW1wbCgpLCAmbV8jI25h
bWUjI1N5bWJvbFByaXZhdGVJZGVudGlmaWVyKTsKICNkZWZpbmUgSU5JVElBTElaRV9TWU1CT0xf
UFVCTElDX1RPX1BSSVZBVEVfRU5UUlkobmFtZSkgbV9wdWJsaWNUb1ByaXZhdGVNYXAuYWRkKG1f
IyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllci5pbXBsKCksICZtXyMjbmFtZSMjU3ltYm9s
KTsKIAogY2xhc3MgQnVpbHRpbk5hbWVzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKaW5kZXggM2Y0NWE0MTc1YTFkYmU2Y2Q2ODMxNDE3NWJmYTlkODMz
MGZiZTMxNS4uODllOWQ1NTU3MmFkM2I3N2RkMWU4ZTRmNzA4NTY3YmM0YmU2YTgzNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTg2OSw3ICs4
NjksNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0m
IHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRz
KQordm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYg
dm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cykK
IHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IGE2OTI2ZmRmOTdlYjRlNmM2
ZmNkMGViMjc2ZjgwNTMxOWJhMGJmZTQuLmM3NDhmYzA3YzI3MTEzODlmMjcwMzQ1NGMyMjZlNWM3
Y2I4MWMwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
QEAgLTg5MCw3ICs4OTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0
aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCi0gICAg
dm9pZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBWZWN0b3I8
Q29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKTsKKyAgICB2b2lkIHNldENv
bnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNvbnN0IFZlY3RvcjxDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVn
aXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNv
bnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSGFuZGxlckluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5k
bGVySW5mby5oCmluZGV4IDY2YzNiNzY4Nzc1NjIwNzc2ZDI2M2ZmMDk4ZGU2ZjQ2YjY2ZTc3ODMu
LjdmNDY1ZDJhZTkzNzk5YjkxZGY3ODcxNDE5NGZjYTM0YmQyYTFhMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCkBAIC04OSw2ICs4OSwxMCBAQCBz
dHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKIH07CiAKIHN0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZv
IDogcHVibGljIEhhbmRsZXJJbmZvQmFzZSB7CisgICAgVW5saW5rZWRIYW5kbGVySW5mbygpCisg
ICAgeworICAgIH0KKwogICAgIFVubGlua2VkSGFuZGxlckluZm8odWludDMyX3Qgc3RhcnQsIHVp
bnQzMl90IGVuZCwgdWludDMyX3QgdGFyZ2V0LCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSkKICAg
ICB7CiAgICAgICAgIHRoaXMtPnN0YXJ0ID0gc3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCmluZGV4IDcwZWRlM2U0MWM1ZDVj
NDg5ZDc5NmZjZmMwYzFjY2Q5OThkMjllZDUuLmI0MDQ4MGE1ZTc5NThkZjBhNDE3ZmYxMjIwMGNk
OTU1ZWQwMDJhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bnN0cnVjdGlvblN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bnN0cnVjdGlvblN0cmVhbS5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIEluc3RydWN0aW9uU3Ry
ZWFtIHsKICAgICB1c2luZyBJbnN0cnVjdGlvbkJ1ZmZlciA9IFZlY3Rvcjx1aW50OF90LCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz47CiAKICAgICBmcmllbmQgY2xhc3MgSW5zdHJ1Y3Rpb25TdHJl
YW1Xcml0ZXI7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZEluc3RydWN0aW9uU3RyZWFtOwogcHVi
bGljOgogICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IGYwZTlkNjRj
ODU0YTNmNTM2NzUyZDQ4NzQ2OTJkMjc4NzdkNjcwNDkuLjE0OGE1MzUyMWZhNzYyYzI1N2E2NTJi
YmUzZDNjMTI4NGI2Njg2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC02NSwxMiArNjUsMTUgQEAgY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwog
c3RydWN0IEV4ZWN1dGFibGVJbmZvOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOworCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFs
dWVQcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKIHR5cGVk
ZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNp
Z25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBV
bmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcgQ29uc3RhbnRJbmRlbnRpZmllclNldEVu
dHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKK3VzaW5nIENvbnN0YW50
SWRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsK
IAogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9j
YXRpb24gewpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6T3RoZXIpOwotICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0
YW50SW5kZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgICAgICBtX2NvbnN0YW50
SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVz
dWx0KSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKQEAgLTIwMiw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XTsKICAgICB9CiAgICAgY29uc3Qg
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVu
dGlmaWVyU2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25z
dGFudElkZW50aWZpZXJTZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmll
clNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJ
ZGVudGlmaWVyU2V0czsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KQEAg
LTM2Nyw2ICszNzAsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2Rl
QmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBE
ZWJ1Z2dlck1vZGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAg
ICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3RydWN0dXJlKiwgY29uc3QgQ2FjaGVkQ29k
ZUJsb2NrPENvZGVCbG9ja1R5cGU+Jik7CisKICAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKIAog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtMzc4LDYgKzM4NSw5IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CiAgICAgZnJpZW5kIGNsYXNz
IEJ5dGVjb2RlR2VuZXJhdG9yOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOworCiAgICAgdm9pZCBhcHBseU1v
ZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiwgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImKTsK
IAogICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpCkBAIC00NDQsNyArNDU0LDcg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKICAgICBW
ZWN0b3I8Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKLSAgICBWZWN0b3I8Q29uc3RhbnRJbmRlbnRp
ZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CisgICAgVmVjdG9yPENvbnN0
YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CiAgICAgVmVj
dG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247CiAgICAgdHlwZWRlZiBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPj4gRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOwogICAgIEZ1bmN0aW9uRXhw
cmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRGVjbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKaW5kZXggOTk4N2I0MzEz
MzQzYjZjYjc1MmE0MjBiMzU4ZDlhMzYwMzE3MmYyNi4uMmYzMjM3OWEwMWY0MzVjM2QwMThkZjY1
MTkzNWEyZTJiMDNjZDAxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FjaGVkRXZhbENvZGVCbG9jazsKKwogY2xhc3MgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CkBAIC01
OSwxMSArNjEsMTUgQEAgcHVibGljOgogICAgICAgICBtX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRh
dGVzID0gV1RGTW92ZShmdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7CiAgICAgfQogcHJpdmF0
ZToKKyAgICBmcmllbmQgQ2FjaGVkRXZhbENvZGVCbG9jazsKKwogICAgIFVubGlua2VkRXZhbENv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KIAor
ICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkRXZhbENvZGVC
bG9jayYpOworCiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5o
CmluZGV4IGI1NDgyYjY1YzhiOGVmYjNhYTMwNmE0MTNiZDU0NjAzNDkxYTkwMTMuLjY1YWFmYzg4
ZTU5N2NiMjBmNDlmZDMyNzJiZGUxNWExMGRjYmRkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaApA
QCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FjaGVkRnVuY3Rp
b25Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sgZmluYWwgOiBw
dWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRD
b2RlQmxvY2sgQmFzZTsKQEAgLTQ0LDEwICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVkRnVuY3Rp
b25Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KKwor
ICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZEZ1bmN0
aW9uQ29kZUJsb2NrJik7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90bykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggNTI2ODk4Yzk1MWQ4MjE3NTk3OTg4
MTEwMmY5ZGM3ZDYxNWIwMTUyMi4uNjUyNmNkOTBjYmJhYTY5ZTI2Y2MwYTFjMGFjNzdiNjhjMTk1
ZmI1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTM5LDExICszOSwxMyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKIGNsYXNzIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
OwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBT
b3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CitjbGFzcyBD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAKIGVudW0gVW5saW5rZWRGdW5jdGlvbktpbmQgewog
ICAgIFVubGlua2VkTm9ybWFsRnVuY3Rpb24sCkBAIC01NCw2ICs1Niw3IEBAIGNsYXNzIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKICAgICBmcmllbmQgY2xhc3MgVk07CisgICAgZnJp
ZW5kIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpAQCAtMTQ3LDYgKzE1MCw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVj
dHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2Vk
RnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIFZhcmlh
YmxlRW52aXJvbm1lbnQmLCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGlu
RGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KERlY29kZXImLCBWYXJpYWJsZUVudmlyb25tZW50JiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlJik7CiAKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9mZnNldDsKICAgICB1bnNpZ25l
ZCBtX2xpbmVDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKaW5kZXggMzQzODYyZTY0NzBmZTFiMWE0MjQ4
NWQ4NzY5ZTI3N2Q3MmMxNTA4ZS4uM2QwNDJlZjQ4NmM3ZDEyY2FmMGQzMmQ2MDJlMTZmYjIxMmY2
ZTA3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
R2xvYmFsQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKQEAgLTM4LDYgKzM4LDEyIEBAIHByb3RlY3RlZDoKICAg
ICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUp
CiAgICAgewogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cisg
ICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPiYgY2FjaGVkQ29k
ZUJsb2NrKQorICAgICAgICA6IEJhc2UoZGVjb2Rlciwgc3RydWN0dXJlLCBjYWNoZWRDb2RlQmxv
Y2spCisgICAgeworICAgIH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAppbmRleCAzZTNlOGRmYjRkNWJi
YzQ2NGY1ZTZhMjM0NGNhYWNhOTk0OTQ5ZWYxLi5mOTQ3MDdlM2IxODVkNzcxNmI0MTZhNDkzM2Vj
YTZjOTUxYTRkNWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNzIE1ldGFk
YXRhVGFibGU7CiBjbGFzcyBVbmxpbmtlZE1ldGFkYXRhVGFibGUgewogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1ldGFkYXRhVGFibGU7
CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZE1ldGFkYXRhVGFibGU7CiAKIHB1YmxpYzoKICAgICBz
dHJ1Y3QgTGlua2luZ0RhdGEgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCmluZGV4IDBl
OWM1ZjViZGRlNmM3NTYyYjY2YTAzYmMwYTk4Yzg3YWRiZDkzMDIuLjM5MzNiZmQzZTNhZTI0ZTZm
NjRmNWUwYTlkOWQxMTkwMjEzMDA2ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgK
QEAgLTI5LDYgKzI5LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIERlY29kZXI7Citj
bGFzcyBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwpAQCAtNzQsMTEg
Kzc3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIENhY2hlZE1v
ZHVsZUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIE1v
ZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCisgICAgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRNb2R1bGVDb2Rl
QmxvY2smKTsKKwogICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwogCiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgKaW5kZXgg
YWZlMjZhZWQxYTUwM2FiMjNmZDhmNDQ3ZjlkZWMyZGMwNmNhNTgyNi4uNzY4NDRhMzdhNDExOTUy
ZWVkYWJhNDVjNzgyZGRmNTU1M2IwY2RmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaApAQCAtMjksNiAr
MjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9j
azsKKwogY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrIEJhc2U7CkBAIC01MCwxMSArNTIsMTUgQEAgcHVibGljOgogICAgIGNvbnN0IFZh
cmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxEZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X2xleGljYWxEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVkUHJv
Z3JhbUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJN
b2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEdsb2JhbENv
ZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQogCisgICAgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrJik7CisK
ICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25zOwogICAgIFZhcmlhYmxl
RW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBhZDY1MzYxOGI0Mjhm
Y2EwNmJlMDRkZGI2NmMwZjNkMzFkMmIyNjRjLi44ZTgyNTYwMjhiMTAzN2RiMmIzMDdhY2QxN2Qw
NWI3ZjM1OGY0N2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVD
bG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAppbmRleCBiNDY3MzA3ODVkYTE5OWMyZTIwZjVhMGRiYzVkZjYzMjQxMTIzNjBmLi45MWJhMzNi
MzM5NzAyYmMzZTk2YjcyYWM3ZDg4Yzk4ZDIzYjAwOGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRl
ICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUNh
Y2hlLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkNvbmZpZ0ZpbGUuaCIK
ICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKQEAgLTE5ODYsOCArMTk4NywxMSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFpbE5leHROZXdDb2RlQmxvY2soRXhlY1N0
YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSop
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICB2bS5jb2RlQ2FjaGUoKS0+d3Jp
dGUodm0pOworCiAgICAganNjRXhpdChFWElUX1NVQ0NFU1MpOwogCiAjaWYgQ09NUElMRVIoTVNW
QykKQEAgLTI4NTYsNiArMjg2MCw4IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9w
dGlvbnMsIGJvb2wgaXNXb3JrZXIsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAjZW5kaWYKICAgICB9CiAK
KyAgICB2bS5jb2RlQ2FjaGUoKS0+d3JpdGUodm0pOworCiAgICAgaWYgKGlzV29ya2VyKSB7CiAg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgICAgICAvLyBUaGlzIGlzIG5lZWRl
ZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIHdvcmtlcidzIG1haW4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgKaW5kZXggMzEzY2ZhNDVhYWY5MjJiMDdiMDQ1YmJl
ZTAzNjM4NTljYmQ0YzA5Yi4uYzk2YTI0YWRmMTYyNjExMzc4OWU1NTQ2NmE0OWFmNmJkM2Q4ZDk0
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgKQEAgLTMzLDYg
KzMzLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU291cmNlQ29kZSA6IHB1Ymxp
YyBVbmxpbmtlZFNvdXJjZUNvZGUgeworICAgICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU291cmNl
Q29kZTsKKwogICAgIHB1YmxpYzoKICAgICAgICAgU291cmNlQ29kZSgpCiAgICAgICAgICAgICA6
IFVubGlua2VkU291cmNlQ29kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZUNvZGVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZUtleS5oCmluZGV4IGE4ZTYwM2MyNmEwYjYwMzYyYTAyZGVhYzA1MTYxNjlkNTc1NTgw
MjEuLmNjM2FiZTIxZmFmNTcxNGJmOTk4MDFkZmI5ZWVkNDI4MzQ4MWYxODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCkBAIC0zNyw2ICszNyw4IEBA
IGVudW0gY2xhc3MgVHlwZVByb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMgfTsKIGVudW0gY2xhc3Mg
Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQgeyBObywgWWVzIH07CiAKIGNsYXNzIFNvdXJjZUNv
ZGVGbGFncyB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFNvdXJjZUNvZGVLZXk7CisKIHB1Ymxp
YzoKICAgICBTb3VyY2VDb2RlRmxhZ3MoKSA9IGRlZmF1bHQ7CiAKQEAgLTcwLDYgKzcyLDggQEAg
cHJpdmF0ZToKIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVLZXkgeworICAgIGZyaWVuZCBjbGFzcyBD
YWNoZWRTb3VyY2VDb2RlS2V5OworCiBwdWJsaWM6CiAgICAgU291cmNlQ29kZUtleSgpCiAgICAg
ewpAQCAtMTE0LDYgKzExOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAmJiBzdHJpbmcoKSA9
PSBvdGhlci5zdHJpbmcoKTsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU291
cmNlQ29kZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorCiAgICAgc3RydWN0IEhhc2ggewogICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU291cmNlQ29kZUtleSYgYSwgY29u
c3QgU291cmNlQ29kZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAppbmRleCA2ZWM1OTBiNTNl
NmM5YzMyN2U0MjQ0ZDBiMTE5YjM2ZDA5NmZjODFlLi5hYWFhZDNmNDEyZjhmM2ZhNWJjMWYyZmVi
ZmIxNGNjNzRkZTIyNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1VubGlua2VkU291cmNlQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
VW5saW5rZWRTb3VyY2VDb2RlLmgKQEAgLTM1LDYgKzM1LDkgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgVW5saW5rZWRTb3VyY2VDb2RlIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgU291cmNlVHlwZT4KKyAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hlZFVubGlua2VkU291cmNl
Q29kZVNoYXBlOworCiAgICAgcHVibGljOgogICAgICAgICBVbmxpbmtlZFNvdXJjZUNvZGUoKQog
ICAgICAgICAgICAgOiBtX3Byb3ZpZGVyKDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCmluZGV4IDEyOWI1ZWE2YmQ5YjcyNmExZDlh
NDAxMWVmOTY5MGY4Y2M2YjBkZDMuLmQ4NGIyZTFmYjIxOGVjNDljZDk1ZTViZDg1ZGM3NjUwY2Zh
NjA5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVF
bnZpcm9ubWVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVF
bnZpcm9ubWVudC5oCkBAIC0xMTYsNiArMTE2LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNFdmVy
eXRoaW5nQ2FwdHVyZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkOyB9
CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ7
CisKICAgICBNYXAgbV9tYXA7CiAgICAgYm9vbCBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkIHsgZmFs
c2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmFjZDYxY2M5MmViYzAwZjNjM2QwMmIwZTFlNjliNTZlNDUzZWU3Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcApAQCAtMCwwICsxLDIwMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkVHlw
ZXMuaCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2luY2x1ZGUg
IkpTQ2FzdC5oIgorI2luY2x1ZGUgIkpTSW1tdXRhYmxlQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAi
SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNU
YWJsZS5oIgorI2luY2x1ZGUgIlNvdXJjZUNvZGVLZXkuaCIKKyNpbmNsdWRlICJVbmxpbmtlZEV2
YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgorI2luY2x1ZGUgIlVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgPSB2b2lkPgorc3RydWN0IFNvdXJjZVR5cGVJbXBsIHsKKyAgICB1c2lu
ZyB0eXBlID0gVDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgU291cmNlVHlw
ZUltcGw8VCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19mdW5kYW1lbnRhbDxUPjo6dmFsdWUg
JiYgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjpTb3VyY2VUeXBlXywgdm9pZD46OnZhbHVlPj4g
eworICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBUOjpTb3VyY2VUeXBlXzsKKworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3VzaW5nIFNvdXJjZVR5cGUgPSB0eXBlbmFtZSBTb3VyY2VUeXBl
SW1wbDxUPjo6dHlwZTsKKworY2xhc3MgRW5jb2RlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRW5jb2Rlcik7CisgICAgV1RGX0ZPUkJJRF9IRUFQX0FMTE9DQVRJT047CisKK3B1YmxpYzoK
KyAgICBjbGFzcyBBbGxvY2F0aW9uIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEVuY29kZXI7CisK
KyAgICBwdWJsaWM6CisgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyOyB9CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQWxsb2NhdGlvbih1aW50OF90KiBidWZm
ZXIsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAg
ICAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAgICAgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworICAg
IH07CisKKyAgICBFbmNvZGVyKFZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAs
IG1fYmFzZU9mZnNldCgwKQorICAgICAgICAsIG1fY3VycmVudFBhZ2UobnVsbHB0cikKKyAgICB7
CisgICAgICAgIGFsbG9jYXRlTmV3UGFnZSgpOworICAgIH0KKworICAgIFZNJiB2bSgpIHsgcmV0
dXJuIG1fdm07IH0KKworICAgIEFsbG9jYXRpb24gbWFsbG9jKHVuc2lnbmVkIHNpemUpCisgICAg
eworICAgICAgICBBU1NFUlQoc2l6ZSk7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQ7CisgICAg
ICAgIGlmIChtX2N1cnJlbnRQYWdlLT5tYWxsb2Moc2l6ZSwgb2Zmc2V0KSkKKyAgICAgICAgICAg
IHJldHVybiBBbGxvY2F0aW9uIHsgbV9jdXJyZW50UGFnZS0+YnVmZmVyKCkgKyBvZmZzZXQsIG1f
YmFzZU9mZnNldCArIG9mZnNldCB9OworICAgICAgICBhbGxvY2F0ZU5ld1BhZ2Uoc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBUKiBtYWxsb2MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VCo+KG1hbGxvYyhzaXplb2YoVCkpLmJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0T2YoY29uc3Qgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIHB0cmRp
ZmZfdCBvZmZzZXQ7CisgICAgICAgIHB0cmRpZmZfdCBiYXNlT2Zmc2V0ID0gMDsKKyAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBwYWdlIDogbV9wYWdlcykgeworICAgICAgICAgICAgaWYgKHBhZ2Uu
Z2V0T2Zmc2V0KGFkZHJlc3MsIG9mZnNldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VP
ZmZzZXQgKyBvZmZzZXQ7CisgICAgICAgICAgICBiYXNlT2Zmc2V0ICs9IHBhZ2Uuc2l6ZSgpOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgY2FjaGVQdHIoY29uc3Qgdm9pZCogcHRyLCBw
dHJkaWZmX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9wdHJUb09mZnNldE1hcC5hZGQocHRy
LCBvZmZzZXQpOworICAgIH0KKworICAgIFdURjo6T3B0aW9uYWw8cHRyZGlmZl90PiBvZmZzZXRG
b3JQdHIoY29uc3Qgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IG1fcHRyVG9P
ZmZzZXRNYXAuZmluZChwdHIpOworICAgICAgICBpZiAoaXQgPT0gbV9wdHJUb09mZnNldE1hcC5l
bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7
IGl0LT52YWx1ZSB9OworICAgIH0KKworICAgIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4s
IHNpemVfdD4gcmVsZWFzZSgpCisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYmFzZU9m
ZnNldCArIG1fY3VycmVudFBhZ2UtPnNpemUoKTsKKyAgICAgICAgTWFsbG9jUHRyPHVpbnQ4X3Q+
IGJ1ZmZlciA9IE1hbGxvY1B0cjx1aW50OF90Pjo6bWFsbG9jKHNpemUpOworICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSAwOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhZ2UgOiBtX3BhZ2Vz
KSB7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLmdldCgpICsgb2Zmc2V0LCBwYWdlLmJ1ZmZl
cigpLCBwYWdlLnNpemUoKSk7CisgICAgICAgICAgICBvZmZzZXQgKz0gcGFnZS5zaXplKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IHNpemUpOworICAgICAg
ICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZlciksIHNpemUgfTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgY2xhc3MgUGFnZSB7CisgICAgcHVibGljOgorICAgICAgICBQYWdlKHNpemVfdCBzaXplKQor
ICAgICAgICAgICAgOiBtX29mZnNldCgwKQorICAgICAgICAgICAgLCBtX2NhcGFjaXR5KHNpemUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVyID0gTWFsbG9jUHRyPHVpbnQ4X3Q+Ojpt
YWxsb2Moc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG1hbGxvYyhzaXplX3Qgc2l6
ZSwgcHRyZGlmZl90JiByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBhbGln
bm1lbnQgPSBzdGQ6Om1pbihhbGlnbm9mKHN0ZDo6bWF4X2FsaWduX3QpLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhzaXplKSkpOworICAgICAgICAgICAgcHRy
ZGlmZl90IG9mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIG1fb2Zm
c2V0KTsKKyAgICAgICAgICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25t
ZW50LCBzaXplKTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KG9mZnNldCAr
IHNpemUpID4gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIHJlc3VsdCA9IG9mZnNldDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0
ICsgc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
dWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7IH0KKyAgICAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fb2Zm
c2V0KTsgfQorCisgICAgICAgIGJvb2wgZ2V0T2Zmc2V0KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHB0
cmRpZmZfdCYgcmVzdWx0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCB1aW50
OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFkZHJlc3MpOworICAgICAg
ICAgICAgaWYgKGFkZHIgPj0gbV9idWZmZXIuZ2V0KCkgJiYgYWRkciA8IG1fYnVmZmVyLmdldCgp
ICsgbV9vZmZzZXQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRyIC0gbV9idWZmZXIu
Z2V0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IE1hbGxvY1B0cjx1aW50OF90PiBtX2J1ZmZlcjsKKyAgICAgICAgcHRyZGlmZl90IG1fb2Zmc2V0
OworICAgICAgICBzaXplX3QgbV9jYXBhY2l0eTsKKyAgICB9OworCisgICAgdm9pZCBhbGxvY2F0
ZU5ld1BhZ2Uoc2l6ZV90IHNpemUgPSAwKQorICAgIHsKKyAgICAgICAgc3RhdGljIHNpemVfdCBt
aW5QYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUoKTsKKyAgICAgICAgaWYgKG1fY3VycmVudFBhZ2Up
CisgICAgICAgICAgICBtX2Jhc2VPZmZzZXQgKz0gbV9jdXJyZW50UGFnZS0+c2l6ZSgpOworICAg
ICAgICBpZiAoc2l6ZSA8IG1pblBhZ2VTaXplKQorICAgICAgICAgICAgc2l6ZSA9IG1pblBhZ2VT
aXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKG1pblBhZ2VTaXplLCBzaXplKTsKKyAgICAgICAgbV9wYWdlcy5hcHBlbmQoUGFnZSB7
IHNpemUgfSk7CisgICAgICAgIG1fY3VycmVudFBhZ2UgPSAmbV9wYWdlcy5sYXN0KCk7CisgICAg
fQorCisgICAgVk0mIG1fdm07CisgICAgcHRyZGlmZl90IG1fYmFzZU9mZnNldDsKKyAgICBQYWdl
KiBtX2N1cnJlbnRQYWdlOworICAgIFZlY3RvcjxQYWdlPiBtX3BhZ2VzOworICAgIEhhc2hNYXA8
Y29uc3Qgdm9pZCosIHB0cmRpZmZfdD4gbV9wdHJUb09mZnNldE1hcDsKK307CisKK2NsYXNzIERl
Y29kZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlY29kZXIpOworICAgIFdURl9GT1JC
SURfSEVBUF9BTExPQ0FUSU9OOworCitwdWJsaWM6CisgICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0
IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3ZtKHZtKQorICAg
ICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYmFz
ZUFkZHJlc3MpKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyNlbmRp
ZgorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIH0KKworICAgIH5EZWNv
ZGVyKCkKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fZmluYWxpemVycykKKyAg
ICAgICAgICAgIHBhaXIudmFsdWUoKTsKKyAgICB9CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBt
X3ZtOyB9CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29uc3Qgdm9pZCogcHRyKQorICAgIHsK
KyAgICAgICAgY29uc3QgdWludDhfdCogYWRkciA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihwdHIpOworICAgICAgICBBU1NFUlQoYWRkciA+PSBtX2Jhc2VBZGRyZXNzICYmIGFkZHIgPCBt
X2Jhc2VBZGRyZXNzICsgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIGFkZHIgLSBtX2Jhc2VBZGRy
ZXNzOworICAgIH0KKworICAgIHZvaWQgY2FjaGVPZmZzZXQocHRyZGlmZl90IG9mZnNldCwgdm9p
ZCogcHRyKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRUb1B0ck1hcC5hZGQob2Zmc2V0LCBwdHIp
OworICAgIH0KKworICAgIFdURjo6T3B0aW9uYWw8dm9pZCo+IHB0ckZvck9mZnNldChwdHJkaWZm
X3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IG1fb2Zmc2V0VG9QdHJNYXAuZmlu
ZChvZmZzZXQpOworICAgICAgICBpZiAoaXQgPT0gbV9vZmZzZXRUb1B0ck1hcC5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IGl0LT52YWx1
ZSB9OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBh
ZGRGaW5hbGl6ZXIocHRyZGlmZl90IG9mZnNldCwgY29uc3QgRnVuY3RvciYgZm4pCisgICAgewor
ICAgICAgICBtX2ZpbmFsaXplcnMuYWRkKG9mZnNldCwgZm4pOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWTSYgbV92bTsKKyAgICBjb25zdCB1aW50OF90KiBtX2Jhc2VBZGRyZXNzOworI2lmbmRl
ZiBOREVCVUcKKyAgICBzaXplX3QgbV9zaXplOworI2VuZGlmCisgICAgSGFzaE1hcDxwdHJkaWZm
X3QsIHZvaWQqPiBtX29mZnNldFRvUHRyTWFwOworICAgIEhhc2hNYXA8cHRyZGlmZl90LCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4+IG1fZmluYWxpemVyczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxU
Pj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYsIFQmIGRzdCwgY29uc3QgU291cmNlVHlwZTxUPiYg
c3JjKQoreworICAgIGRzdCA9IHNyYzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRp
YyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVl
PiBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCYgZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+JiBz
cmMpCit7CisgICAgZHN0LmVuY29kZShlbmNvZGVyLCBzcmMpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVjb2RlKERlY29kZXImLCBjb25zdCBU
JiBzcmMsIFNvdXJjZVR5cGU8VD4mIGRzdCwgQXJncy4uLikKK3sKKyAgICBkc3QgPSBzcmM7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CitzdGF0aWMgc3RkOjpl
bmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIGNvbnN0IFQmIHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdz
Li4uIGFyZ3MpCit7CisgICAgc3JjLmRlY29kZShkZWNvZGVyLCBkc3QsIGFyZ3MuLi4pOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwgVD4gZGVjb2RlKERlY29kZXImLCBUIHNyYykK
K3sKKyAgICByZXR1cm4gc3JjOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0
ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWUsIFNv
dXJjZVR5cGU8VD4+JiYgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIGNvbnN0IFQmIHNyYykKK3sK
KyAgICByZXR1cm4gc3JjLmRlY29kZShkZWNvZGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
U291cmNlPgorY2xhc3MgQ2FjaGVkT2JqZWN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
YWNoZWRPYmplY3Q8U291cmNlPik7CisgICAgV1RGX0ZPUkJJRF9IRUFQX0FMTE9DQVRJT047CisK
K3B1YmxpYzoKKyAgICB1c2luZyBTb3VyY2VUeXBlXyA9IFNvdXJjZTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFNvdXJjZT4KK2NsYXNzIFZhcmlhYmxlTGVuZ3RoT2JqZWN0IDogcHVibGljIENh
Y2hlZE9iamVjdDxTb3VyY2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+Cisg
ICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRQdHI7CisKK3Byb3RlY3RlZDoKKyAgICBjb25zdCB1aW50
OF90KiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IHNf
aW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPih0aGlzKSArIG1fb2Zmc2V0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgY29uc3QgVCogYnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihidWZmZXIoKSk7CisgICAgfQorCisgICAgdWludDhf
dCogYWxsb2NhdGUoRW5jb2RlciYgZW5jb2Rlciwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAg
ICBpZiAoIXNpemUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0T2Zmc2V0ID0gZW5jb2Rlci5vZmZzZXRPZigmbV9vZmZzZXQpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGVuY29kZXIubWFsbG9jKHNpemUpOworICAgICAgICBtX29mZnNldCA9
IHJlc3VsdC5vZmZzZXQoKSAtIG9mZnNldE9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5i
dWZmZXIoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFsbG9j
YXRlKEVuY29kZXImIGVuY29kZXIsIHVuc2lnbmVkIHNpemUgPSAxKQorICAgIHsKKyAgICAgICAg
dWludDhfdCogcmVzdWx0ID0gYWxsb2NhdGUoZW5jb2Rlciwgc2l6ZW9mKFQpICogc2l6ZSk7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZXN1bHQpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBjb25zdGV4cHIgc3RhdGljIHB0cmRpZmZfdCBzX2ludmFsaWRPZmZzZXQgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHB0cmRpZmZfdD46Om1heCgpOworCisgICAgcHRyZGlmZl90IG1f
b2Zmc2V0IHsgc19pbnZhbGlkT2Zmc2V0IH07CisKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFNvdXJjZSA9IFNvdXJjZVR5cGU8VD4+CitjbGFzcyBDYWNoZWRQdHIgOiBwdWJs
aWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U291cmNlKj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCB0eXBlbmFtZT4KKyAgICBmcmllbmQgc3RydWN0IENhY2hlZFJlZlB0cjsKKworcHVibGljOgor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZSogc3JjKQorICAg
IHsKKyAgICAgICAgbV9pc0VtcHR5ID0gIXNyYzsKKyAgICAgICAgaWYgKG1faXNFbXB0eSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+
IG9mZnNldCA9IGVuY29kZXIub2Zmc2V0Rm9yUHRyKHNyYykpIHsKKyAgICAgICAgICAgIHRoaXMt
Pm1fb2Zmc2V0ID0gKm9mZnNldCAtIGVuY29kZXIub2Zmc2V0T2YoJnRoaXMtPm1fb2Zmc2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFQqIGNhY2hlZE9iamVj
dCA9IHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIpOworICAgICAgICBjYWNoZWRP
YmplY3QtPmVuY29kZShlbmNvZGVyLCAqc3JjKTsKKyAgICAgICAgZW5jb2Rlci5jYWNoZVB0cihz
cmMsIGVuY29kZXIub2Zmc2V0T2YoY2FjaGVkT2JqZWN0KSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBTb3VyY2UqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9pc0VtcHR5KQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcHRyZGlmZl90IGJ1ZmZlck9mZnNl
dCA9IGRlY29kZXIub2Zmc2V0T2YodGhpcy0+YnVmZmVyKCkpOworICAgICAgICBpZiAoV1RGOjpP
cHRpb25hbDx2b2lkKj4gcHRyID0gZGVjb2Rlci5wdHJGb3JPZmZzZXQoYnVmZmVyT2Zmc2V0KSkK
KyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNvdXJjZSo+KCpwdHIpOworCisg
ICAgICAgIFNvdXJjZSogcHRyID0gZ2V0KCktPmRlY29kZShkZWNvZGVyLCBhcmdzLi4uKTsKKyAg
ICAgICAgZGVjb2Rlci5jYWNoZU9mZnNldChidWZmZXJPZmZzZXQsIHB0cik7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgY29uc3QgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIGdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVCogZ2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChtX2lzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgIH0KKworICAgIGJv
b2wgbV9pc0VtcHR5OworCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTb3Vy
Y2UgPSBTb3VyY2VUeXBlPFQ+PgorY2xhc3MgQ2FjaGVkUmVmUHRyIDogcHVibGljIENhY2hlZE9i
amVjdDxSZWZQdHI8U291cmNlPj4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFNvdXJjZSogc3JjKQorICAgIHsKKyAgICAgICAgbV9wdHIuZW5jb2Rl
KGVuY29kZXIsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgUmVmUHRyPFNvdXJjZT4gc3JjKQorICAgIHsKKyAgICAgICAgZW5jb2RlKGVuY29k
ZXIsIHNyYy5nZXQoKSk7CisgICAgfQorCisgICAgUmVmUHRyPFNvdXJjZT4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTb3VyY2UqIGRlY29kZWRQdHIgPSBt
X3B0ci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmICghZGVjb2RlZFB0cikKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICBkZWNvZGVyLmFkZEZpbmFsaXplcihkZWNvZGVy
Lm9mZnNldE9mKG1fcHRyLmJ1ZmZlcigpKSwgWz1dIHsgZGVyZWZJZk5vdE51bGwoZGVjb2RlZFB0
cik7IH0pOworICAgICAgICByZWZJZk5vdE51bGwoZGVjb2RlZFB0cik7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihkZWNvZGVkUHRyKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBSZWZQdHI8U291cmNlPiYgc3JjKSBjb25zdAorICAgIHsKKyAgICAgICAgc3Jj
ID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRQdHI8VCwg
U291cmNlPiBtX3B0cjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJj
ZSA9IFNvdXJjZVR5cGU8VD4+CitjbGFzcyBDYWNoZWRXcml0ZUJhcnJpZXIgOiBwdWJsaWMgQ2Fj
aGVkT2JqZWN0PFdyaXRlQmFycmllcjxTb3VyY2U+PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV3JpdGVCYXJyaWVyPFNvdXJjZT4gc3JjKQorICAg
IHsKKyAgICAgICAgbV9wdHIuZW5jb2RlKGVuY29kZXIsIHNyYy5nZXQoKSk7CisgICAgfQorCisg
ICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV3JpdGVCYXJyaWVyPFNvdXJjZT4mIHNy
YywgY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZSogZGVj
b2RlZFB0ciA9IG1fcHRyLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKGRlY29kZWRQdHIp
CisgICAgICAgICAgICBzcmMuc2V0KGRlY29kZXIudm0oKSwgb3duZXIsIGRlY29kZWRQdHIpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRQdHI8VCwgU291cmNlPiBtX3B0cjsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBJbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciA9IENyYXNoT25PdmVyZmxvdz4KK2NsYXNzIENhY2hlZFZlY3RvciA6
IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxWZWN0b3I8U291cmNlVHlwZTxUPiwgSW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8U291cmNlVHlwZTxUPiwgSW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlcj4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIG1fc2l6ZSA9IHZl
Y3Rvci5zaXplKCk7CisgICAgICAgIFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRl
PFQ+KGVuY29kZXIsIG1fc2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3NpemU7ICsraSkKKyAgICAgICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgYnVmZmVyW2ld
LCB2ZWN0b3JbaV0pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFNvdXJjZVR5cGU8VD4sIElu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiB2ZWN0b3IsIEFyZ3MuLi4gYXJncykgY29u
c3QKKyAgICB7CisgICAgICAgIHZlY3Rvci5yZXNpemVUb0ZpdChtX3NpemUpOworICAgICAgICBj
b25zdCBUKiBidWZmZXIgPSB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmRl
Y29kZShkZWNvZGVyLCBidWZmZXJbaV0sIHZlY3RvcltpXSwgYXJncy4uLik7CisgICAgfQorCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIG1fc2l6ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZp
cnN0LCB0eXBlbmFtZSBTZWNvbmQ+CitjbGFzcyBDYWNoZWRQYWlyIDogcHVibGljIENhY2hlZE9i
amVjdDxzdGQ6OnBhaXI8U291cmNlVHlwZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vjb25kPj4+IHsK
K3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnBh
aXI8U291cmNlVHlwZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vjb25kPj4mIHBhaXIpCisgICAgewor
ICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIG1fZmlyc3QsIHBhaXIuZmlyc3QpOworICAg
ICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIG1fc2Vjb25kLCBwYWlyLnNlY29uZCk7CisgICAg
fQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpwYWlyPFNvdXJjZVR5
cGU8Rmlyc3Q+LCBTb3VyY2VUeXBlPFNlY29uZD4+JiBwYWlyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBtX2ZpcnN0LCBwYWlyLmZpcnN0KTsKKyAgICAgICAg
OjpKU0M6OmRlY29kZShkZWNvZGVyLCBtX3NlY29uZCwgcGFpci5zZWNvbmQpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBGaXJzdCBtX2ZpcnN0OworICAgIFNlY29uZCBtX3NlY29uZDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hBcmcg
PSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxTb3VyY2VUeXBlPEtleT4+OjpIYXNoLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFNvdXJjZVR5cGU8S2V5Pj4sIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlwZTxWYWx1ZT4+PgorY2xhc3MgQ2FjaGVk
SGFzaE1hcCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxIYXNoTWFwPFNvdXJjZVR5cGU8
S2V5PiwgU291cmNlVHlwZTxWYWx1ZT4sIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+CisgICAgdXNp
bmcgTWFwID0gSGFzaE1hcDxLLCBWLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0
c0FyZz47CisKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPj4mIG1hcCkKKyAgICB7Cisg
ICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUobV9lbnRyaWVzKT4gZW50cmllc1ZlY3RvcihtYXAu
c2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgaXQgOiBtYXApCisgICAgICAgICAgICBlbnRyaWVzVmVjdG9yW2krK10gPSB7IGl0LmtleSwg
aXQudmFsdWUgfTsKKyAgICAgICAgbV9lbnRyaWVzLmVuY29kZShlbmNvZGVyLCBlbnRyaWVzVmVj
dG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBNYXA8U291
cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPj4mIG1hcCkgY29uc3QKKyAgICB7CisgICAg
ICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUobV9lbnRyaWVzKT4gZGVjb2RlZEVudHJpZXM7CisgICAg
ICAgIG1fZW50cmllcy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZEVudHJpZXMpOworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBkZWNvZGVkRW50cmllcykKKyAgICAgICAgICAgIG1hcC5z
ZXQocGFpci5maXJzdCwgcGFpci5zZWNvbmQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNo
ZWRWZWN0b3I8Q2FjaGVkUGFpcjxLZXksIFZhbHVlPj4gbV9lbnRyaWVzOworfTsKKworY2xhc3Mg
Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGwgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VW5p
cXVlZFN0cmluZ0ltcGw+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCisgICAgeworICAgICAgICBtX2lzQXRvbWlj
ID0gc3RyaW5nLmlzQXRvbWljKCk7CisgICAgICAgIG1faXNTeW1ib2wgPSBzdHJpbmcuaXNTeW1i
b2woKTsKKyAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IGNvbnN0X2Nhc3Q8U3RyaW5nSW1wbCo+
KCZzdHJpbmcpOworICAgICAgICBpZiAobV9pc1N5bWJvbCkgeworICAgICAgICAgICAgU3ltYm9s
SW1wbCogc3ltYm9sID0gc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCo+KGltcGwpOworICAgICAgICAg
ICAgaWYgKCFzeW1ib2wtPmlzTnVsbFN5bWJvbCgpKSB7CisgICAgICAgICAgICAgICAgSWRlbnRp
ZmllciB1aWQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZlbmNvZGVyLnZtKCksIHN5bWJvbCk7Cisg
ICAgICAgICAgICAgICAgaW1wbCA9IGVuY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQ
dWJsaWNOYW1lKHVpZCkuc3RyaW5nKCkuaW1wbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgbV9pczhCaXQgPSBpbXBsLT5pczhCaXQoKTsKKyAgICAgICAgbV9sZW5ndGgg
PSBpbXBsLT5sZW5ndGgoKTsKKworICAgICAgICBpZiAoIW1fbGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2xlbmd0aDsKKyAgICAgICAgY29u
c3Qgdm9pZCogcGF5bG9hZDsKKyAgICAgICAgaWYgKG1faXM4Qml0KQorICAgICAgICAgICAgcGF5
bG9hZCA9IGltcGwtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
cGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAgc2l6ZSAqPSAyOwor
ICAgICAgICB9CisKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5j
b2Rlciwgc2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIHBheWxvYWQsIHNpemUpOworICAg
IH0KKworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIGF1dG8gY3JlYXRlID0gWyZdKGNvbnN0IGF1dG8qIGJ1ZmZlcikg
LT4gVW5pcXVlZFN0cmluZ0ltcGwqIHsKKyAgICAgICAgICAgIGlmICghbV9pc1N5bWJvbCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nSW1wbDo6YWRkKGJ1ZmZlciwgbV9sZW5n
dGgpLmxlYWtSZWYoKTsKKworICAgICAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJlN5bWJvbEltcGw6OmNyZWF0ZU51bGxTeW1ib2woKS5sZWFrUmVmKCk7CisK
KyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZk
ZWNvZGVyLnZtKCksIGJ1ZmZlciwgbV9sZW5ndGgpOworICAgICAgICAgICAgU3RyaW5nIHN0ciA9
IGRlY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShpZGVudCktPnN0
cmluZygpOworICAgICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0ci5yZWxlYXNlSW1wbCgp
LmdldCgpOworICAgICAgICAgICAgQVNTRVJUKGltcGwtPmlzU3ltYm9sKCkpOworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oaW1wbCk7CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKG1faXM4Qml0KQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZSh0
aGlzLT5idWZmZXI8TENoYXI+KCkpOworICAgICAgICByZXR1cm4gY3JlYXRlKHRoaXMtPmJ1ZmZl
cjxVQ2hhcj4oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9pczhCaXQgOiAxOwor
ICAgIGJvb2wgbV9pc1N5bWJvbCA6IDE7CisgICAgYm9vbCBtX2lzQXRvbWljIDogMTsKKyAgICB1
bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK2NsYXNzIENhY2hlZFN0cmluZ0ltcGwgOiBwdWJsaWMg
VmFyaWFibGVMZW5ndGhPYmplY3Q8U3RyaW5nSW1wbD4geworcHVibGljOgorICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ0ltcGwmIGltcGwpCisgICAgeworICAg
ICAgICBtX3VuaXF1ZWRTdHJpbmdJbXBsLmVuY29kZShlbmNvZGVyLCBpbXBsKTsKKyAgICB9CisK
KyAgICBTdHJpbmdJbXBsKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3VuaXF1ZWRTdHJpbmdJbXBsLmRlY29kZShkZWNvZGVyKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkVW5pcXVlZFN0cmluZ0ltcGwgbV91bmlxdWVkU3RyaW5n
SW1wbDsKK307CisKK2NsYXNzIENhY2hlZFN0cmluZyA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9i
amVjdDxTdHJpbmc+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIG1faW1wbC5lbmNvZGUoZW5j
b2Rlciwgc3RhdGljX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmcuaW1wbCgpKSk7Cisg
ICAgfQorCisgICAgU3RyaW5nIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFN0cmluZyhzdGF0aWNfY2FzdDxSZWZQdHI8U3RyaW5nSW1wbD4+KG1f
aW1wbC5kZWNvZGUoZGVjb2RlcikpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBTdHJpbmcmIGRzdCkgY29uc3QKKyAgICB7CisgICAgICAgIGRzdCA9IGRlY29k
ZShkZWNvZGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkUmVmUHRyPENhY2hlZFVu
aXF1ZWRTdHJpbmdJbXBsPiBtX2ltcGw7Cit9OworCitjbGFzcyBDYWNoZWRJZGVudGlmaWVyIDog
cHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PElkZW50aWZpZXI+IHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQorICAgIHsKKyAgICAgICAgbV9zdHJpbmcuZW5jb2RlKGVuY29kZXIsIGlkZW50aWZpZXIuc3Ry
aW5nKCkpOworICAgIH0KKworICAgIElkZW50aWZpZXIgZGVjb2RlKERlY29kZXImIGRlY29kZXIp
IGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmcgc3RyID0gbV9zdHJpbmcuZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBpZiAoc3RyLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIElkZW50
aWZpZXIoKTsKKworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVVpZCgmZGVjb2Rlci52
bSgpLCAoVW5pcXVlZFN0cmluZ0ltcGwqKXN0ci5pbXBsKCkpOworICAgIH0KKworICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElkZW50aWZpZXImIGlkZW50KSBjb25zdAorICAgIHsK
KyAgICAgICAgaWRlbnQgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCitwcml2YXRlOgorICAg
IENhY2hlZFN0cmluZyBtX3N0cmluZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBDYWNoZWRPcHRpb25hbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxXVEY6Ok9wdGlv
bmFsPFNvdXJjZVR5cGU8VD4+PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgV1RGOjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiYgc291cmNlKQorICAg
IHsKKyAgICAgICAgbV9pc0VtcHR5ID0gIXNvdXJjZTsKKworICAgICAgICBpZiAobV9pc0VtcHR5
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRl
PFQ+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKnNvdXJjZSk7CisgICAgfQorCisgICAgV1RG
OjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX2lzRW1wdHkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIHJldHVybiB7IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpLT5k
ZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+JiBkc3QpIGNvbnN0CisgICAgeworICAg
ICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZVR5cGU8VD4+JiBzb3Vy
Y2UpCisgICAgeworICAgICAgICBpZiAoIXNvdXJjZSkKKyAgICAgICAgICAgIGVuY29kZShlbmNv
ZGVyLCBXVEY6Om51bGxvcHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmNvZGUoZW5j
b2RlciwgeyAqc291cmNlIH0pOworICAgIH0KKworICAgIFNvdXJjZVR5cGU8VD4qIGRlY29kZUFz
UHRyKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9pc0VtcHR5
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIHRoaXMtPnRl
bXBsYXRlIGJ1ZmZlcjxUPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgbV9pc0VtcHR5OworfTsKKworY2xhc3MgQ2FjaGVkU2ltcGxlSnVtcFRhYmxlIDog
cHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4geworcHVibGljOgor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiBqdW1wVGFibGUpCisgICAgeworICAgICAgICBtX21pbiA9IGp1bXBUYWJsZS5taW47
CisgICAgICAgIG1fYnJhbmNoT2Zmc2V0cy5lbmNvZGUoZW5jb2RlciwganVtcFRhYmxlLmJyYW5j
aE9mZnNldHMpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBq
dW1wVGFibGUubWluID0gbV9taW47CisgICAgICAgIG1fYnJhbmNoT2Zmc2V0cy5kZWNvZGUoZGVj
b2RlciwganVtcFRhYmxlLmJyYW5jaE9mZnNldHMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBp
bnQzMl90IG1fbWluOworICAgIENhY2hlZFZlY3RvcjxpbnQzMl90PiBtX2JyYW5jaE9mZnNldHM7
Cit9OworCitjbGFzcyBDYWNoZWRTdHJpbmdKdW1wVGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0
PFVubGlua2VkU3RyaW5nSnVtcFRhYmxlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSkK
KyAgICB7CisgICAgICAgIG1fb2Zmc2V0VGFibGUuZW5jb2RlKGVuY29kZXIsIGp1bXBUYWJsZS5v
ZmZzZXRUYWJsZSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QKKyAgICB7CisgICAgICAg
IG1fb2Zmc2V0VGFibGUuZGVjb2RlKGRlY29kZXIsIGp1bXBUYWJsZS5vZmZzZXRUYWJsZSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENhY2hlZFN0
cmluZ0ltcGw+LCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6IE9mZnNldExvY2F0aW9uPiBtX29m
ZnNldFRhYmxlOworfTsKKworY2xhc3MgQ2FjaGVkQ29kZUJsb2NrUmFyZURhdGEgOiBwdWJsaWMg
Q2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YT4geworcHVibGljOgorICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrOjpS
YXJlRGF0YSYgcmFyZURhdGEpCisgICAgeworICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmVu
Y29kZShlbmNvZGVyLCByYXJlRGF0YS5tX2V4Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICAgICAgbV9z
d2l0Y2hKdW1wVGFibGVzLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX3N3aXRjaEp1bXBUYWJs
ZXMpOworICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJh
cmVEYXRhLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgIG1fZXhwcmVzc2lvbklu
Zm9GYXRQb3NpdGlvbnMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fZXhwcmVzc2lvbkluZm9G
YXRQb3NpdGlvbnMpOworICAgICAgICBtX3R5cGVQcm9maWxlckluZm9NYXAuZW5jb2RlKGVuY29k
ZXIsIHJhcmVEYXRhLm1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAgIG1fb3BQcm9maWxl
Q29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fb3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOworICAgIH0KKworICAgIFVubGlua2Vk
Q29kZUJsb2NrOjpSYXJlRGF0YSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGEqIHJhcmVEYXRhID0gbmV3IFVu
bGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSB7IH07CisgICAgICAgIG1fZXhjZXB0aW9uSGFuZGxl
cnMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICAg
ICAgbV9zd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9zd2l0Y2hK
dW1wVGFibGVzKTsKKyAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNv
ZGVyLCByYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgbV9leHBy
ZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fZXhwcmVz
c2lvbkluZm9GYXRQb3NpdGlvbnMpOworICAgICAgICBtX3R5cGVQcm9maWxlckluZm9NYXAuZGVj
b2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXApOworICAgICAgICBt
X29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmRlY29kZShkZWNvZGVyLCByYXJl
RGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7CisgICAgICAgIHJl
dHVybiByYXJlRGF0YTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkVmVjdG9yPFVubGlu
a2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CisgICAgQ2FjaGVkVmVjdG9yPENh
Y2hlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIENhY2hlZFZlY3Rv
cjxDYWNoZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBD
YWNoZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lv
bkluZm9GYXRQb3NpdGlvbnM7CisgICAgQ2FjaGVkSGFzaE1hcDx1bnNpZ25lZCwgVW5saW5rZWRD
b2RlQmxvY2s6OlJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlwZVBy
b2ZpbGVySW5mb01hcDsKKyAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dD4gbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKK307CisKK2NsYXNzIENh
Y2hlZEJpdFZlY3RvciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxCaXRWZWN0b3I+IHsK
K3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBCaXRWZWN0
b3ImIGJpdFZlY3RvcikKKyAgICB7CisgICAgICAgIG1fc2l6ZSA9IGJpdFZlY3Rvci5zaXplKCk7
CisgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHRoaXMtPmFsbG9jYXRlKGVuY29kZXIsIG1fc2l6
ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGJpdFZlY3Rvci5iaXRzKCksIG1fc2l6ZSk7Cisg
ICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYsIEJpdFZlY3RvciYgYml0VmVjdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgYml0VmVjdG9yLmVuc3VyZVNpemUobV9zaXplKTsKKyAgICAg
ICAgbWVtY3B5KGJpdFZlY3Rvci5iaXRzKCksIHRoaXMtPmJ1ZmZlcigpLCBtX3NpemUpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3NpemU7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8VD46Okhhc2g+
CitjbGFzcyBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxIYXNoU2V0PFNvdXJj
ZVR5cGU8VD4sIEhhc2hBcmc+PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgSGFzaFNldDxTb3VyY2VUeXBlPFQ+LCBIYXNoQXJnPiYgc2V0KQorICAg
IHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBlbnRyaWVzVmVjdG9y
KHNldC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBpdGVtIDogc2V0KQorICAgICAgICAgICAgZW50cmllc1ZlY3RvcltpKytdID0gaXRl
bTsKKyAgICAgICAgbV9lbnRyaWVzLmVuY29kZShlbmNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoU2V0PFNvdXJjZVR5
cGU8VD4sIEhhc2hBcmc+JiBzZXQpIGNvbnN0CisgICAgeworICAgICAgICBTb3VyY2VUeXBlPGRl
Y2x0eXBlKG1fZW50cmllcyk+IGVudHJpZXNWZWN0b3I7CisgICAgICAgIG1fZW50cmllcy5kZWNv
ZGUoZGVjb2RlciwgZW50cmllc1ZlY3Rvcik7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRl
bSA6IGVudHJpZXNWZWN0b3IpCisgICAgICAgICAgICBzZXQuYWRkKGl0ZW0pOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0b3I8VD4gbV9lbnRyaWVzOworfTsKKworY2xhc3MgQ2Fj
aGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmpl
Y3Q8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSYgZW50
cnkpCisgICAgeworICAgICAgICBtX2NvbnN0YW50ID0gZW50cnkuc2Vjb25kOworICAgICAgICBt
X3NldC5lbmNvZGUoZW5jb2RlciwgZW50cnkuZmlyc3QpOworICAgIH0KKworICAgIHZvaWQgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBlbnRyeSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGVudHJ5LnNlY29uZCA9IG1fY29uc3RhbnQ7CisgICAgICAg
IG1fc2V0LmRlY29kZShkZWNvZGVyLCBlbnRyeS5maXJzdCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fY29uc3RhbnQ7CisgICAgQ2FjaGVkSGFzaFNldDxDYWNoZWRSZWZQdHI8
Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+LCBJZGVudGlmaWVyUmVwSGFzaD4gbV9zZXQ7Cit9Owor
CitjbGFzcyBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IDogcHVibGljIENhY2hlZE9iamVjdDxW
YXJpYWJsZUVudmlyb25tZW50PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52KQorICAgIHsKKyAgICAgICAg
bV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkOworICAg
ICAgICBtX21hcC5lbmNvZGUoZW5jb2RlciwgZW52Lm1fbWFwKTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpIGNvbnN0
CisgICAgeworICAgICAgICBlbnYubV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IG1faXNFdmVyeXRo
aW5nQ2FwdHVyZWQ7CisgICAgICAgIG1fbWFwLmRlY29kZShkZWNvZGVyLCBlbnYubV9tYXApOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7CisgICAg
Q2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+LCBWYXJp
YWJsZUVudmlyb25tZW50RW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0
cjxVbmlxdWVkU3RyaW5nSW1wbD4+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnlIYXNoVHJhaXRz
PiBtX21hcDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJjZSA9IFNv
dXJjZVR5cGU8VD4+CitjbGFzcyBDYWNoZWRBcnJheSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9i
amVjdDxTb3VyY2UqPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgU291cmNlKiBhcnJheSwgdW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIFQq
IGRzdCA9IHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIsIHNpemUpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6
OmVuY29kZShlbmNvZGVyLCBkc3RbaV0sIGFycmF5W2ldKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNv
dXJjZSogYXJyYXksIHVuc2lnbmVkIHNpemUsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpK
U0M6OmRlY29kZShkZWNvZGVyLCBidWZmZXJbaV0sIGFycmF5W2ldLCBhcmdzLi4uKTsKKyAgICB9
Cit9OworCitjbGFzcyBDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZSA6IHB1YmxpYyBDYWNoZWRP
YmplY3Q8U2NvcGVkQXJndW1lbnRzVGFibGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTY29wZWRBcmd1bWVudHNUYWJsZSYgc2NvcGVkQXJndW1l
bnRzVGFibGUpCisgICAgeworICAgICAgICBtX2xlbmd0aCA9IHNjb3BlZEFyZ3VtZW50c1RhYmxl
Lm1fbGVuZ3RoOworICAgICAgICBtX2FyZ3VtZW50cy5lbmNvZGUoZW5jb2Rlciwgc2NvcGVkQXJn
dW1lbnRzVGFibGUubV9hcmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKKyAgICB9CisKKyAgICBT
Y29wZWRBcmd1bWVudHNUYWJsZSogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1lbnRzVGFibGUgPSBT
Y29wZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSwgbV9sZW5ndGgpOworICAg
ICAgICBtX2FyZ3VtZW50cy5kZWNvZGUoZGVjb2Rlciwgc2NvcGVkQXJndW1lbnRzVGFibGUtPm1f
YXJndW1lbnRzLmdldCgpLCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBzY29wZWRBcmd1bWVu
dHNUYWJsZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAg
Q2FjaGVkQXJyYXk8U2NvcGVPZmZzZXQ+IG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgQ2FjaGVk
U3ltYm9sVGFibGVFbnRyeSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U3ltYm9sVGFibGVFbnRyeT4g
eworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTeW1ib2xUYWJsZUVu
dHJ5JiBzeW1ib2xUYWJsZUVudHJ5KQorICAgIHsKKyAgICAgICAgbV9iaXRzID0gc3ltYm9sVGFi
bGVFbnRyeS5tX2JpdHMgfCBTeW1ib2xUYWJsZUVudHJ5OjpTbGltRmxhZzsKKyAgICB9CisKKyAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiwgU3ltYm9sVGFibGVFbnRyeSYgc3ltYm9sVGFibGVFbnRy
eSkgY29uc3QKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlRW50cnkubV9iaXRzID0gbV9iaXRz
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnRwdHJfdCBtX2JpdHM7Cit9OworCitjbGFzcyBD
YWNoZWRTeW1ib2xUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U3ltYm9sVGFibGU+IHsKK3B1
YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUpCisgICAgeworICAgICAgICBBU1NFUlQoIXN5bWJvbFRhYmxlLm1fcmFy
ZURhdGEpOworICAgICAgICBtX21hcC5lbmNvZGUoZW5jb2Rlciwgc3ltYm9sVGFibGUubV9tYXAp
OworICAgICAgICBtX21heFNjb3BlT2Zmc2V0ID0gc3ltYm9sVGFibGUubV9tYXhTY29wZU9mZnNl
dDsKKyAgICAgICAgbV91c2VzTm9uU3RyaWN0RXZhbCA9IHN5bWJvbFRhYmxlLm1fdXNlc05vblN0
cmljdEV2YWw7CisgICAgICAgIG1fbmVzdGVkTGV4aWNhbFNjb3BlID0gc3ltYm9sVGFibGUubV9u
ZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAgICAgIG1fc2NvcGVUeXBlID0gc3ltYm9sVGFibGUubV9z
Y29wZVR5cGU7CisgICAgICAgIG1fYXJndW1lbnRzLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJs
ZS5tX2FyZ3VtZW50cy5nZXQoKSk7CisgICAgfQorCisgICAgU3ltYm9sVGFibGUqIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZShkZWNvZGVyLnZtKCkpOworICAgICAgICBtX21h
cC5kZWNvZGUoZGVjb2Rlciwgc3ltYm9sVGFibGUtPm1fbWFwKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUtPm1fbWF4U2NvcGVPZmZzZXQgPSBtX21heFNjb3BlT2Zmc2V0OworICAgICAgICBzeW1ib2xU
YWJsZS0+bV91c2VzTm9uU3RyaWN0RXZhbCA9IG1fdXNlc05vblN0cmljdEV2YWw7CisgICAgICAg
IHN5bWJvbFRhYmxlLT5tX25lc3RlZExleGljYWxTY29wZSA9IG1fbmVzdGVkTGV4aWNhbFNjb3Bl
OworICAgICAgICBzeW1ib2xUYWJsZS0+bV9zY29wZVR5cGUgPSBtX3Njb3BlVHlwZTsKKyAgICAg
ICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNjb3BlZEFyZ3VtZW50c1RhYmxlID0gbV9hcmd1bWVu
dHMuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoc2NvcGVkQXJndW1lbnRzVGFibGUpCisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS0+bV9hcmd1bWVudHMuc2V0KGRlY29kZXIudm0oKSwgc3lt
Ym9sVGFibGUsIHNjb3BlZEFyZ3VtZW50c1RhYmxlKTsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRh
YmxlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRIYXNoTWFwPENhY2hlZFJlZlB0cjxD
YWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIENhY2hlZFN5bWJvbFRhYmxlRW50cnksIElkZW50aWZp
ZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+LCBTeW1ib2xU
YWJsZUluZGV4SGFzaFRyYWl0cz4gbV9tYXA7CisgICAgU2NvcGVPZmZzZXQgbV9tYXhTY29wZU9m
ZnNldDsKKyAgICB1bnNpZ25lZCBtX3VzZXNOb25TdHJpY3RFdmFsIDogMTsKKyAgICB1bnNpZ25l
ZCBtX25lc3RlZExleGljYWxTY29wZSA6IDE7CisgICAgdW5zaWduZWQgbV9zY29wZVR5cGUgOiAz
OworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGNhY2hlZCB0aGlzIGV2ZW50dWFsbHk/Cisg
ICAgLy8gQ2FjaGVkUHRyPFN5bWJvbFRhYmxlUmFyZURhdGE+IHJhcmVEYXRhOworICAgIENhY2hl
ZFB0cjxDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7Cit9OworCitjbGFz
cyBDYWNoZWRKU1ZhbHVlOworY2xhc3MgQ2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5IDogcHVibGlj
IENhY2hlZE9iamVjdDxKU0ltbXV0YWJsZUJ1dHRlcmZseT4geworcHVibGljOgorICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIEpTSW1tdXRhYmxlQnV0dGVyZmx5JiBpbW11dGFibGVC
dXR0ZXJmbHkpCisgICAgeworICAgICAgICBtX2xlbmd0aCA9IGltbXV0YWJsZUJ1dHRlcmZseS5s
ZW5ndGgoKTsKKyAgICAgICAgbV9pbmRleGluZ1R5cGUgPSBpbW11dGFibGVCdXR0ZXJmbHkuaW5k
ZXhpbmdUeXBlQW5kTWlzYygpOworICAgICAgICBpZiAoaGFzRG91YmxlKG1faW5kZXhpbmdUeXBl
KSkKKyAgICAgICAgICAgIG1fY2FjaGVkRG91Ymxlcy5lbmNvZGUoZW5jb2RlciwgaW1tdXRhYmxl
QnV0dGVyZmx5LnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIG1fbGVu
Z3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYWNoZWRWYWx1ZXMuZW5jb2RlKGVu
Y29kZXIsIGltbXV0YWJsZUJ1dHRlcmZseS50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0
YSgpLCBtX2xlbmd0aCk7CisgICAgfQorCisgICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSlNJbW11dGFibGVCdXR0
ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGUo
ZGVjb2Rlci52bSgpLCBtX2luZGV4aW5nVHlwZSwgbV9sZW5ndGgpOworICAgICAgICBpZiAoaGFz
RG91YmxlKG1faW5kZXhpbmdUeXBlKSkKKyAgICAgICAgICAgIG1fY2FjaGVkRG91Ymxlcy5kZWNv
ZGUoZGVjb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3Vz
RG91YmxlKCkuZGF0YSgpLCBtX2xlbmd0aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9jYWNoZWRWYWx1ZXMuZGVjb2RlKGRlY29kZXIsIGltbXV0YWJs
ZUJ1dHRlcmZseS0+dG9CdXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEoKSwgbV9sZW5ndGgs
IGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgIHJldHVybiBpbW11dGFibGVCdXR0ZXJmbHk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKKyAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB1bmlvbiB7CisgICAgICAgIENhY2hlZEFycmF5PGRv
dWJsZT4gbV9jYWNoZWREb3VibGVzOworICAgICAgICBDYWNoZWRBcnJheTxDYWNoZWRKU1ZhbHVl
LCBXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY2FjaGVkVmFsdWVzOworICAgIH07Cit9OworCitj
bGFzcyBDYWNoZWRSZWdFeHAgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFJlZ0V4cD4geworcHVibGlj
OgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlZ0V4cCYgcmVnRXhw
KQorICAgIHsKKyAgICAgICAgbV9wYXR0ZXJuU3RyaW5nLmVuY29kZShlbmNvZGVyLCByZWdFeHAu
bV9wYXR0ZXJuU3RyaW5nKTsKKyAgICAgICAgbV9mbGFncyA9IHJlZ0V4cC5tX2ZsYWdzOworICAg
IH0KKworICAgIFJlZ0V4cCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBTdHJpbmcgcGF0dGVybiB7IG1fcGF0dGVyblN0cmluZy5kZWNvZGUoZGVjb2Rlcikg
fTsKKyAgICAgICAgcmV0dXJuIFJlZ0V4cDo6Y3JlYXRlKGRlY29kZXIudm0oKSwgcGF0dGVybiwg
bV9mbGFncyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFN0cmluZyBtX3BhdHRlcm5T
dHJpbmc7CisgICAgUmVnRXhwRmxhZ3MgbV9mbGFnczsKK307CisKK2NsYXNzIENhY2hlZFRlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VGVtcGxhdGVPYmplY3RE
ZXNjcmlwdG9yPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yJiB0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Ip
CisgICAgeworICAgICAgICBtX3Jhd1N0cmluZ3MuZW5jb2RlKGVuY29kZXIsIHRlbXBsYXRlT2Jq
ZWN0RGVzY3JpcHRvci5yYXdTdHJpbmdzKCkpOworICAgICAgICBtX2Nvb2tlZFN0cmluZ3MuZW5j
b2RlKGVuY29kZXIsIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jb29rZWRTdHJpbmdzKCkpOwor
ICAgIH0KKworICAgIFJlZjxUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
OjpTdHJpbmdWZWN0b3IgZGVjb2RlZFJhd1N0cmluZ3M7CisgICAgICAgIFRlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvcjo6T3B0aW9uYWxTdHJpbmdWZWN0b3IgZGVjb2RlZENvb2tlZFN0cmluZ3M7Cisg
ICAgICAgIG1fcmF3U3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZFJhd1N0cmluZ3MpOwor
ICAgICAgICBtX2Nvb2tlZFN0cmluZ3MuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRDb29rZWRTdHJp
bmdzKTsKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6Y3JlYXRlKFdU
Rk1vdmUoZGVjb2RlZFJhd1N0cmluZ3MpLCBXVEZNb3ZlKGRlY29kZWRDb29rZWRTdHJpbmdzKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFZlY3RvcjxDYWNoZWRTdHJpbmcsIDQ+IG1f
cmF3U3RyaW5nczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkT3B0aW9uYWw8Q2FjaGVkU3RyaW5n
PiwgND4gbV9jb29rZWRTdHJpbmdzOworfTsKKworY2xhc3MgQ2FjaGVkQmlnSW50IDogcHVibGlj
IFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEpTQmlnSW50PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgSlNCaWdJbnQmIGJpZ0ludCkKKyAgICB7CisgICAgICAgIG1f
bGVuZ3RoID0gYmlnSW50Lmxlbmd0aCgpOworICAgICAgICBtX3NpZ24gPSBiaWdJbnQuc2lnbigp
OworCisgICAgICAgIGlmICghbV9sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdW5zaWduZWQgc2l6ZSA9IHNpemVvZihKU0JpZ0ludDo6RGlnaXQpICogbV9sZW5ndGg7Cisg
ICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHRoaXMtPmFsbG9jYXRlKGVuY29kZXIsIHNpemUpOwor
ICAgICAgICBtZW1jcHkoYnVmZmVyLCBiaWdJbnQuZGF0YVN0b3JhZ2UoKSwgc2l6ZSk7CisgICAg
fQorCisgICAgSlNCaWdJbnQqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5j
aGVja2VkKGRlY29kZXIudm0oKSwgbV9sZW5ndGgpOworICAgICAgICBiaWdJbnQtPnNldFNpZ24o
bV9zaWduKTsKKyAgICAgICAgbWVtY3B5KGJpZ0ludC0+ZGF0YVN0b3JhZ2UoKSwgdGhpcy0+YnVm
ZmVyKCksIHNpemVvZihKU0JpZ0ludDo6RGlnaXQpICogbV9sZW5ndGgpOworICAgICAgICByZXR1
cm4gYmlnSW50OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAg
ICBib29sIG1fc2lnbjsKK307CisKK2NsYXNzIENhY2hlZEpTVmFsdWUgOiBwdWJsaWMgVmFyaWFi
bGVMZW5ndGhPYmplY3Q8V3JpdGVCYXJyaWVyPFVua25vd24+PiB7CitwdWJsaWM6CisgICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+IHZh
bHVlKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWUuZ2V0KCk7CisKKyAgICAgICAg
aWYgKCF2LmlzQ2VsbCgpIHx8IHYuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBF
bmNvZGVkVHlwZTo6SlNWYWx1ZTsKKyAgICAgICAgICAgICp0aGlzLT5hbGxvY2F0ZTxFbmNvZGVk
SlNWYWx1ZT4oZW5jb2RlcikgPSBKU1ZhbHVlOjplbmNvZGUodik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2LmFzQ2VsbCgpOworICAg
ICAgICBWTSYgdm0gPSBlbmNvZGVyLnZtKCk7CisKKyAgICAgICAgaWYgKGF1dG8qIHN5bWJvbFRh
YmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KHZtLCBjZWxsKSkgeworICAgICAgICAg
ICAgbV90eXBlID0gRW5jb2RlZFR5cGU6OlN5bWJvbFRhYmxlOworICAgICAgICAgICAgdGhpcy0+
YWxsb2NhdGU8Q2FjaGVkU3ltYm9sVGFibGU+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChhdXRvKiBzdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odm0sIGNlbGwpKSB7Cisg
ICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6U3RyaW5nOworICAgICAgICAgICAgU3Ry
aW5nSW1wbCogaW1wbCA9IHN0cmluZy0+dHJ5R2V0VmFsdWUoKS5pbXBsKCk7CisgICAgICAgICAg
ICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4oZW5jb2RlciktPmVuY29k
ZShlbmNvZGVyLCAqaW1wbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYXV0byogaW1tdXRhYmxlQnV0dGVyZmx5ID0ganNEeW5hbWljQ2FzdDxKU0ltbXV0
YWJsZUJ1dHRlcmZseSo+KHZtLCBjZWxsKSkgeworICAgICAgICAgICAgbV90eXBlID0gRW5jb2Rl
ZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseTsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENh
Y2hlZEltbXV0YWJsZUJ1dHRlcmZseT4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqaW1tdXRh
YmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChhdXRvKiByZWdleHAgPSBqc0R5bmFtaWNDYXN0PFJlZ0V4cCo+KHZtLCBjZWxsKSkgewor
ICAgICAgICAgICAgbV90eXBlID0gRW5jb2RlZFR5cGU6OlJlZ0V4cDsKKyAgICAgICAgICAgIHRo
aXMtPmFsbG9jYXRlPENhY2hlZFJlZ0V4cD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqcmVn
ZXhwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRv
KiB0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IgPSBqc0R5bmFtaWNDYXN0PEpTVGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yKj4odm0sIGNlbGwpKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVk
VHlwZTo6VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOworICAgICAgICAgICAgdGhpcy0+YWxsb2Nh
dGU8Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29k
ZXIsIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci0+ZGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBiaWdJbnQgPSBqc0R5bmFt
aWNDYXN0PEpTQmlnSW50Kj4odm0sIGNlbGwpKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNv
ZGVkVHlwZTo6QmlnSW50OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkQmlnSW50
PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpiaWdJbnQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlLCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
SlNWYWx1ZSB2OworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIEVuY29k
ZWRUeXBlOjpKU1ZhbHVlOgorICAgICAgICAgICAgdiA9IEpTVmFsdWU6OmRlY29kZSgqdGhpcy0+
YnVmZmVyPEVuY29kZWRKU1ZhbHVlPigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVuY29kZWRUeXBlOjpTeW1ib2xUYWJsZToKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZm
ZXI8Q2FjaGVkU3ltYm9sVGFibGU+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiBpbXBsID0gdGhpcy0+YnVmZmVyPENhY2hlZFVuaXF1ZWRTdHJpbmdJ
bXBsPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICB2ID0gSlNTdHJpbmc6OmNyZWF0
ZShkZWNvZGVyLnZtKCksIGFkb3B0UmVmKCppbXBsKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpJbW11dGFibGVCdXR0ZXJmbHk6Cisg
ICAgICAgICAgICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZEltbXV0YWJsZUJ1dHRlcmZseT4oKS0+
ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2Rl
ZFR5cGU6OlJlZ0V4cDoKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkUmVnRXhw
PigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bmNvZGVkVHlwZTo6VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOgorICAgICAgICAgICAgdiA9IEpT
VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUoZGVjb2Rlci52bSgpLCB0aGlzLT5idWZm
ZXI8Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPigpLT5kZWNvZGUoZGVjb2RlcikpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkJpZ0ludDoKKyAg
ICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkQmlnSW50PigpLT5kZWNvZGUoZGVjb2Rl
cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUuc2V0
KGRlY29kZXIudm0oKSwgb3duZXIsIHYpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtIGNs
YXNzIEVuY29kZWRUeXBlIDogdWludDhfdCB7CisgICAgICAgIEpTVmFsdWUsCisgICAgICAgIFN5
bWJvbFRhYmxlLAorICAgICAgICBTdHJpbmcsCisgICAgICAgIEltbXV0YWJsZUJ1dHRlcmZseSwK
KyAgICAgICAgUmVnRXhwLAorICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IsCisgICAg
ICAgIEJpZ0ludCwKKyAgICB9OworCisgICAgRW5jb2RlZFR5cGUgbV90eXBlOworfTsKKworY2xh
c3MgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW0gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PEluc3RydWN0
aW9uU3RyZWFtPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIHN0cmVhbSkKKyAgICB7CisgICAgICAgIG1faW5zdHJ1
Y3Rpb25zLmVuY29kZShlbmNvZGVyLCBzdHJlYW0ubV9pbnN0cnVjdGlvbnMpOworICAgIH0KKwor
ICAgIEluc3RydWN0aW9uU3RyZWFtKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gaW5z
dHJ1Y3Rpb25zVmVjdG9yOworICAgICAgICBtX2luc3RydWN0aW9ucy5kZWNvZGUoZGVjb2Rlciwg
aW5zdHJ1Y3Rpb25zVmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJbnN0cnVjdGlvblN0cmVh
bShXVEZNb3ZlKGluc3RydWN0aW9uc1ZlY3RvcikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBD
YWNoZWRWZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1faW5zdHJ1Y3Rp
b25zOworfTsKKworY2xhc3MgQ2FjaGVkTWV0YWRhdGFUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8VW5saW5rZWRNZXRhZGF0YVRhYmxlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIGNvbnN0IFVubGlua2VkTWV0YWRhdGFUYWJsZSYgbWV0YWRhdGFUYWJsZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtZXRhZGF0YVRhYmxlLm1faXNGaW5hbGl6ZWQpOworICAgICAgICBt
X2hhc01ldGFkYXRhID0gbWV0YWRhdGFUYWJsZS5tX2hhc01ldGFkYXRhOworICAgICAgICBpZiAo
IW1faGFzTWV0YWRhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IFVubGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM7IGktLTsp
CisgICAgICAgICAgICBtX21ldGFkYXRhW2ldID0gbWV0YWRhdGFUYWJsZS5idWZmZXIoKVtpXTsK
KyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgVW5saW5rZWRNZXRhZGF0YVRhYmxl
JiBtZXRhZGF0YVRhYmxlKSBjb25zdAorICAgIHsKKyAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2lz
RmluYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2lzTGlua2VkID0gZmFs
c2U7CisgICAgICAgIG1ldGFkYXRhVGFibGUubV9oYXNNZXRhZGF0YSA9IG1faGFzTWV0YWRhdGE7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IFVubGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZz
ZXRUYWJsZUVudHJpZXM7IGktLTspCisgICAgICAgICAgICBtZXRhZGF0YVRhYmxlLmJ1ZmZlcigp
W2ldID0gbV9tZXRhZGF0YVtpXTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2hhc01l
dGFkYXRhOworICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIFVubGlua2VkTWV0YWRhdGFUYWJsZTo6
c19vZmZzZXRUYWJsZUVudHJpZXM+IG1fbWV0YWRhdGE7Cit9OworCitjbGFzcyBDYWNoZWRTb3Vy
Y2VPcmlnaW4gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZU9yaWdpbj4geworcHVibGljOgor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZU9yaWdpbiYgc291
cmNlT3JpZ2luKQorICAgIHsKKyAgICAgICAgbV9zdHJpbmcuZW5jb2RlKGVuY29kZXIsIHNvdXJj
ZU9yaWdpbi5zdHJpbmcoKSk7CisgICAgfQorCisgICAgU291cmNlT3JpZ2luIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNvdXJjZU9yaWdpbiB7
IG1fc3RyaW5nLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNo
ZWRTdHJpbmcgbV9zdHJpbmc7Cit9OworCitjbGFzcyBDYWNoZWRUZXh0UG9zaXRpb24gOiBwdWJs
aWMgQ2FjaGVkT2JqZWN0PFRleHRQb3NpdGlvbj4geworcHVibGljOgorICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgbV9s
aW5lID0gdGV4dFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKKyAgICAgICAgbV9jb2x1
bW4gPSB0ZXh0UG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7CisgICAgfQorCisgICAg
VGV4dFBvc2l0aW9uIGRlY29kZShEZWNvZGVyJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBUZXh0UG9zaXRpb24geyBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fbGluZSks
IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9jb2x1bW4pIH07CisgICAgfQorCitw
cml2YXRlOgorICAgIGludCBtX2xpbmU7CisgICAgaW50IG1fY29sdW1uOworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgQ2FjaGVkVHlwZT4KK2NsYXNzIENhY2hlZFNv
dXJjZVByb3ZpZGVyU2hhcGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZT4geworcHVibGlj
OgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3ZpZGVy
JiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIG1fdmFsaWRhdGVkID0gc291cmNlUHJv
dmlkZXIuaXNWYWxpZCgpOworICAgICAgICBtX3NvdXJjZU9yaWdpbi5lbmNvZGUoZW5jb2Rlciwg
c291cmNlUHJvdmlkZXIuc291cmNlT3JpZ2luKCkpOworICAgICAgICBtX3VybC5lbmNvZGUoZW5j
b2Rlciwgc291cmNlUHJvdmlkZXIudXJsKCkpOworICAgICAgICBtX3NvdXJjZVVSTERpcmVjdGl2
ZS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlVVJMKCkpOworICAgICAgICBt
X3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVy
LnNvdXJjZU1hcHBpbmdVUkwoKSk7CisgICAgICAgIG1fc3RhcnRQb3NpdGlvbi5lbmNvZGUoZW5j
b2Rlciwgc291cmNlUHJvdmlkZXIuc3RhcnRQb3NpdGlvbigpKTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWxpZGF0ZWQpCisgICAgICAgICAgICBzb3Vy
Y2VQcm92aWRlci5zZXRWYWxpZCgpOworICAgICAgICBzb3VyY2VQcm92aWRlci5zZXRTb3VyY2VV
UkxEaXJlY3RpdmUobV9zb3VyY2VVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKTsKKyAgICAg
ICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShtX3NvdXJjZU1h
cHBpbmdVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBib29sIG1fdmFsaWRhdGVkIDogMTsKKyAgICBDYWNoZWRTb3VyY2VPcmlnaW4gbV9zb3Vy
Y2VPcmlnaW47CisgICAgQ2FjaGVkU3RyaW5nIG1fdXJsOworICAgIENhY2hlZFN0cmluZyBtX3Nv
dXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRTdHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlOworICAgIENhY2hlZFRleHRQb3NpdGlvbiBtX3N0YXJ0UG9zaXRpb247Cit9OworCitj
bGFzcyBDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBDYWNoZWRTb3VyY2VQcm92
aWRlclNoYXBlPFN0cmluZ1NvdXJjZVByb3ZpZGVyLCBDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRl
cj4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFN0cmluZ1Nv
dXJjZVByb3ZpZGVyLCBDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj47CisKK3B1YmxpYzoKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmdTb3VyY2VQcm92aWRl
ciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwg
c291cmNlUHJvdmlkZXIpOworICAgICAgICBtX3NvdXJjZS5lbmNvZGUoZW5jb2Rlciwgc291cmNl
UHJvdmlkZXIuc291cmNlKCkudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgU3RyaW5nU291cmNl
UHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VQcm92aWRlclNvdXJjZVR5
cGUgc291cmNlVHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBkZWNvZGVkU291cmNl
ID0gbV9zb3VyY2UuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBTb3VyY2VPcmlnaW4gZGVjb2Rl
ZFNvdXJjZU9yaWdpbiA9IG1fc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAg
U3RyaW5nIGRlY29kZWRVUkwgPSBtX3VybC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFRleHRQ
b3NpdGlvbiBkZWNvZGVkU3RhcnRQb3NpdGlvbiA9IG1fc3RhcnRQb3NpdGlvbi5kZWNvZGUoZGVj
b2Rlcik7CisKKyAgICAgICAgUmVmPFN0cmluZ1NvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciA9IFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoZGVjb2RlZFNvdXJjZSwgZGVjb2RlZFNv
dXJjZU9yaWdpbiwgVVJMKFVSTCgpLCBkZWNvZGVkVVJMKSwgZGVjb2RlZFN0YXJ0UG9zaXRpb24s
IHNvdXJjZVR5cGUpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlUHJvdmlk
ZXIuZ2V0KCkpOworICAgICAgICByZXR1cm4gJnNvdXJjZVByb3ZpZGVyLmxlYWtSZWYoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlOworfTsKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKK2NsYXNzIENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIg
OiBwdWJsaWMgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxXZWJBc3NlbWJseVNvdXJjZVByb3Zp
ZGVyLCBDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPiB7CisgICAgdXNpbmcgQmFzZSA9
IENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciwgQ2Fj
aGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj47CisKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyJiBzb3Vy
Y2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQ
cm92aWRlcik7CisgICAgICAgIG1fZGF0YS5lbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIu
ZGF0YSgpKTsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBk
ZWNvZGVkRGF0YTsKKyAgICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRTb3VyY2VPcmlnaW4gPSBt
X3NvdXJjZU9yaWdpbi5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFN0cmluZyBkZWNvZGVkVVJM
ID0gbV91cmwuZGVjb2RlKGRlY29kZXIpOworCisgICAgICAgIG1fZGF0YS5kZWNvZGUoZGVjb2Rl
ciwgZGVjb2RlZERhdGEpOworCisgICAgICAgIFJlZjxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlciA9IFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI6OmNyZWF0ZShXVEZN
b3ZlKGRlY29kZWREYXRhKSwgZGVjb2RlZFNvdXJjZU9yaWdpbiwgVVJMKFVSTCgpLCBkZWNvZGVk
VVJMKSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VQcm92aWRlci5nZXQo
KSk7CisKKyAgICAgICAgcmV0dXJuICZzb3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIENhY2hlZFZlY3Rvcjx1aW50OF90PiBtX2RhdGE7Cit9OworI2VuZGlm
CisKK2NsYXNzIENhY2hlZFNvdXJjZVByb3ZpZGVyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2Jq
ZWN0PFNvdXJjZVByb3ZpZGVyPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAg
ICAgICAgbV9zb3VyY2VUeXBlID0gc291cmNlUHJvdmlkZXIuc291cmNlVHlwZSgpOworICAgICAg
ICBzd2l0Y2ggKG1fc291cmNlVHlwZSkgeworICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291
cmNlVHlwZTo6UHJvZ3JhbToKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6
Ok1vZHVsZToKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFN0cmluZ1NvdXJjZVBy
b3ZpZGVyPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
U3RyaW5nU291cmNlUHJvdmlkZXImPihzb3VyY2VQcm92aWRlcikpOworICAgICAgICAgICAgYnJl
YWs7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVy
U291cmNlVHlwZTo6V2ViQXNzZW1ibHk6CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNo
ZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciY+KHNvdXJjZVBy
b3ZpZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFNvdXJjZVByb3ZpZGVyKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAobV9zb3VyY2VUeXBlKSB7CisgICAgICAgIGNhc2UgU291
cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNvdXJjZVByb3Zp
ZGVyU291cmNlVHlwZTo6TW9kdWxlOgorICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxD
YWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2RlKGRlY29kZXIsIG1fc291cmNlVHlw
ZSk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVy
U291cmNlVHlwZTo6V2ViQXNzZW1ibHk6CisgICAgICAgICAgICByZXR1cm4gdGhpcy0+YnVmZmVy
PENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+KCktPmRlY29kZShkZWNvZGVyKTsKKyNl
bmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBTb3VyY2VQcm92aWRl
clNvdXJjZVR5cGUgbV9zb3VyY2VUeXBlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNl
PgorY2xhc3MgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGUgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFNvdXJjZT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFVubGlua2VkU291cmNlQ29kZSYgc291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIG1f
cHJvdmlkZXIuZW5jb2RlKGVuY29kZXIsIHNvdXJjZUNvZGUubV9wcm92aWRlci5nZXQoKSk7Cisg
ICAgICAgIG1fc3RhcnRPZmZzZXQgPSBzb3VyY2VDb2RlLnN0YXJ0T2Zmc2V0KCk7CisgICAgICAg
IG1fZW5kT2Zmc2V0ID0gc291cmNlQ29kZS5lbmRPZmZzZXQoKTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUp
IGNvbnN0CisgICAgeworICAgICAgICBzb3VyY2VDb2RlLm1fcHJvdmlkZXIgPSBtX3Byb3ZpZGVy
LmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgc291cmNlQ29kZS5tX3N0YXJ0T2Zmc2V0ID0gbV9z
dGFydE9mZnNldDsKKyAgICAgICAgc291cmNlQ29kZS5tX2VuZE9mZnNldCA9IG1fZW5kT2Zmc2V0
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRQdHI8Q2FjaGVkU291cmNlUHJvdmlkZXI+
IG1fcHJvdmlkZXI7CisgICAgaW50IG1fc3RhcnRPZmZzZXQ7CisgICAgaW50IG1fZW5kT2Zmc2V0
OworfTsKKworCitjbGFzcyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGUgOiBwdWJsaWMgQ2FjaGVk
VW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8VW5saW5rZWRTb3VyY2VDb2RlPiB7IH07CisKK2NsYXNz
IENhY2hlZFNvdXJjZUNvZGUgOiBwdWJsaWMgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8
U291cmNlQ29kZT4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVT
aGFwZTxTb3VyY2VDb2RlPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCisgICAgeworICAgICAgICBCYXNl
OjplbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZSk7CisgICAgICAgIG1fZmlyc3RMaW5lID0gc291
cmNlQ29kZS5maXJzdExpbmUoKS56ZXJvQmFzZWRJbnQoKTsKKyAgICAgICAgbV9zdGFydENvbHVt
biA9IHNvdXJjZUNvZGUuc3RhcnRDb2x1bW4oKS56ZXJvQmFzZWRJbnQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSBj
b25zdAorICAgIHsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZUNvZGUpOwor
ICAgICAgICBzb3VyY2VDb2RlLm1fZmlyc3RMaW5lID0gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9C
YXNlZEludChtX2ZpcnN0TGluZSk7CisgICAgICAgIHNvdXJjZUNvZGUubV9zdGFydENvbHVtbiA9
IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9zdGFydENvbHVtbik7CisgICAgfQor
Citwcml2YXRlOgorICAgIGludCBtX2ZpcnN0TGluZTsKKyAgICBpbnQgbV9zdGFydENvbHVtbjsK
K307CisKK2NsYXNzIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZGVjb2RlKERlY29kZXImKSBjb25zdDsKKworICAgIHVu
c2lnbmVkIGZpcnN0TGluZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lT2Zmc2V0
OyB9CisgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7
IH0KKyAgICB1bnNpZ25lZCB1bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0OyB9CisgICAgdW5zaWduZWQgdW5saW5rZWRC
b2R5U3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1u
OyB9CisgICAgdW5zaWduZWQgdW5saW5rZWRCb2R5RW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZEJvZHlFbmRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUxlbmd0aDsgfQorICAgIHVuc2lnbmVkIHBhcmFtZXRl
cnNTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OyB9
CisgICAgdW5zaWduZWQgdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5n
RW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OyB9Cisg
ICAgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlckNv
dW50OyB9CisKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2Zl
YXR1cmVzOyB9CisgICAgU291cmNlUGFyc2VNb2RlIHNvdXJjZVBhcnNlTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlUGFyc2VNb2RlOyB9CisKKyAgICB1bnNpZ25lZCBpc0luU3RyaWN0Q29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblN0cmljdENvbnRleHQ7IH0KKyAgICB1bnNpZ25l
ZCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJp
YWJsZXM7IH0KKyAgICB1bnNpZ25lZCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faXNCdWlsdGluRnVuY3Rpb247IH0KKyAgICB1bnNpZ25lZCBpc0J1aWx0aW5EZWZhdWx0Q2xh
c3NDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29u
c3RydWN0b3I7IH0KKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RBYmlsaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9jb25zdHJ1Y3RBYmlsaXR5OyB9CisgICAgdW5zaWduZWQgY29uc3RydWN0b3JLaW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmQ7IH0KKyAgICB1bnNpZ25lZCBmdW5jdGlv
bk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTW9kZTsgfQorICAgIHVuc2lnbmVkIHNj
cmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdE1vZGU7IH0KKyAgICB1bnNpZ25lZCBz
dXBlckJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX3N1cGVyQmluZGluZzsgfQorICAgIHVuc2ln
bmVkIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZlZENvbnRleHRU
eXBlOyB9CisKKyAgICBJZGVudGlmaWVyIG5hbWUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lLmRlY29kZShkZWNvZGVyKTsgfQorICAgIElkZW50aWZpZXIgZWNtYU5hbWUo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyByZXR1cm4gbV9lY21hTmFtZS5kZWNvZGUoZGVjb2Rl
cik7IH0KKyAgICBJZGVudGlmaWVyIGluZmVycmVkTmFtZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dCB7IHJldHVybiBtX2luZmVycmVkTmFtZS5kZWNvZGUoZGVjb2Rlcik7IH0KKworcHJpdmF0ZToK
KyAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBtX2xpbmVDb3Vu
dDsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7CisgICAgdW5zaWdu
ZWQgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbjsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkQm9k
eUVuZENvbHVtbjsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIG1f
c291cmNlTGVuZ3RoOworICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OworICAg
IHVuc2lnbmVkIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIG1fdHlw
ZVByb2ZpbGluZ0VuZE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3BhcmFtZXRlckNvdW50OworICAg
IENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgIFNvdXJjZVBhcnNlTW9kZSBtX3NvdXJjZVBh
cnNlTW9kZTsKKyAgICB1bnNpZ25lZCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKKyAgICB1bnNp
Z25lZCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQnVpbHRp
bkZ1bmN0aW9uIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0
cnVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdEFiaWxpdHk6IDE7CisgICAgdW5z
aWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOworICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25Nb2Rl
IDogMjsgLy8gRnVuY3Rpb25Nb2RlCisgICAgdW5zaWduZWQgbV9zY3JpcHRNb2RlOiAxOyAvLyBK
U1BhcnNlclNjcmlwdE1vZGUKKyAgICB1bnNpZ25lZCBtX3N1cGVyQmluZGluZyA6IDE7CisgICAg
dW5zaWduZWQgbV9kZXJpdmVkQ29udGV4dFR5cGU6IDI7CisKKyAgICBDYWNoZWRTb3VyY2VDb2Rl
IG1fY2xhc3NTb3VyY2U7CisKKyAgICBDYWNoZWRJZGVudGlmaWVyIG1fbmFtZTsKKyAgICBDYWNo
ZWRJZGVudGlmaWVyIG1fZWNtYU5hbWU7CisgICAgQ2FjaGVkSWRlbnRpZmllciBtX2luZmVycmVk
TmFtZTsKKworICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgbV9wYXJlbnRTY29wZVREWlZh
cmlhYmxlczsKKworICAgIENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkNvZGVCbG9j
aywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGw7
CisgICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0OworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2NsYXNzIENhY2hlZENvZGVCbG9j
ayA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8Q29kZUJsb2NrVHlwZT4geworcHVibGljOgorICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayYpOworICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImLCBVbmxpbmtlZENvZGVCbG9jayYpIGNvbnN0OworCisgICAgSW5zdHJ1
Y3Rpb25TdHJlYW0qIGluc3RydWN0aW9ucyhEZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJldHVy
biBtX2luc3RydWN0aW9ucy5kZWNvZGUoZGVjb2Rlcik7IH0KKworICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQorICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZVJlZ2lz
dGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsgfQorCisgICAgU3RyaW5nIHNvdXJjZVVS
TERpcmVjdGl2ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTERp
cmVjdGl2ZS5kZWNvZGUoZGVjb2Rlcik7IH0KKyAgICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZU1hcHBpbmdV
UkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpOyB9CisKKyAgICB1bnNpZ25lZCB1c2VzRXZhbCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2YWw7IH0KKyAgICB1bnNpZ25lZCBpc1N0cmljdE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQorICAgIHVuc2lnbmVkIGlzQ29uc3Ry
dWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uc3RydWN0b3I7IH0KKyAgICB1bnNpZ25lZCBo
YXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJs
ZXM7IH0KKyAgICB1bnNpZ25lZCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNCdWlsdGluRnVuY3Rpb247IH0KKyAgICB1bnNpZ25lZCBzdXBlckJpbmRpbmcoKSBjb25zdCB7
IHJldHVybiBtX3N1cGVyQmluZGluZzsgfQorICAgIHVuc2lnbmVkIHNjcmlwdE1vZGUoKSBjb25z
dCB7IHJldHVybiBtX3NjcmlwdE1vZGU7IH0KKyAgICB1bnNpZ25lZCBpc0Fycm93RnVuY3Rpb25D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0OyB9CisgICAg
dW5zaWduZWQgaXNDbGFzc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzQ2xhc3NDb250ZXh0
OyB9CisgICAgdW5zaWduZWQgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0
IHsgcmV0dXJuIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlczsgfQorICAgIHVuc2ln
bmVkIGNvbnN0cnVjdG9yS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JLaW5kOyB9
CisgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJp
dmVkQ29udGV4dFR5cGU7IH0KKyAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsgfQorICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENhbGxzOyB9CisgICAgdW5zaWduZWQgbGluZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQorCisgICAgaW50IG51bVZhcnMoKSBjb25z
dCB7IHJldHVybiBtX251bVZhcnM7IH0KKyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KKyAgICBpbnQgbnVtUGFyYW1ldGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorCisgICAgQ29kZUZlYXR1cmVzIGZlYXR1
cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIFNvdXJjZVBhcnNlTW9kZSBw
YXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlTW9kZTsgfQorICAgIENvZGVUeXBlIGNv
ZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQorCisgICAgVW5saW5rZWRDb2Rl
QmxvY2s6OlJhcmVEYXRhKiByYXJlRGF0YShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJldHVy
biBtX3JhcmVEYXRhLmRlY29kZUFzUHRyKGRlY29kZXIpOyB9CisKK3ByaXZhdGU6CisgICAgVmly
dHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3Bl
UmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisK
KyAgICB1bnNpZ25lZCBtX3VzZXNFdmFsIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzU3RyaWN0TW9k
ZSA6IDE7CisgICAgdW5zaWduZWQgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBt
X2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1bmN0
aW9uIDogMTsKKyAgICB1bnNpZ25lZCBtX3N1cGVyQmluZGluZyA6IDE7CisgICAgdW5zaWduZWQg
bV9zY3JpcHRNb2RlOiAxOworICAgIHVuc2lnbmVkIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA6
IDE7CisgICAgdW5zaWduZWQgbV9pc0NsYXNzQ29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgbV93
YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnN0
cnVjdG9yS2luZCA6IDI7CisgICAgdW5zaWduZWQgbV9kZXJpdmVkQ29udGV4dFR5cGUgOiAyOwor
ICAgIHVuc2lnbmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2hhc1Rh
aWxDYWxscyA6IDE7CisKKyAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBt
X2VuZENvbHVtbjsKKworICAgIGludCBtX251bVZhcnM7CisgICAgaW50IG1fbnVtQ2FsbGVlTG9j
YWxzOworICAgIGludCBtX251bVBhcmFtZXRlcnM7CisKKyAgICBDb2RlRmVhdHVyZXMgbV9mZWF0
dXJlczsKKyAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CisgICAgQ29kZVR5cGUgbV9j
b2RlVHlwZTsKKworICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExpbmtUaW1lQ29uc3RhbnRDb3Vu
dD4gbV9saW5rVGltZUNvbnN0YW50czsKKyAgICBDYWNoZWRNZXRhZGF0YVRhYmxlIG1fbWV0YWRh
dGE7CisKKyAgICBDYWNoZWRPcHRpb25hbDxDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YT4gbV9yYXJl
RGF0YTsKKworICAgIENhY2hlZFN0cmluZyBtX3NvdXJjZVVSTERpcmVjdGl2ZTsKKyAgICBDYWNo
ZWRTdHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlOworCisgICAgQ2FjaGVkUHRyPENh
Y2hlZEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKKyAgICBDYWNoZWRWZWN0b3I8
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9qdW1wVGFyZ2V0czsKKyAgICBDYWNoZWRWZWN0
b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
czsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSlNWYWx1ZT4gbV9jb25zdGFudFJlZ2lzdGVyczsK
KyAgICBDYWNoZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKKyAgICBDYWNoZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdl
SW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBDYWNoZWRIYXNoTWFwPEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQsIGludD4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKKworICAgIENhY2hlZFZl
Y3RvcjxDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZp
ZXJTZXRzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJz
OworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKKyAgICBD
YWNoZWRWZWN0b3I8Q2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+
IG1fZnVuY3Rpb25EZWNsczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkV3JpdGVCYXJyaWVyPENh
Y2hlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25FeHByczsKK307CisKK2NsYXNzIENh
Y2hlZFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayYgY29kZUJsb2NrKQorICAg
IHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgICAgIG1f
dmFyRGVjbGFyYXRpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV92YXJEZWNsYXJhdGlv
bnMpOworICAgICAgICBtX2xleGljYWxEZWNsYXJhdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVC
bG9jay5tX2xleGljYWxEZWNsYXJhdGlvbnMpOworICAgIH0KKworICAgIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZGVjb2Rlci52bSgpLmhlYXApKSBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAgICBjb2RlQmxv
Y2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRlY29kZShk
ZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMuZGVjb2RlKGRl
Y29kZXIsIGNvZGVCbG9jay0+bV92YXJEZWNsYXJhdGlvbnMpOworICAgICAgICBtX2xleGljYWxE
ZWNsYXJhdGlvbnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV9sZXhpY2FsRGVjbGFyYXRp
b25zKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Q2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKKyAgICBDYWNoZWRW
YXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKK307CisKK2NsYXNzIENh
Y2hlZE1vZHVsZUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
JiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrKTsKKyAgICAgICAgbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdp
c3Rlck9mZnNldCA9IGNvZGVCbG9jay5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25z
dGFudFJlZ2lzdGVyT2Zmc2V0OworICAgIH0KKworICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4oZGVjb2Rlci52bSgp
LmhlYXApKSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOwor
ICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAg
IEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgY29kZUJsb2NrLT5t
X21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0ID0gbV9t
b2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKyAgICAg
ICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7Cit9OworCitjbGFz
cyBDYWNoZWRFdmFsQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEV2
YWxDb2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2Vk
RXZhbENvZGVCbG9jaz47CisKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBVbmxpbmtlZEV2YWxDb2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAg
ICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2spOworICAgICAgICBtX3ZhcmlhYmxl
cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fdmFyaWFibGVzKTsKKyAgICAgICAgbV9mdW5j
dGlvbkhvaXN0aW5nQ2FuZGlkYXRlcy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rp
b25Ib2lzdGluZ0NhbmRpZGF0ZXMpOworICAgIH0KKworICAgIFVubGlua2VkRXZhbENvZGVCbG9j
ayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVu
bGlua2VkRXZhbENvZGVCbG9jaz4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAgICBjb2RlQmxvY2stPmZpbmlzaENyZWF0aW9u
KGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCAqY29kZUJsb2Nr
KTsKKyAgICAgICAgbV92YXJpYWJsZXMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay0+bV92YXJp
YWJsZXMpOworICAgICAgICBtX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzLmRlY29kZShkZWNv
ZGVyLCBjb2RlQmxvY2stPm1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMpOworICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0b3I8Q2Fj
aGVkSWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOworICAg
IENhY2hlZFZlY3RvcjxDYWNoZWRJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4g
bV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsKK307CisKK2NsYXNzIENhY2hlZEZ1bmN0aW9u
Q29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAg
ICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2spOworICAgIH0KKworICAgIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4oZGVjb2Rlci52
bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBC
YXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBjb2RlQmxv
Y2s7CisgICAgfQorfTsKKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
OjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hl
ZEZ1bmN0aW9uQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIs
IGRlY29kZXIudm0oKS51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBj
YWNoZWRDb2RlQmxvY2spCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ2Fj
aGVkQ29kZUJsb2NrVHlwZUltcGw7CisKK2VudW0gQ2FjaGVkQ29kZUJsb2NrVGFnIHsKKyAgICBD
YWNoZWRQcm9ncmFtQ29kZUJsb2NrVGFnLAorICAgIENhY2hlZE1vZHVsZUNvZGVCbG9ja1RhZywK
KyAgICBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnLAorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IENh
Y2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4geworICAgIHVz
aW5nIHR5cGUgPSBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Q2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENhY2hlZFByb2dyYW1Db2RlQmxvY2tUYWc7Cit9Owor
Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgdHlwZSA9IENhY2hlZE1vZHVsZUNvZGVC
bG9jazsKKyAgICBzdGF0aWMgY29uc3RleHByIENhY2hlZENvZGVCbG9ja1RhZyB0YWcgPSBDYWNo
ZWRNb2R1bGVDb2RlQmxvY2tUYWc7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVkQ29k
ZUJsb2NrVHlwZUltcGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgdHlwZSA9
IENhY2hlZEV2YWxDb2RlQmxvY2s7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWRDb2RlQmxv
Y2tUYWcgdGFnID0gQ2FjaGVkRXZhbENvZGVCbG9ja1RhZzsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit1c2luZyBDYWNoZWRDb2RlQmxvY2tUeXBlID0gdHlwZW5hbWUgQ2FjaGVkQ29kZUJs
b2NrVHlwZUltcGw8VD46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
CitBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNv
ZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgQ2FjaGVkQ29kZUJsb2Nr
PENvZGVCbG9ja1R5cGU+JiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIudm0o
KSwgc3RydWN0dXJlKQorICAgICwgbV9pbnN0cnVjdGlvbnMoY2FjaGVkQ29kZUJsb2NrLmluc3Ry
dWN0aW9ucyhkZWNvZGVyKSkKKyAgICAsIG1fbGl2ZW5lc3MobnVsbHB0cikKKyAgICAsIG1fdGhp
c1JlZ2lzdGVyKGNhY2hlZENvZGVCbG9jay50aGlzUmVnaXN0ZXIoKSkKKyAgICAsIG1fc2NvcGVS
ZWdpc3RlcihjYWNoZWRDb2RlQmxvY2suc2NvcGVSZWdpc3RlcigpKQorICAgICwgbV9nbG9iYWxP
YmplY3RSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2suZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSkKKwor
ICAgICwgbV9zb3VyY2VVUkxEaXJlY3RpdmUoY2FjaGVkQ29kZUJsb2NrLnNvdXJjZVVSTERpcmVj
dGl2ZShkZWNvZGVyKSkKKyAgICAsIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShjYWNoZWRD
b2RlQmxvY2suc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShkZWNvZGVyKSkKKworICAgICwgbV91
c2VzRXZhbChjYWNoZWRDb2RlQmxvY2sudXNlc0V2YWwoKSkKKyAgICAsIG1faXNTdHJpY3RNb2Rl
KGNhY2hlZENvZGVCbG9jay5pc1N0cmljdE1vZGUoKSkKKyAgICAsIG1faXNDb25zdHJ1Y3Rvcihj
YWNoZWRDb2RlQmxvY2suaXNDb25zdHJ1Y3RvcigpKQorICAgICwgbV9oYXNDYXB0dXJlZFZhcmlh
YmxlcyhjYWNoZWRDb2RlQmxvY2suaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSkKKyAgICAsIG1faXNC
dWlsdGluRnVuY3Rpb24oY2FjaGVkQ29kZUJsb2NrLmlzQnVpbHRpbkZ1bmN0aW9uKCkpCisgICAg
LCBtX3N1cGVyQmluZGluZyhjYWNoZWRDb2RlQmxvY2suc3VwZXJCaW5kaW5nKCkpCisgICAgLCBt
X3NjcmlwdE1vZGUoY2FjaGVkQ29kZUJsb2NrLnNjcmlwdE1vZGUoKSkKKyAgICAsIG1faXNBcnJv
d0Z1bmN0aW9uQ29udGV4dChjYWNoZWRDb2RlQmxvY2suaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgp
KQorICAgICwgbV9pc0NsYXNzQ29udGV4dChjYWNoZWRDb2RlQmxvY2suaXNDbGFzc0NvbnRleHQo
KSkKKyAgICAsIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyhjYWNoZWRDb2RlQmxv
Y2sud2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpKQorICAgICwgbV9jb25zdHJ1Y3Rv
cktpbmQoY2FjaGVkQ29kZUJsb2NrLmNvbnN0cnVjdG9yS2luZCgpKQorICAgICwgbV9kZXJpdmVk
Q29udGV4dFR5cGUoY2FjaGVkQ29kZUJsb2NrLmRlcml2ZWRDb250ZXh0VHlwZSgpKQorICAgICwg
bV9ldmFsQ29udGV4dFR5cGUoY2FjaGVkQ29kZUJsb2NrLmV2YWxDb250ZXh0VHlwZSgpKQorICAg
ICwgbV9oYXNUYWlsQ2FsbHMoY2FjaGVkQ29kZUJsb2NrLmhhc1RhaWxDYWxscygpKQorICAgICwg
bV9saW5lQ291bnQoY2FjaGVkQ29kZUJsb2NrLmxpbmVDb3VudCgpKQorICAgICwgbV9lbmRDb2x1
bW4oY2FjaGVkQ29kZUJsb2NrLmVuZENvbHVtbigpKQorICAgICwgbV9udW1WYXJzKGNhY2hlZENv
ZGVCbG9jay5udW1WYXJzKCkpCisgICAgLCBtX251bUNhbGxlZUxvY2FscyhjYWNoZWRDb2RlQmxv
Y2subnVtQ2FsbGVlTG9jYWxzKCkpCisgICAgLCBtX251bVBhcmFtZXRlcnMoY2FjaGVkQ29kZUJs
b2NrLm51bVBhcmFtZXRlcnMoKSkKKyAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZl
YXR1cmVzKCkpCisgICAgLCBtX3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKCkp
CisgICAgLCBtX2NvZGVUeXBlKGNhY2hlZENvZGVCbG9jay5jb2RlVHlwZSgpKQorICAgICwgbV9y
YXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURhdGEoZGVjb2RlcikpCit7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29k
ZUJsb2NrPENvZGVCbG9ja1R5cGU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVW5saW5rZWRD
b2RlQmxvY2smIGNvZGVCbG9jaykgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBMaW5r
VGltZUNvbnN0YW50Q291bnQ7IGktLTspCisgICAgICAgIGNvZGVCbG9jay5tX2xpbmtUaW1lQ29u
c3RhbnRzW2ldID0gbV9saW5rVGltZUNvbnN0YW50c1tpXTsKKworICAgIG1fbWV0YWRhdGEuZGVj
b2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhKTsKKyAgICBtX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9ucyk7CisgICAgbV9jb25zdGFudFJlZ2lzdGVycy5kZWNvZGUoZGVjb2RlciwgY29k
ZUJsb2NrLm1fY29uc3RhbnRSZWdpc3RlcnMsICZjb2RlQmxvY2spOworICAgIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgIG1fZXhwcmVzc2lvbkluZm8uZGVj
b2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2V4cHJlc3Npb25JbmZvKTsKKyAgICBtX291dE9mTGlu
ZUp1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9vdXRPZkxpbmVKdW1wVGFy
Z2V0cyk7CisgICAgbV9qdW1wVGFyZ2V0cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fanVt
cFRhcmdldHMpOworICAgIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5kZWNvZGUoZGVjb2Rlciwg
Y29kZUJsb2NrLm1fY29uc3RhbnRJZGVudGlmaWVyU2V0cyk7CisgICAgbV9pZGVudGlmaWVycy5k
ZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1faWRlbnRpZmllcnMpOworICAgIG1fYml0VmVjdG9y
cy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fYml0VmVjdG9ycyk7CisgICAgbV9mdW5jdGlv
bkRlY2xzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkRlY2xzLCAmY29kZUJs
b2NrKTsKKyAgICBtX2Z1bmN0aW9uRXhwcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2Z1
bmN0aW9uRXhwcnMsICZjb2RlQmxvY2spOworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIs
IGNvbnN0IENhY2hlZFByb2dyYW1Db2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJh
c2UoZGVjb2RlciwgZGVjb2Rlci52bSgpLnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERl
Y29kZXImIGRlY29kZXIsIGNvbnN0IENhY2hlZE1vZHVsZUNvZGVCbG9jayYgY2FjaGVkQ29kZUJs
b2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7Cit9CisKK0FM
V0FZU19JTkxJTkUgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2so
RGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkRXZhbENvZGVCbG9jayYgY2FjaGVkQ29kZUJs
b2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRFdmFsQ29kZUJs
b2NrU3RydWN0dXJlLmdldCgpLCBjYWNoZWRDb2RlQmxvY2spCit7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSYgZXhlY3V0YWJsZSkKK3sKKyAgICBt
X2ZpcnN0TGluZU9mZnNldCA9IGV4ZWN1dGFibGUubV9maXJzdExpbmVPZmZzZXQ7CisgICAgbV9s
aW5lQ291bnQgPSBleGVjdXRhYmxlLm1fbGluZUNvdW50OworICAgIG1fdW5saW5rZWRGdW5jdGlv
bk5hbWVTdGFydCA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0OworICAg
IG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLm1fdW5saW5rZWRCb2R5U3Rh
cnRDb2x1bW47CisgICAgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW4gPSBleGVjdXRhYmxlLm1fdW5s
aW5rZWRCb2R5RW5kQ29sdW1uOworICAgIG1fc3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fc3Rh
cnRPZmZzZXQ7CisgICAgbV9zb3VyY2VMZW5ndGggPSBleGVjdXRhYmxlLm1fc291cmNlTGVuZ3Ro
OworICAgIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3BhcmFtZXRlcnNT
dGFydE9mZnNldDsKKyAgICBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUu
bV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0
ID0gZXhlY3V0YWJsZS5tX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAgbV9wYXJhbWV0ZXJD
b3VudCA9IGV4ZWN1dGFibGUubV9wYXJhbWV0ZXJDb3VudDsKKworICAgIG1fZmVhdHVyZXMgPSBl
eGVjdXRhYmxlLm1fZmVhdHVyZXM7CisgICAgbV9zb3VyY2VQYXJzZU1vZGUgPSBleGVjdXRhYmxl
Lm1fc291cmNlUGFyc2VNb2RlOworCisgICAgbV9pc0luU3RyaWN0Q29udGV4dCA9IGV4ZWN1dGFi
bGUubV9pc0luU3RyaWN0Q29udGV4dDsKKyAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gZXhl
Y3V0YWJsZS5tX2hhc0NhcHR1cmVkVmFyaWFibGVzOworICAgIG1faXNCdWlsdGluRnVuY3Rpb24g
PSBleGVjdXRhYmxlLm1faXNCdWlsdGluRnVuY3Rpb247CisgICAgbV9pc0J1aWx0aW5EZWZhdWx0
Q2xhc3NDb25zdHJ1Y3RvciA9IGV4ZWN1dGFibGUubV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25z
dHJ1Y3RvcjsKKyAgICBtX2NvbnN0cnVjdEFiaWxpdHkgPSBleGVjdXRhYmxlLm1fY29uc3RydWN0
QWJpbGl0eTsKKyAgICBtX2NvbnN0cnVjdG9yS2luZCA9IGV4ZWN1dGFibGUubV9jb25zdHJ1Y3Rv
cktpbmQ7CisgICAgbV9mdW5jdGlvbk1vZGUgPSBleGVjdXRhYmxlLm1fZnVuY3Rpb25Nb2RlOwor
ICAgIG1fc2NyaXB0TW9kZSA9IGV4ZWN1dGFibGUubV9zY3JpcHRNb2RlOworICAgIG1fc3VwZXJC
aW5kaW5nID0gZXhlY3V0YWJsZS5tX3N1cGVyQmluZGluZzsKKyAgICBtX2Rlcml2ZWRDb250ZXh0
VHlwZSA9IGV4ZWN1dGFibGUubV9kZXJpdmVkQ29udGV4dFR5cGU7CisKKyAgICBtX2NsYXNzU291
cmNlLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1fY2xhc3NTb3VyY2UpOworCisgICAgbV9u
YW1lLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm5hbWUoKSk7CisgICAgbV9lY21hTmFtZS5l
bmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5lY21hTmFtZSgpKTsKKyAgICBtX2luZmVycmVkTmFt
ZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5pbmZlcnJlZE5hbWUoKSk7CisKKyAgICBtX3Bh
cmVudFNjb3BlVERaVmFyaWFibGVzLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLnBhcmVudFNj
b3BlVERaVmFyaWFibGVzKCkpOworCisgICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZW5j
b2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwpOworICAg
IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFi
bGUubV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cit7CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCBl
bnY7CisgICAgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5kZWNvZGUoZGVjb2RlciwgZW52KTsK
KworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGRlY29kZXIudm0o
KS5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoZGVjb2RlciwgZW52LCAqdGhpcyk7
CisgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKworICAgIG1f
Y2xhc3NTb3VyY2UuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fY2xhc3NTb3VyY2UpOwor
ICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxl
LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCwgZXhlY3V0YWJsZSk7CisgICAgbV91bmxpbmtl
ZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV91bmxp
bmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCwgZXhlY3V0YWJsZSk7CisKKyAgICByZXR1cm4gZXhl
Y3V0YWJsZTsKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYgZGVjb2RlciwgVmFyaWFibGVFbnZp
cm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSYgY2FjaGVkRXhlY3V0YWJsZSkKKyAgICA6IEJhc2UoZGVjb2Rlci52bSgpLCBkZWNv
ZGVyLnZtKCkudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAg
LCBtX2ZpcnN0TGluZU9mZnNldChjYWNoZWRFeGVjdXRhYmxlLmZpcnN0TGluZU9mZnNldCgpKQor
ICAgICwgbV9saW5lQ291bnQoY2FjaGVkRXhlY3V0YWJsZS5saW5lQ291bnQoKSkKKyAgICAsIG1f
dW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydChjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkRnVuY3Rp
b25OYW1lU3RhcnQoKSkKKyAgICAsIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW4oY2FjaGVkRXhl
Y3V0YWJsZS51bmxpbmtlZEJvZHlTdGFydENvbHVtbigpKQorICAgICwgbV91bmxpbmtlZEJvZHlF
bmRDb2x1bW4oY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEJvZHlFbmRDb2x1bW4oKSkKKyAgICAs
IG1fc3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5zdGFydE9mZnNldCgpKQorICAgICwgbV9z
b3VyY2VMZW5ndGgoY2FjaGVkRXhlY3V0YWJsZS5zb3VyY2VMZW5ndGgoKSkKKyAgICAsIG1fcGFy
YW1ldGVyc1N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUucGFyYW1ldGVyc1N0YXJ0T2Zmc2V0
KCkpCisgICAgLCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnR5
cGVQcm9maWxpbmdTdGFydE9mZnNldCgpKQorICAgICwgbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0
KGNhY2hlZEV4ZWN1dGFibGUudHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKQorICAgICwgbV9wYXJh
bWV0ZXJDb3VudChjYWNoZWRFeGVjdXRhYmxlLnBhcmFtZXRlckNvdW50KCkpCisgICAgLCBtX2Zl
YXR1cmVzKGNhY2hlZEV4ZWN1dGFibGUuZmVhdHVyZXMoKSkKKyAgICAsIG1fc291cmNlUGFyc2VN
b2RlKGNhY2hlZEV4ZWN1dGFibGUuc291cmNlUGFyc2VNb2RlKCkpCisgICAgLCBtX2lzSW5TdHJp
Y3RDb250ZXh0KGNhY2hlZEV4ZWN1dGFibGUuaXNJblN0cmljdENvbnRleHQoKSkKKyAgICAsIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXMoY2FjaGVkRXhlY3V0YWJsZS5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpKQorICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihjYWNoZWRFeGVjdXRhYmxlLmlzQnVpbHRp
bkZ1bmN0aW9uKCkpCisgICAgLCBtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKGNh
Y2hlZEV4ZWN1dGFibGUuaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IoKSkKKyAgICAs
IG1fY29uc3RydWN0QWJpbGl0eShjYWNoZWRFeGVjdXRhYmxlLmNvbnN0cnVjdEFiaWxpdHkoKSkK
KyAgICAsIG1fY29uc3RydWN0b3JLaW5kKGNhY2hlZEV4ZWN1dGFibGUuY29uc3RydWN0b3JLaW5k
KCkpCisgICAgLCBtX2Z1bmN0aW9uTW9kZShjYWNoZWRFeGVjdXRhYmxlLmZ1bmN0aW9uTW9kZSgp
KQorICAgICwgbV9zY3JpcHRNb2RlKGNhY2hlZEV4ZWN1dGFibGUuc2NyaXB0TW9kZSgpKQorICAg
ICwgbV9zdXBlckJpbmRpbmcoY2FjaGVkRXhlY3V0YWJsZS5zdXBlckJpbmRpbmcoKSkKKyAgICAs
IG1fZGVyaXZlZENvbnRleHRUeXBlKGNhY2hlZEV4ZWN1dGFibGUuZGVyaXZlZENvbnRleHRUeXBl
KCkpCisKKyAgICAsIG1fbmFtZShjYWNoZWRFeGVjdXRhYmxlLm5hbWUoZGVjb2RlcikpCisgICAg
LCBtX2VjbWFOYW1lKGNhY2hlZEV4ZWN1dGFibGUuZWNtYU5hbWUoZGVjb2RlcikpCisgICAgLCBt
X2luZmVycmVkTmFtZShjYWNoZWRFeGVjdXRhYmxlLmluZmVycmVkTmFtZShkZWNvZGVyKSkKKwor
ICAgICwgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcyhkZWNvZGVyLnZtKCkubV9jb21wYWN0VmFy
aWFibGVNYXAtPmdldChwYXJlbnRTY29wZVREWlZhcmlhYmxlcykpCit7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJs
b2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5r
ZWRDb2RlQmxvY2smIGNvZGVCbG9jaykKK3sKKyAgICBtX3RoaXNSZWdpc3RlciA9IGNvZGVCbG9j
ay5tX3RoaXNSZWdpc3RlcjsKKyAgICBtX3Njb3BlUmVnaXN0ZXIgPSBjb2RlQmxvY2subV9zY29w
ZVJlZ2lzdGVyOworICAgIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIgPSBjb2RlQmxvY2subV9nbG9i
YWxPYmplY3RSZWdpc3RlcjsKKyAgICBtX3VzZXNFdmFsID0gY29kZUJsb2NrLm1fdXNlc0V2YWw7
CisgICAgbV9pc1N0cmljdE1vZGUgPSBjb2RlQmxvY2subV9pc1N0cmljdE1vZGU7CisgICAgbV9p
c0NvbnN0cnVjdG9yID0gY29kZUJsb2NrLm1faXNDb25zdHJ1Y3RvcjsKKyAgICBtX2hhc0NhcHR1
cmVkVmFyaWFibGVzID0gY29kZUJsb2NrLm1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CisgICAgbV9p
c0J1aWx0aW5GdW5jdGlvbiA9IGNvZGVCbG9jay5tX2lzQnVpbHRpbkZ1bmN0aW9uOworICAgIG1f
c3VwZXJCaW5kaW5nID0gY29kZUJsb2NrLm1fc3VwZXJCaW5kaW5nOworICAgIG1fc2NyaXB0TW9k
ZSA9IGNvZGVCbG9jay5tX3NjcmlwdE1vZGU7CisgICAgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0
ID0gY29kZUJsb2NrLm1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dDsKKyAgICBtX2lzQ2xhc3NDb250
ZXh0ID0gY29kZUJsb2NrLm1faXNDbGFzc0NvbnRleHQ7CisgICAgbV93YXNDb21waWxlZFdpdGhE
ZWJ1Z2dpbmdPcGNvZGVzID0gY29kZUJsb2NrLm1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlczsKKyAgICBtX2NvbnN0cnVjdG9yS2luZCA9IGNvZGVCbG9jay5tX2NvbnN0cnVjdG9yS2lu
ZDsKKyAgICBtX2Rlcml2ZWRDb250ZXh0VHlwZSA9IGNvZGVCbG9jay5tX2Rlcml2ZWRDb250ZXh0
VHlwZTsKKyAgICBtX2V2YWxDb250ZXh0VHlwZSA9IGNvZGVCbG9jay5tX2V2YWxDb250ZXh0VHlw
ZTsKKyAgICBtX2hhc1RhaWxDYWxscyA9IGNvZGVCbG9jay5tX2hhc1RhaWxDYWxsczsKKyAgICBt
X2xpbmVDb3VudCA9IGNvZGVCbG9jay5tX2xpbmVDb3VudDsKKyAgICBtX2VuZENvbHVtbiA9IGNv
ZGVCbG9jay5tX2VuZENvbHVtbjsKKyAgICBtX251bVZhcnMgPSBjb2RlQmxvY2subV9udW1WYXJz
OworICAgIG1fbnVtQ2FsbGVlTG9jYWxzID0gY29kZUJsb2NrLm1fbnVtQ2FsbGVlTG9jYWxzOwor
ICAgIG1fbnVtUGFyYW1ldGVycyA9IGNvZGVCbG9jay5tX251bVBhcmFtZXRlcnM7CisgICAgbV9m
ZWF0dXJlcyA9IGNvZGVCbG9jay5tX2ZlYXR1cmVzOworICAgIG1fcGFyc2VNb2RlID0gY29kZUJs
b2NrLm1fcGFyc2VNb2RlOworICAgIG1fY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaS0tOykKKyAg
ICAgICAgbV9saW5rVGltZUNvbnN0YW50c1tpXSA9IGNvZGVCbG9jay5tX2xpbmtUaW1lQ29uc3Rh
bnRzW2ldOworCisgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0
YWRhdGEpOworICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVE
YXRhKTsKKworICAgIG1fc291cmNlVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9zb3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsKKyAgICBtX3NvdXJjZU1hcHBpbmdVUkxE
aXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3NvdXJjZVVSTERpcmVjdGl2ZS5p
bXBsKCkpOworCisgICAgbV9pbnN0cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X2luc3RydWN0aW9ucy5nZXQoKSk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5l
bmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMpOwor
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0
YW50UmVnaXN0ZXJzKTsKKyAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5l
bmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKTsKKyAgICBtX2V4cHJlc3Npb25JbmZvLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9l
eHByZXNzaW9uSW5mbyk7CisgICAgbV9qdW1wVGFyZ2V0cy5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fanVtcFRhcmdldHMpOworICAgIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX291dE9mTGluZUp1bXBUYXJnZXRzKTsKKworICAgIG1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0cy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRJZGVu
dGlmaWVyU2V0cyk7CisgICAgbV9pZGVudGlmaWVycy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2Nr
Lm1faWRlbnRpZmllcnMpOworICAgIG1fYml0VmVjdG9ycy5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fYml0VmVjdG9ycyk7CisgICAgbV9mdW5jdGlvbkRlY2xzLmVuY29kZShlbmNvZGVyLCBj
b2RlQmxvY2subV9mdW5jdGlvbkRlY2xzKTsKKyAgICBtX2Z1bmN0aW9uRXhwcnMuZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRXhwcnMpOworfQorCitjbGFzcyBDYWNoZWRTb3Vy
Y2VDb2RlS2V5IDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2VDb2RlS2V5PiB7CitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlQ29kZUtleSYg
a2V5KQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VDb2RlLmVuY29kZShlbmNvZGVyLCBrZXkubV9z
b3VyY2VDb2RlKTsKKyAgICAgICAgbV9uYW1lLmVuY29kZShlbmNvZGVyLCBrZXkubV9uYW1lKTsK
KyAgICAgICAgbV9mbGFncyA9IGtleS5tX2ZsYWdzLm1fZmxhZ3M7CisgICAgICAgIG1faGFzaCA9
IGtleS5oYXNoKCk7CisgICAgICAgIG1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQ
b3NpdGlvbiA9IGtleS5tX2Z1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb247
CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlQ29kZUtl
eSYga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgbV9zb3VyY2VDb2RlLmRlY29kZShkZWNvZGVy
LCBrZXkubV9zb3VyY2VDb2RlKTsKKyAgICAgICAgbV9uYW1lLmRlY29kZShkZWNvZGVyLCBrZXku
bV9uYW1lKTsKKyAgICAgICAga2V5Lm1fZmxhZ3MubV9mbGFncyA9IG1fZmxhZ3M7CisgICAgICAg
IGtleS5tX2hhc2ggPSBtX2hhc2g7CisgICAgICAgIGtleS5tX2Z1bmN0aW9uQ29uc3RydWN0b3JQ
YXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBtX2Z1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5k
UG9zaXRpb247CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFVubGlua2VkU291cmNlQ29k
ZSBtX3NvdXJjZUNvZGU7CisgICAgQ2FjaGVkU3RyaW5nIG1fbmFtZTsKKyAgICB1bnNpZ25lZCBt
X2ZsYWdzOworICAgIHVuc2lnbmVkIG1faGFzaDsKKyAgICBpbnQgbV9mdW5jdGlvbkNvbnN0cnVj
dG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworfTsKKworY2xhc3MgR2VuZXJpY0NhY2hlRW50cnkg
eworcHVibGljOgorICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtlZENvZGVCbG9j
ayo+IGRlY29kZShEZWNvZGVyJikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBDYWNoZWRDb2Rl
QmxvY2tUYWcgbV90YWc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9j
a1R5cGU+CitjbGFzcyBDYWNoZUVudHJ5IDogcHVibGljIEdlbmVyaWNDYWNoZUVudHJ5IHsKK3B1
YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBzdGQ6OnBhaXI8U291cmNl
Q29kZUtleSwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4gcGFpcikKKyAgICB7CisgICAg
ICAgIG1fdGFnID0gQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRDb2RlQmxvY2tUeXBl
Pjo6dGFnOworICAgICAgICBtX2tleS5lbmNvZGUoZW5jb2RlciwgcGFpci5maXJzdCk7CisgICAg
ICAgIG1fY29kZUJsb2NrLmVuY29kZShlbmNvZGVyLCBwYWlyLnNlY29uZCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIGZyaWVuZCBHZW5lcmljQ2FjaGVFbnRyeTsKKworICAgIHN0ZDo6cGFpcjxT
b3VyY2VDb2RlS2V5LCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RhZyA9PSBDYWNoZWRDb2RlQmxv
Y2tUeXBlSW1wbDxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp0YWcpOworICAgICAgICBTb3VyY2VD
b2RlS2V5IGRlY29kZWRLZXk7CisgICAgICAgIG1fa2V5LmRlY29kZShkZWNvZGVyLCBkZWNvZGVk
S2V5KTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShkZWNvZGVkS2V5KSwgbV9jb2RlQmxvY2su
ZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQorCisgICAgQ2FjaGVkU291cmNlQ29kZUtleSBtX2tl
eTsKKyAgICBDYWNoZWRQdHI8Q2FjaGVkQ29kZUJsb2NrVHlwZTxVbmxpbmtlZENvZGVCbG9ja1R5
cGU+PiBtX2NvZGVCbG9jazsKK307CisKK3N0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtl
ZENvZGVCbG9jayo+IEdlbmVyaWNDYWNoZUVudHJ5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlcikg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdGFnKSB7CisgICAgY2FzZSBDYWNoZWRQcm9ncmFtQ29k
ZUJsb2NrVGFnOgorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDYWNoZUVu
dHJ5PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4qPih0aGlzKS0+ZGVjb2RlKGRlY29kZXIpOwor
ICAgIGNhc2UgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFnOgorICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBDYWNoZUVudHJ5PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
az4qPih0aGlzKS0+ZGVjb2RlKGRlY29kZXIpOworICAgIGNhc2UgQ2FjaGVkRXZhbENvZGVCbG9j
a1RhZzoKKyAgICAgICAgLy8gV2UgZG8gbm90IGNhY2hlIGV2YWwgY29kZSBibG9ja3MKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisjaWYgQ09NUElMRVIoTVNW
QykKKyAgICAvLyBXaXRob3V0IHRoaXMsIE1TVkMgd2lsbCBjb21wbGFpbiB0aGF0IHRoaXMgcGF0
aCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4KKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBDYWNoZUVudHJ5PFVubGlua2VkRXZhbENvZGVCbG9jaz4qPih0aGlzKS0+ZGVjb2RlKGRl
Y29kZXIpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KK3ZvaWQgZW5jb2RlQ29kZUJsb2NrKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJj
ZUNvZGVLZXkmIGtleSwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICBhdXRvKiBlbnRyeSA9IGVuY29kZXIudGVtcGxhdGUgbWFsbG9jPENhY2hlRW50cnk8VW5saW5r
ZWRDb2RlQmxvY2tUeXBlPj4oKTsKKyAgICBlbnRyeS0+ZW5jb2RlKGVuY29kZXIsICB7IGtleSwg
anNDYXN0PGNvbnN0IFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGNvZGVCbG9jaykgfSk7Cit9CisK
K3N0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29kZUJsb2NrKFZN
JiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gY29kZUJsb2Nr
LT5jbGFzc0luZm8odm0pOworCisgICAgRW5jb2RlciBlbmNvZGVyKHZtKTsKKyAgICBpZiAoY2xh
c3NJbmZvID09IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICBlbmNv
ZGVDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBrZXksIGNvZGVC
bG9jayk7CisgICAgZWxzZSBpZiAoY2xhc3NJbmZvID09IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jazo6aW5mbygpKQorICAgICAgICBlbmNvZGVDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBrZXksIGNvZGVCbG9jayk7CisgICAgZWxzZQorICAg
ICAgICBBU1NFUlQoY2xhc3NJbmZvID09IFVubGlua2VkRXZhbENvZGVCbG9jazo6aW5mbygpKTsK
KworICAgIHJldHVybiBlbmNvZGVyLnJlbGVhc2UoKTsKK30KKworVW5saW5rZWRDb2RlQmxvY2sq
IGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNv
bnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgICAgY29uc3QgYXV0byogY2FjaGVk
RW50cnkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdlbmVyaWNDYWNoZUVudHJ5Kj4oYnVmZmVy
KTsKKyAgICBEZWNvZGVyIGRlY29kZXIodm0sIGJ1ZmZlciwgc2l6ZSk7CisgICAgc3RkOjpwYWly
PFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZW50cnk7CisgICAgeworICAgICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgICAgIGVudHJ5ID0gY2FjaGVkRW50cnkt
PmRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKKyAgICBpZiAoZW50cnkuZmlyc3QgIT0ga2V5KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZW50cnkuc2Vjb25kOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJjYjhhY2I2Y2U1NzBlOTcyNjM4OWMyNmQ3MGJjYmEyMWRhOGQ0
YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ2FzdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNvdXJj
ZUNvZGVLZXk7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKKworc3RkOjpwYWlyPE1hbGxvY1B0
cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mLCBjb25zdCBTb3VyY2VDb2Rl
S2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqKTsKK1VubGlua2VkQ29kZUJsb2NrKiBkZWNv
ZGVDb2RlQmxvY2tJbXBsKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IHZvaWQqLCBz
aXplX3QpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KK1Vu
bGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNl
Q29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQoreworICAgIHJl
dHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZGVjb2RlQ29kZUJsb2NrSW1wbCh2
bSwga2V5LCBidWZmZXIsIHNpemUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAppbmRleCA0NjAxNzkyMWE0NmVm
YzY0MTcyNWQwYTIzNTI1MjkwMzVhZjVmM2FkLi5jMzJkMjA0YjZjZDg5NjgxODFjYjBkMWRmMGVh
YjgzZWMxMTgxOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNo
ZS5jcHAKQEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2Uo
KQogCiAgICAgd2hpbGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgfHwgIWNhblBydW5lUXVpY2tseSgp
KSB7CiAgICAgICAgIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKKworICAg
ICAgICB3cml0ZUNvZGVCbG9jaygqaXQtPnZhbHVlLmNlbGwtPnZtKCksIGl0LT5rZXksIGl0LT52
YWx1ZSk7CisKICAgICAgICAgbV9zaXplIC09IGl0LT5rZXkubGVuZ3RoKCk7CiAgICAgICAgIG1f
bWFwLnJlbW92ZShpdCk7CiAgICAgfQpAQCAtNTksOSArNjIsOCBAQCBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0mIHZtLCBFeGVj
dXRhYmxlVAogICAgICAgICB2bS50eXBlUHJvZmlsZXIoKSA/IFR5cGVQcm9maWxlckVuYWJsZWQ6
OlllcyA6IFR5cGVQcm9maWxlckVuYWJsZWQ6Ok5vLCAKICAgICAgICAgdm0uY29udHJvbEZsb3dQ
cm9maWxlcigpID8gQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENvbnRyb2xGbG93
UHJvZmlsZXJFbmFibGVkOjpObywKICAgICAgICAgV1RGOjpudWxsb3B0KTsKLSAgICBTb3VyY2VD
b2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkp
OwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewotICAgICAgICBV
bmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0ganNDYXN0PFVubGlua2Vk
Q29kZUJsb2NrVHlwZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0
ZUFnZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkpOworICAgIGlmICh1bmxpbmtlZENv
ZGVCbG9jayAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewogICAgICAgICB1bnNpZ25lZCBs
aW5lQ291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bGluZUNvdW50KCk7CiAgICAgICAgIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRDb2RlQmxvY2stPnN0YXJ0Q29sdW1uKCkgKyBzb3Vy
Y2Uuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpOwogICAgICAgICBib29sIGVuZENvbHVtbklz
T25TdGFydExpbmUgPSAhbGluZUNvdW50OwpAQCAtNzEsOSArNzMsOSBAQCBVbmxpbmtlZENvZGVC
bG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0mIHZtLCBF
eGVjdXRhYmxlVAogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlTWFwcGluZ1VS
TERpcmVjdGl2ZSh1bmxpbmtlZENvZGVCbG9jay0+c291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSgp
KTsKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogICAgIH0KLSAgICAKKwogICAg
IFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7Ci0gICAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8
VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1dGFibGUsIHNv
dXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENv
bnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIHVubGlua2VkQ29kZUJsb2NrID0g
Z2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4ZWN1dGFi
bGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBk
ZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7
CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkp
CiAgICAgICAgIG1fc291cmNlQ29kZS5hZGRDYWNoZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2bSwg
dW5saW5rZWRDb2RlQmxvY2ssIG1fc291cmNlQ29kZS5hZ2UoKSkpOwpAQCAtMTEwLDkgKzExMiw4
IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xv
YmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2CiAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8g
VHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sIAogICAg
ICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxl
ZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAgICBmdW5jdGlv
bkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKLSAgICBTb3VyY2VDb2RlVmFsdWUq
IGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkpOwotICAgIGlm
IChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewotICAgICAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVBZ2U8VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBrZXkpOworICAgIGlmIChleGVjdXRhYmxlICYm
IE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAgIHNvdXJjZS5wcm92aWRlcigpLT5z
ZXRTb3VyY2VVUkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291cmNlVVJMRGlyZWN0aXZlKCkpOwog
ICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShl
eGVjdXRhYmxlLT5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKCkpOwogICAgICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKQEAgLTE1NSw0ICsxNTYsMTAgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHYK
ICAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOwogfQogCit2b2lkIENvZGVDYWNoZTo6d3Jp
dGUoVk0mIHZtKQoreworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX3NvdXJjZUNvZGUpCisg
ICAgICAgIHdyaXRlQ29kZUJsb2NrKHZtLCBpdC5rZXksIGl0LnZhbHVlKTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRleCA4YTQ0MTlmOTZjYThm
YTRhNjI5YmUwZTlhNzgyN2NiYWY2OGNmZjg2Li45OTM5NWYyY2QyODQxMTM5YTAzNWM4YjE1ODli
YjkzOWM2OWM1NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUu
aApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZUluZm8uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCkBA
IC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC04OSwx
MyArOTEsNzYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VDb2RlVmFsdWUq
IGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisgICAgaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgaXRlcmF0b3IgZW5k
KCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURp
c2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsKKyNpZiBPUyhE
QVJXSU4pCisgICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRpc2tDYWNo
ZVBhdGgoKTsKKyAgICAgICAgaWYgKCFjYWNoZVBhdGgpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICB1bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICAgICAgY2hh
ciBmaWxlbmFtZVs1MTJdOworICAgICAgICBpbnQgY291bnQgPSBzbnByaW50ZihmaWxlbmFtZSwg
NTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOworICAgICAgICBpZiAoY291bnQg
PCAwIHx8IGNvdW50ID4gNTEyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworICAgICAgICBpZiAoZmQgPT0g
LTEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbnQgcmMgPSBmbG9j
ayhmZCwgTE9DS19TSCB8IExPQ0tfTkIpOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAg
IGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAg
ICAgICAgc3RydWN0IHN0YXQgc2I7CisgICAgICAgIGludCByZXMgPSBmc3RhdChmZCwgJnNiKTsK
KyAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOwor
ICAgICAgICBpZiAocmVzIHx8ICFzaXplKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgY29uc3Qgdm9pZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JF
QUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
dW5saW5rZWRDb2RlQmxvY2sgPSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBl
Pih2bSwga2V5LCBidWZmZXIsIHNpemUpOworCisgICAgICAgIGlmICghdW5saW5rZWRDb2RlQmxv
Y2spCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhZGRDYWNoZShrZXks
IFNvdXJjZUNvZGVWYWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fYWdlKSk7CisgICAgICAg
IHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh2
bSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyNlbmRpZgorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KKyAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVC
bG9jaywgVW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxVbmxp
bmtlZENvZGVCbG9ja1R5cGUsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVlLCBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqPgorICAgIGZldGNoRnJvbURpc2soVk0mIHZtLCBjb25zdCBTb3VyY2VD
b2RlS2V5JiBrZXkpCisgICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGNvZGVC
bG9jayA9IGZldGNoRnJvbURpc2tJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7
CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpKSkKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBjb2RlQmxv
Y2s7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGQ6OmVuYWJsZV9p
Zl90PCFzdGQ6OmlzX2Jhc2Vfb2Y8VW5saW5rZWRDb2RlQmxvY2ssIFQ+Ojp2YWx1ZSB8fCBzdGQ6
OmlzX3NhbWU8VCwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFQqPgorICAgIGZldGNo
RnJvbURpc2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JikgeyByZXR1cm4gbnVsbHB0cjsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorICAgIFVubGlu
a2VkQ29kZUJsb2NrVHlwZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKFZNJiB2bSwgY29uc3QgU291
cmNlQ29kZUtleSYga2V5KQogICAgIHsKICAgICAgICAgcHJ1bmUoKTsKIAogICAgICAgICBpdGVy
YXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAoZmluZFJlc3Vs
dCA9PSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIGZldGNoRnJvbURpc2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5KTsK
IAogICAgICAgICBpbnQ2NF90IGFnZSA9IG1fYWdlIC0gZmluZFJlc3VsdC0+dmFsdWUuYWdlOwog
ICAgICAgICBpZiAoYWdlID4gbV9jYXBhY2l0eSkgewpAQCAtMTE1LDcgKzE4MCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgZmluZFJlc3VsdC0+dmFsdWUuYWdlID0gbV9hZ2U7CiAgICAgICAgIG1fYWdl
ICs9IGtleS5sZW5ndGgoKTsKIAotICAgICAgICByZXR1cm4gJmZpbmRSZXN1bHQtPnZhbHVlOwor
ICAgICAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGZpbmRSZXN1bHQt
PnZhbHVlLmNlbGwuZ2V0KCkpOwogICAgIH0KIAogICAgIEFkZFJlc3VsdCBhZGRDYWNoZShjb25z
dCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYgdmFsdWUpCkBAIC0x
OTcsNiArMjYyLDcgQEAgcHVibGljOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBn
ZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBTb3VyY2VDb2RlJiwgRGVidWdnZXJNb2RlLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9u
Q29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIFBhcnNlckVycm9yJik7CiAKICAgICB2
b2lkIGNsZWFyKCkgeyBtX3NvdXJjZUNvZGUuY2xlYXIoKTsgfQorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgd3JpdGUoVk0mKTsKIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4gCkBAIC0yNTYsNCArMzIy
LDM2IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jayhW
TSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhCiAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJs
b2NrOwogfQogCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29kZUJsb2NrKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFsdWUmIHZhbHVl
KQoreworI2lmIE9TKERBUldJTikKKyAgICBjb25zdCBjaGFyKiBjYWNoZVBhdGggPSBPcHRpb25z
OjpkaXNrQ2FjaGVQYXRoKCk7CisgICAgaWYgKExJS0VMWSghY2FjaGVQYXRoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpzRHluYW1pY0Nh
c3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5nZXQoKSk7CisgICAgaWYgKCFj
b2RlQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGhhc2ggPSBrZXkuaGFz
aCgpOworICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICBpbnQgY291bnQgPSBzbnByaW50Zihm
aWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOworICAgIGlmIChj
b3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6cGFp
cjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2RlQ29kZUJsb2NrKHZt
LCBrZXksIGNvZGVCbG9jayk7CisKKyAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX0NSRUFU
IHwgT19XUk9OTFksIDA2NjYpOworICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9D
S19OQik7CisgICAgaWYgKCFyYykKKyAgICAgICAgOjp3cml0ZShmZCwgcmVzdWx0LmZpcnN0Lmdl
dCgpLCByZXN1bHQuc2Vjb25kKTsKKyAgICBjbG9zZShmZCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKKyNlbmRpZgorfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IGNhNTMxNjM2Yjc4MWU4NjllYTc4Zjc2ZDI1
YjVlNGFlYWQ0MTYxODUuLjJiY2FhOWI2NzYyZDI1MmYwYjMxZWUxYTg5NDljZGQ4Mzc0NjgwMGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKQEAgLTE2ODgs
MTEgKzE2ODgsNiBAQCBib29sIEpTQmlnSW50OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRl
KiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdQogICAgIHJldHVybiB0cnVlOwog
fQogCi1pbmxpbmUgc2l6ZV90IEpTQmlnSW50OjpvZmZzZXRPZkRhdGEoKQotewotICAgIHJldHVy
biBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpTQmlnSW50
KSk7Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEpTQmlnSW50KiBKU0JpZ0lu
dDo6cGFyc2VJbnQoRXhlY1N0YXRlKiBleGVjLCBDaGFyVHlwZSogIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUpCiB7CkBAIC0xNzk1LDExICsxNzkw
LDYgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2
bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
aW5saW5lIEpTQmlnSW50OjpEaWdpdCogSlNCaWdJbnQ6OmRhdGFTdG9yYWdlKCkKLXsKLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRo
aXMpICsgb2Zmc2V0T2ZEYXRhKCkpOwotfQotCiBpbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0IEpTQmln
SW50OjpkaWdpdCh1bnNpZ25lZCBuKQogewogICAgIEFTU0VSVChuIDwgbGVuZ3RoKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5kZXggMmIzYmY5MzA3ZDhkYmJi
MTEwNzUzM2VkODMwMzQ3YmNkZDRhNjEwYi4uZGJiZjYzZGVkMWM4Y2JkNDhlYTdiOWZjYjViMGU4
NTE1YjVmZWE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCkBA
IC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0
dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVk
QmlnSW50OwogCiBwdWJsaWM6CiAKQEAgLTIyOCw4ICsyMjksMTUgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoSlNCaWdJbnQqIHgpOwogCiAgICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRp
YyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCk7Ci0gICAgRGlnaXQqIGRhdGFTdG9yYWdlKCk7CisgICAg
aW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9mKEpTQmlnSW50
KSk7CisgICAgfQorCisgICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOworICAgIH0KIAogICAgIERpZ2l0IGRpZ2l0KHVu
c2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDY2Y2VjM2FmNzlmNmE4MTNkOThi
MzA2NzhlN2Q0ZmRmODZlYzYxMjYuLjk2MmQ4N2U5OTI2ZGFjZTM3NjZmNTk3M2QwOTZkODgyMjdl
MWRlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC01
MTcsNiArNTE3LDEyIEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5NTYKICAg
ICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwogI2VuZGlmCisKKyAgICBpZiAo
IU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQorICAgICAgICBPcHRpb25zOjpkaXNrQ2FjaGVQYXRo
KCkgPSBudWxscHRyOworCisgICAgaWYgKCFPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkpCisgICAg
ICAgIE9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKIH0KIAogdm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRl
eCBlNjdkOTM5M2UwYzI2OGY4OTE3Yzk4MjI5YzFhZjM0OGFlMjFmMzYxLi40OGY2ZTYyYTdhMDJi
OTQxYTljMzFlODgxY2E2Y2IxZjI5ZDIyNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCkBAIC01MDgsNiArNTA4LDggQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2Vi
QXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxzZTsKICAgICB2KGJvb2wsIHRyYWNlTExJbnRFeGVj
dXRpb24sIGZhbHNlLCBDb25maWd1cmFibGUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHRyYWNl
TExJbnRTbG93UGF0aCwgZmFsc2UsIENvbmZpZ3VyYWJsZSwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgdHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYob3B0aW9uU3RyaW5nLCBkaXNrQ2FjaGVQYXRoLCBudWxscHRyLCBSZXN0cmljdGVkLCAi
IikgXAorICAgIHYoYm9vbCwgZm9yY2VEaXNrQ2FjaGUsIGZhbHNlLCBSZXN0cmljdGVkLCAiIikg
XAogCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHAuaAppbmRleCA4M2FhZDM1NjAzOGViMmVjNzZlNmI4YmQzN2M3NDc2Y2VjOTEzNTJl
Li4wM2FkZDQ1ZmI1NTcwNGNmYTAyZDZlNWEyM2NiMDJjODA0N2JiZTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHAuaApAQCAtNDEsNiArNDEsOCBAQCBjbGFzcyBWTTsKIEpT
X0VYUE9SVF9QUklWQVRFIFJlZ0V4cEZsYWdzIHJlZ0V4cEZsYWdzKGNvbnN0IFN0cmluZyYpOwog
CiBjbGFzcyBSZWdFeHAgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBmcmllbmQgY2xhc3Mg
Q2FjaGVkUmVnRXhwOworCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAppbmRleCA0MGU3YzdlYzJmZDYwYjU4NDJh
NTcyODVhYzk3YjBmNmE5NTkzOTVkLi5lODEyMzQyOTdiMGJiOGEwMjU4MDJmMzdhODk4NDcwODhh
NWFlMTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHNUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50c1RhYmxlLmgKQEAgLTM5LDYgKzM5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBt
YWtlcyBzZW5zZSBiZWNhdXNlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcmUgc28gdW5jb21tb24uIFlv
dSdkIGhhdmUgdG8gZG8gc29tZXRoaW5nIGNyYXp5IGxpa2UKIC8vICJkZWxldGUgYXJndW1lbnRz
W2ldIiBvciBzb21lIHZhcmlhbnQgb2YgZGVmaW5lT3duUHJvcGVydHkuCiBjbGFzcyBTY29wZWRB
cmd1bWVudHNUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworICAgIGZyaWVuZCBjbGFzcyBD
YWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZTsKKwogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxs
IEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCmluZGV4IGVkOTgyZTMxZjU1YmJiYzkxNjI4ZDIzNDE3
ODEyYmI0ZjZjNjg3MTEuLjVlZWRlZTZmODE4NmRhZWEzMDQwOTgxM2Q0NTM0NmFjMDc1ZWZkODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAi
V2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
bGltaXRzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgKaW5kZXggMzgyNjQ0MjcwMTU0OTFhMzQ3NjM5MjM1MWU1ZjU2NTZmNmMxMDNkZS4u
NGEzMGYzN2RkNzVhNjMxNTAzNzViODkxZjlkZTgyMTBkNDQzM2YwYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiU3RydWN0
dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCmluZGV4IDkxNTdkNWI4MjkyMDBmYjZhOTY1ZWEz
YmM3ODY5NmU1MzJhOTJiOTUuLjU5NjkxYjJlYzQxZWM3YWU5N2FkNDBjOTg0OTAxNTY0Y2ZmZDQw
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaApAQCAt
NzMsNiArNzMsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hcmtl
cigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50PgogLy8gY29weTogICAgIFN5bWJv
bFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRy
eSB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFN5bWJvbFRhYmxlRW50cnk7CisKIHByaXZhdGU6
CiAgICAgc3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQog
ICAgIHsKQEAgLTQzNiw2ICs0MzgsOCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFp
dHMgOiBIYXNoVHJhaXRzPFN5bWJvbFRhYmxlRW50cnk+IHsKIH07CiAKIGNsYXNzIFN5bWJvbFRh
YmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFN5bWJv
bFRhYmxlOworCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0
cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
aCBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCmluZGV4IDc1NWNkN2E5YWE1NzZjNmY3YTRk
YjE0YzBkOWUzMDJjNzhkYjUxNzguLmI4YmIzNjViNTlkN2ViYWM3OWFjNjg5YTQ0NGRhNTkyNzIz
YzUwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBDYWNoZWRCaXRWZWN0b3I7Cit9CisKIG5hbWVzcGFjZSBXVEYgewogCiAv
LyBUaGlzIGlzIGEgc3BhY2UtZWZmaWNpZW50LCByZXNpemVhYmxlIGJpdHZlY3RvciBjbGFzcy4g
SW4gdGhlIGNvbW1vbiBjYXNlIGl0CkBAIC0zMzgsNiArMzQyLDggQEAgcHVibGljOgogICAgIGl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CiAg
ICAgICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSlNDOjpDYWNoZWRCaXRWZWN0b3I7
CisKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigpCiAgICAgewogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKHZvaWQqKSA8PCAzOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDgyM2IwOGNlNGU0ZjczMWUzNzJlZmVkZGZhOTg0MGY0MGQw
YTA2MDMuLmJhYzhlMjdmZGE5ZWI4NDEzYTUyM2IxNmFiMTllZGRjODE0NDZhNWIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBA
QAorMjAxOS0wMS0xOCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBDYWNoZSBieXRlY29kZSB0byBkaXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MDg0
OTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCB0ZXN0IGhlbHBlciB0byBleGVjdXRlIGJ5dGVjb2RlLWNhY2hlIHRlc3RzOiBpdCBleGVjdXRl
cyBlYWNoIHRlc3QKKyAgICAgICAgdHdpY2UsIHRoZSBmaXJzdCB3aXRoIEpTQ19kaXNrQ2FjaGVQ
YXRoIHNldCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICAgICAgYW5kIHNlY29uZCB3aXRo
IEpTQ19mb3JjZURpc2tDYWNoZT10cnVlIChpbiBhZGRpdGlvbiB0byB0aGUgY2FjaGUgcGF0aCkK
KyAgICAgICAgdG8gZ3VhcmFudGVlIHRoYXQgb25seSB0aGUgZGlzayBjYWNoZSBpcyBiZWluZyB1
c2VkIGFuZCBubyBuZXcKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tzIGFyZSBiZWluZyBjcmVh
dGVkLgorCisgICAgICAgICogU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29k
ZS1jYWNoZS10ZXN0LWhlbHBlcjogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0czoKKwogMjAxOS0wMS0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJlZ3Jlc3Npb24oUFNPTikgVmlldyBiZWNvbWVzIGJsYW5rIGFmdGVyIGNs
aWNrIGEgY3Jvc3Mtc2l0ZSBkb3dubG9hZCBsaW5rCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyIGIvVG9v
bHMvU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10ZXN0LWhl
bHBlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jOGM5MjkyMWRiOGQ0ZGQyNTAyNzQ0MGM2Y2Y0ZmQxZjlmYWY3ZTg4
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVy
cy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlcgpAQCAtMCwwICsxLDQ4IEBACisjIS91c3IvYmlu
L2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAncnVi
eWdlbXMnCityZXF1aXJlICdmaWxldXRpbHMnCityZXF1aXJlICdqc29uJworcmVxdWlyZSAnc2hl
bGx3b3JkcycKK3JlcXVpcmUgJ3RtcGRpcicKKworZGVmIG15c3lzKCpjbWQpCisgICAgcmFpc2Ug
IkNvbW1hbmQgI3tjbWQuaW5zcGVjdH0gZmFpbGVkOiAjeyQ/Lmluc3BlY3R9IiB1bmxlc3Mgc3lz
dGVtKCpjbWQpCitlbmQKKworcGF0aFRvVk0gPSBBUkdWWzBdCitpbnB1dEZpbGUgPSBBUkdWWzFd
CitleHRyYU9wdGlvbnMgPSBBUkdWWzIuLi0xXQorZGlza0NhY2hlUGF0aCA9IERpci5ta3RtcGRp
ciBbaW5wdXRGaWxlLCAnYnl0ZWNvZGUtY2FjaGUnXQorCitiZWdpbgorICAgIEVOVlsiSlNDX2Rp
c2tDYWNoZVBhdGgiXSA9IGRpc2tDYWNoZVBhdGgKKyAgICBteXN5cyhwYXRoVG9WTSwgaW5wdXRG
aWxlLCAqZXh0cmFPcHRpb25zKQorICAgIEVOVlsiSlNDX2ZvcmNlRGlza0NhY2hlIl0gPSAidHJ1
ZSIKKyAgICBteXN5cyhwYXRoVG9WTSwgaW5wdXRGaWxlLCAqZXh0cmFPcHRpb25zKQorZW5zdXJl
CisgICAgRmlsZVV0aWxzLnJtX3JmKGRpc2tDYWNoZVBhdGgpCitlbmQKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCmluZGV4IDYzMjk0MGIzZTRkYTdiNjljZDhlODdmMDE1MWIxMjYxNmU1YmQ1
YmMuLjkxZTI2NjU2NzgxYTljYmMwYTg4YTYzYTRlOWQzODVkZTQ2NTgyYzEgMTAwNzU1Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNjU1LDYgKzY1NSwxNSBAQCBkZWYgcnVuRGVmYXVsdCgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIHJ1bigiZGVmYXVsdCIsICooRlRMX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKK2RlZiBydW5CeXRl
Y29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCisgICAgdW5sZXNzICRob3N0
T1MgPT0gImRhcndpbiIKKyAgICAgICAgc2tpcAorICAgICAgICByZXR1cm4KKyAgICBlbmQKKyAg
ICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucyAr
IEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zCisgICAgYWRkUnVuQ29t
bWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInJ1YnkiLCAocGF0aFRvSGVscGVycyArICJieXRlY29k
ZS1jYWNoZS10ZXN0LWhlbHBlciIpLnRvX3MsIHBhdGhUb1ZNLnRvX3MsICRiZW5jaG1hcmsudG9f
c10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIpCitl
bmQKKwogZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
ICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDAzMzExMjE+CiAgICAgaWYgJHJlbW90ZSBv
ciAoJGFyY2hpdGVjdHVyZSAhfiAveDg2L2kgYW5kICRob3N0T1MgPT0gImRhcndpbiIpCkBAIC03
NTEsNiArNzYwLDcgQEAgZGVmIGRlZmF1bHRSdW4KICAgICAgICAgZGVmYXVsdFF1aWNrUnVuCiAg
ICAgZWxzZQogICAgICAgICBydW5EZWZhdWx0CisgICAgICAgIHJ1bkJ5dGVjb2RlQ2FjaGUKICAg
ICAgICAgaWYgJGppdFRlc3RzCiAgICAgICAgICAgICBydW5Ob0xMSW50CiAgICAgICAgICAgICBy
dW5Ob0NKSVRWYWxpZGF0ZVBoYXNlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359688</attachid>
            <date>2019-01-21 06:27:51 -0800</date>
            <delta_ts>2019-01-21 10:20:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190121152737.patch</filename>
            <type>text/plain</type>
            <size>137516</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
YmM3ZDQ2YWQxODllMGU5NDA3ZGE1OTM1MTc3MTczYWE5MjVjMGI4Li5lOGJlMTEzZTgzMDI5M2Yz
YjU3MDM2MjcwNDcxZjI0MWNhMjU5M2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjAgQEAKKzIwMTktMDEtMTggIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLgorCisgICAgICAgIEVhY2ggY2xhc3MgdGhhdCBjYW4gYmUgc2VyaWFsaXplZCBo
YXMgYSBjb3VudGVycGFydCBpbiBDYWNoZWRUeXBlcywgd2hpY2gKKyAgICAgICAgaGFuZGxlcyB0
aGUgZGVjb2RpbmcgYW5kIGVuY29kaW5nLiBXaGVuIGRlY29kaW5nLCB0aGUgY2FjaGVkIG9iamVj
dHMgYXJlCisgICAgICAgIG1tYXAnZCBmcm9tIGRpc2ssIGJ1dCBvbmx5IHVzZWQgZm9yIGNyZWF0
aW5nIGluc3RhbmNlcyBvZiB0aGUgcmVzcGVjdGl2ZQorICAgICAgICBpbi1tZW1vcnkgdmVyc2lv
biBvZiBlYWNoIG9iamVjdC4gSWRlYWxseSwgdGhlIG1tYXAnZCBvYmplY3RzIHNob3VsZCBiZQor
ICAgICAgICB1c2VkIGF0IHJ1bnRpbWUgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMpOgor
ICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEhhbmRs
ZXJJbmZvOjpVbmxpbmtlZEhhbmRsZXJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvblN0cmVhbS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRTZXRDb25zdGFudCk6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudElkZW50aWZpZXJTZXRzKToKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEdsb2Jh
bENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6VW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRh
dGFUYWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoZnVuY3Rpb25RdWl0KToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZUtleS5oOgor
ICAgICAgICAoSlNDOjpTb3VyY2VDb2RlS2V5OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAg
KiBwYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmg6CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxl
RW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkVuY29kZXI6OkFsbG9jYXRpb246OmJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkVuY29kZXI6OkFsbG9jYXRpb246Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6OkVuY29kZXI6OkFsbG9jYXRpb246OkFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpFbmNv
ZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6dm0pOgorICAgICAgICAoSlND
OjpFbmNvZGVyOjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZzZXRPZik6Cisg
ICAgICAgIChKU0M6OkVuY29kZXI6OmNhY2hlUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6
b2Zmc2V0Rm9yUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAgICAg
IChKU0M6OkVuY29kZXI6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdl
OjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdlOjpidWZmZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
RW5jb2Rlcjo6UGFnZTo6Z2V0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6
YWxsb2NhdGVOZXdQYWdlKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6On5EZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6dm0p
OgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRlY29k
ZXI6OmNhY2hlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6YWRkRmluYWxpemVyKToK
KyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAgICAgICAg
KEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgIChKU0M6
OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFB0
cjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRQdHI6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFdy
aXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFBhaXI6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZElk
ZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2lt
cGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFi
bGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZEJpdFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Qml0VmVjdG9yOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRB
cnJheTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRz
VGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkU3ltYm9sVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZEltbXV0YWJsZUJ1dHRlcmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1t
dXRhYmxlQnV0dGVyZmx5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdF
eHA6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkQmlnSW50OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVl
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1l
dGFkYXRhVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9y
aWdpbjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFRleHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU3RyaW5nU291cmNlUHJvdmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0
cmluZ1NvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNl
UHJvdmlkZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJj
ZUNvZGVTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29k
ZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpmaXJzdExpbmVPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmVD
b3VudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5s
aW5rZWRGdW5jdGlvbk5hbWVTdGFydCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRCb2R5U3RhcnRDb2x1bW4gY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQm9keUVuZENvbHVtbiBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c3RhcnRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNvdXJjZUxl
bmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFy
YW1ldGVyc1N0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25F
eGVjdXRhYmxlOjp0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnR5cGVQcm9maWxpbmdFbmRPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlckNvdW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpmZWF0dXJl
cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c291cmNl
UGFyc2VNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxl
Ojppc0luU3RyaWN0Q29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6aGFzQ2FwdHVyZWRWYXJpYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmlzQnVpbHRpbkZ1bmN0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjppc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3RvciBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29uc3RydWN0QWJpbGl0eSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29uc3RydWN0b3JLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlOjpmdW5jdGlvbk1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNjcmlwdE1vZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnN1cGVyQmluZGluZyBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVyaXZlZENvbnRleHRUeXBlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpuYW1lIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjplY21hTmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mZXJyZWROYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3RlciBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c2NvcGVSZWdpc3RlciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0UmVnaXN0ZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNvdXJjZVVSTERpcmVjdGl2ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6dXNlc0V2YWwgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzU3RyaWN0TW9kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aXNDb25zdHJ1Y3RvciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2FwdHVyZWRWYXJpYWJsZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQnVpbHRpbkZ1bmN0aW9uIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpzdXBlckJpbmRpbmcgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNjcmlwdE1vZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQXJyb3dGdW5jdGlvbkNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQ2xhc3NDb250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjp3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpjb25zdHJ1Y3RvcktpbmQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmRlcml2ZWRDb250ZXh0VHlw
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6ZXZhbENvbnRleHRUeXBl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpoYXNUYWlsQ2FsbHMgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmxpbmVDb3VudCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6ZW5kQ29sdW1uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1WYXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrOjpudW1DYWxsZWVMb2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRDb2RlQmxvY2s6Om51bVBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRD
b2RlQmxvY2s6OmZlYXR1cmVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2Nr
OjpwYXJzZU1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmNvZGVU
eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpyYXJlRGF0YSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFByb2dyYW1Db2RlQmxvY2s6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFByb2dyYW1Db2RlQmxvY2s6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZE1vZHVsZUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkTW9kdWxlQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRF
dmFsQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRFdmFsQ29kZUJsb2Nr
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OlVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OiBj
b25zdCk6CisgICAgICAgIChKU0M6OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OmRlY29kZUNvZGVCbG9ja0ltcGwpOgorICAgICAgICAqIHJ1
bnRpbWUvQ2FjaGVkVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmguCisgICAgICAgIChKU0M6OmRlY29kZUNv
ZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpn
ZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZTo6d3JpdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChK
U0M6OkNvZGVDYWNoZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmVu
ZCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAg
ICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAg
IChKU0M6OndyaXRlQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoK
KyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAg
ICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9T
dGFja0ZyYW1lLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAg
ICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorCiAyMDE5LTAxLTIwICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIERGRzogV2hlbiBpbmxpbmluZyBEYXRhVmll
dyBzZXQqIGludHJpbnNpY3Mgd2UgbmVlZCB0byBzZXQgdW5kZWZpbmVkIGFzIG91ciByZXN1bHQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzMzZTNlNzZlMmU4ZGM3YzY0MDk1MDg5YTdiYjZhYzUyYzMwNTY0My4uZTlkYmUzNGRl
NTgyZDNhODA5NGRhNGJjODhkMjY4MjI1YWM1YTk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
OS0wMS0xOCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBD
YWNoZSBieXRlY29kZSB0byBkaXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTI3ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MDg0OTMyPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpdFZlY3Rv
cnMgaGF2ZSB0byBiZSBmcmllbmRzIHdpdGggSlNDOjpDYWNoZUJpdFZlY3RvciB0byBhbGxvdwor
ICAgICAgICBzZXJpYWxpemluZyBpdHMgYnVmZmVyIGFzIHBhcnQgb2YgdGhlIGJ5dGVjb2RlIGNh
Y2hlIGVuY29kaW5nLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorCiAyMDE5LTAxLTIw
ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJvbGxvdXQgcjI0
MDIxMDogSXQgYnJva2UgdGVzdHMgb24gaU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggNmFjZGZiMTM0MjY0NjViYzQ4YmYxZDdhNWRiNzc3NWYzODQ5YTU5ZC4uZWE4NThi
MTY4MjQ5YTFjMTJkM2IxMWM2MDM1MWRhMjg3ZGQwYzQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtODMzLDYgKzgzMyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudC5oCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCiAgICAgcnVudGltZS9KU0dsb2Jh
bE9iamVjdElubGluZXMuaAorICAgIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAogICAg
IHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2UuaAogICAgIHJ1bnRpbWUvSlNJbnRlcm5hbFByb21p
c2VEZWZlcnJlZC5oCiAgICAgcnVudGltZS9KU01pY3JvdGFzay5oCkBAIC04NDgsNiArODQ5LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBydW50
aW1lL0pTUHJvbWlzZS5oCiAgICAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5oCiAgICAg
cnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oCisgICAgcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm94eS5oCiAgICAgcnVudGltZS9KU1J1bkxvb3BU
aW1lci5oCiAgICAgcnVudGltZS9KU1Njb3BlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggM2U3NDRkYmU4NDVmODhkMTBlYzQ4OThkMjg2ZjI0MGZhY2YzMjkwYy4uODUyY2MwNGU5
NDAzZDk1MDY1MzBlNjE5YzdmNjE4NzExOWFkZGFjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTgyNiw3ICs4MjYsNyBAQAogCQkyNjJEODVCNzFDMEQ2NTBGMDA2QUNCNjEgLyog
QWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFy
dGlhbFJlZ2lzdGVyU3RhbGxzLmggKi87IH07CiAJCTI2ODRENDM4MUMwMDE2MUMwMDgxRDY2MyAv
KiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggKi87IH07CiAJ
CTI2OUQ2MzZFMUJGQkU1RDEwMDEwMUIxRCAvKiBGVExPdXRwdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OUQ2MzZEMUJGQkU1RDAwMDEwMUIxRCAv
KiBGVExPdXRwdXQuaCAqLzsgfTsKLQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oICovOyB9OworCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkExMTEyNDQxOTJGQ0U3OTAw
NUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElD
YWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAwRTJBMjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5o
ICovOyB9OwogCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0
QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsK
QEAgLTEwNjIsNyArMTA2Miw3IEBACiAJCTUzRUFGRTJGMjA4REZBQjQwMDdENTI0QiAvKiB0ZXN0
YXBpLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MUQ0RTE5MUY1OUNERDIwMEVDODM2QyAvKiB0ZXN0YXBpLmNwcCAqLzsgfTsKIAkJNTNFRTAxQjYy
MThGNjkxNjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VFMDFCNTIxOEY2OTBGMDBBRDFGOEQgLyogSlNTY3JpcHQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0VF
MDFCODIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRTAxQjcyMThGN0VGRjAwQUQxRjhE
IC8qIEpTU2NyaXB0SW50ZXJuYWwuaCAqLzsgfTsKLQkJNTNGMTFGNDEyMDkxMzhENzAwRTQxMUE3
IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVC
dXR0ZXJmbHkuaCAqLzsgfTsKKwkJNTNGMTFGNDEyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRh
YmxlQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0Y0MEU4
NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2Fz
bVNlY3Rpb25zLmggKi87IH07CiAJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVu
Y3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLzsg
fTsKIAkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggKi87IH07CkBAIC0zMTI4LDYgKzMxMjgsNyBAQAogCQkxNDM4
NkE3MzFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0RXZhbEV4ZWN1dGFibGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzODZBNzYxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0
RXZhbEV4ZWN1dGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0Mzg2QTc3MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQzQkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8q
IENhY2hlZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFR5
cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNTFGMEE1MzFEM0IwMDA1
RjA2MSAvKiBOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5vZGUuaDsg
cGF0aCA9IHRlc3RzL05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MDA1
MjAwQTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBu
YW1lID0gTm9kZS5jOyBwYXRoID0gdGVzdHMvTm9kZS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDQwMDc0ODBBNTM2Q0MyMDAwNUYwNjEgLyogTm9kZUxpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTm9kZUxpc3QuaDsgcGF0aCA9IHRlc3RzL05vZGVMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjQyLDYgKzMyNDMsNyBAQAogCQkx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgbmFtZSA9IHRlc3RhcGkuanM7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFw
aS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREQTgxOEUwRDk5RkQyMDAwQjBB
NEZCIC8qIEpTTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0xleGljYWxFbnZpcm9ubWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0REFGQTQ1MjFFM0I4NzEwMDRC
NjhGNyAvKiBDYWNoZWRUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REUw
RDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gSlNHbG9iYWxPYmplY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZp
ZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJMTRERjA0RDkxNkIzOTk2RDAwMTZBNTEzIC8qIFN0
YXRpY1Byb3BlcnR5QW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RhdGljUHJvcGVydHlBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NEU4NEY5OTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NjAwLDYgKzY2MDIsOCBAQAogCQkJCTlFNzI5NDA5MTkwRjAzMDYwMDFBOTFC
NSAvKiBCdW5kbGVQYXRoLm1tICovLAogCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBC
dXR0ZXJmbHkuaCAqLywKIAkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5
SW5saW5lcy5oICovLAorCQkJCTE0REFGQTQ1MjFFM0I4NzEwMDRCNjhGNyAvKiBDYWNoZWRUeXBl
cy5jcHAgKi8sCisJCQkJMTQzQkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8qIENhY2hlZFR5cGVzLmgg
Ki8sCiAJCQkJMEZFQzNDNUYxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oICov
LAogCQkJCUJDQTYyREZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJ
MTQ1QzUwN0YwRDlERjYzQjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKaW5kZXggOTQ5ZWRjYWE1YjUzOGI4NThhZGMzNGMxMTI0ZGM2YzFlZGQ2MjI1
NS4uMjU4ZDQ5Y2VkMWUyZDU5ZGRiZGYxNDdmNGFjYjE4OTQ5MzhkYmExNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dApAQCAtNzEzLDYgKzcxMyw3IEBAIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAogcnVudGltZS9Cb29sZWFuT2JqZWN0LmNwcAogcnVudGltZS9Cb29sZWFuUHJv
dG90eXBlLmNwcAogcnVudGltZS9DYWxsRGF0YS5jcHAKK3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CiBydW50aW1lL0NhdGNoU2NvcGUuY3BwCiBydW50aW1lL0NsYXNzSW5mby5jcHAKIHJ1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmNwcAppbmRleCA0NWRlODJlN2NiNThhMjgzYjIwZmNhZTU5ODJiYmI1YzA0
ZGE5MTc1Li5hMGY4NTNhNmUwNWRjNDYxOGZmMDRkZTU5MDE5YjFlYTEzZDZiMzdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApAQCAtNjMs
NiArNjMsNyBAQCBCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyhWTSogdm0sIENvbW1vbklkZW50
aWZpZXJzKiBjb21tb25JZGVudGlmaWVycykKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJ
RklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFJJVkFURV9UT19QVUJMSUNfRU5U
UlkpCiAgICAgSlNDX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElPTl9OQU1FKElOSVRJQUxJWkVfUFVC
TElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJT
X0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQor
ICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9M
KElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZKQogICAgIEpTQ19DT01N
T05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJQUxJWkVf
U1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQogICAgIG1fcHJpdmF0ZVRvUHVibGljTWFw
LmFkZChtX2RvbGxhclZNUHJpdmF0ZU5hbWUuaW1wbCgpLCAmbV9kb2xsYXJWTU5hbWUpOwogICAg
IG1fcHVibGljVG9Qcml2YXRlTWFwLmFkZChtX2RvbGxhclZNTmFtZS5pbXBsKCksICZtX2RvbGxh
clZNUHJpdmF0ZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCmluZGV4IGY2NmI4Y2I1MWViNDAyZDg3MzZmZDdkZDBkMmQwZTdhMjkyZjQ1MTIu
Ljg1MzFkYjI2MGJkMDcwMWIzNzE5MDFiNjc0YmZmNWRmMGJmYmQ4NzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTIxMyw2ICsyMTMsNyBA
QCBleHRlcm4gU3ltYm9sSW1wbDo6U3RhdGljU3ltYm9sSW1wbCBwb2x5UHJvdG9Qcml2YXRlTmFt
ZTsKIC8vIFdlIGNvbW1hbmRlZXIgdGhlIHB1YmxpY1RvUHJpdmF0ZU1hcCB0byBhbGxvdyB1cyB0
byBjb252ZXJ0IHByaXZhdGUgc3ltYm9sIG5hbWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN5bWJv
bC4KIC8vIGUuZy4gQGl0ZXJhdG9yU3ltYm9sIHBvaW50cyB0byBTeW1ib2wuaXRlcmF0b3IgaW4g
dGhpcyBtYXAgcmF0aGVyIHRoYW4gdG8gYSBhbiBhY3R1YWwgcHJpdmF0ZSBuYW1lLgogLy8gRklY
TUU6IFRoaXMgaXMgYSB3ZWlyZCBoYWNrIGFuZCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBkbyB0aGlz
LgorI2RlZmluZSBJTklUSUFMSVpFX1NZTUJPTF9QUklWQVRFX1RPX1BVQkxJQ19FTlRSWShuYW1l
KSBtX3ByaXZhdGVUb1B1YmxpY01hcC5hZGQobV8jI25hbWUjI1N5bWJvbC5pbXBsKCksICZtXyMj
bmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIpOwogI2RlZmluZSBJTklUSUFMSVpFX1NZTUJP
TF9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWShuYW1lKSBtX3B1YmxpY1RvUHJpdmF0ZU1hcC5hZGQo
bV8jI25hbWUjI1N5bWJvbFByaXZhdGVJZGVudGlmaWVyLmltcGwoKSwgJm1fIyNuYW1lIyNTeW1i
b2wpOwogCiBjbGFzcyBCdWlsdGluTmFtZXMgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA2OGQzZDJkMmJlNzlmNDA1ZGM5NGQwNzFhMTQwNDk5
ZjI1OTQzMDA2Li5kY2NjNDExMTQ4NzM3NWRjMThiNmFkZGI1MzlhMTA4Njc3MmVhYTUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtODY5LDcg
Kzg2OSw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KIAotdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhW
TSYgdm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFu
dHMpCit2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZN
JiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRz
KQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggOTRlNmJkMmVlMGVmYjJi
YTA3NGNlYTI1MGQ4MmY3MzE4MmE2ZTExMy4uYzc0NzQyNmIzOGU1NjZlYmI5ZTg0MmNlMjNlZDU5
Mzg0ZWIwYWUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aApAQCAtODkwLDcgKzg5MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUFsbFByZWRp
Y3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKLSAg
ICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNvbnN0IFZlY3Rv
cjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOworICAgIHZvaWQgc2V0
Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgVmVjdG9yPENvbnN0YW50
SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKTsKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRS
ZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywg
Y29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9IYW5kbGVySW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hh
bmRsZXJJbmZvLmgKaW5kZXggNjZjM2I3Njg3NzU2MjA3NzZkMjYzZmYwOThkZTZmNDZiNjZlNzc4
My4uN2Y0NjVkMmFlOTM3OTliOTFkZjc4NzE0MTk0ZmNhMzRiZDJhMWExMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKQEAgLTg5LDYgKzg5LDEwIEBA
IHN0cnVjdCBIYW5kbGVySW5mb0Jhc2UgewogfTsKIAogc3RydWN0IFVubGlua2VkSGFuZGxlcklu
Zm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKCkK
KyAgICB7CisgICAgfQorCiAgICAgVW5saW5rZWRIYW5kbGVySW5mbyh1aW50MzJfdCBzdGFydCwg
dWludDMyX3QgZW5kLCB1aW50MzJfdCB0YXJnZXQsIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlKQog
ICAgIHsKICAgICAgICAgdGhpcy0+c3RhcnQgPSBzdGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgKaW5kZXggNzBlZGUzZTQxYzVk
NWM0ODlkNzk2ZmNmYzBjMWNjZDk5OGQyOWVkNS4uYjQwNDgwYTVlNzk1OGRmMGE0MTdmZjEyMjAw
Y2Q5NTVlZDAwMmExZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luc3RydWN0aW9uU3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luc3RydWN0aW9uU3RyZWFtLmgKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgSW5zdHJ1Y3Rpb25T
dHJlYW0gewogICAgIHVzaW5nIEluc3RydWN0aW9uQnVmZmVyID0gVmVjdG9yPHVpbnQ4X3QsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnN0cnVjdGlvblN0
cmVhbVdyaXRlcjsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW07CiBw
dWJsaWM6CiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggZjBlOWQ2
NGM4NTRhM2Y1MzY3NTJkNDg3NDY5MmQyNzg3N2Q2NzA0OS4uMTQ4YTUzNTIxZmE3NjJjMjU3YTY1
MmJiZTNkM2MxMjg0YjY2ODZlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTY1LDEyICs2NSwxNSBAQCBjbGFzcyBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7
CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CitjbGFzcyBDYWNoZWRDb2RlQmxvY2s7CisKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRW
YWx1ZVByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxlOwogdHlw
ZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVu
c2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVk
IFVubGlua2VkTExJbnRDYWxsTGlua0luZm87Ci11c2luZyBDb25zdGFudEluZGVudGlmaWVyU2V0
RW50cnkgPSBzdGQ6OnBhaXI8SWRlbnRpZmllclNldCwgdW5zaWduZWQ+OwordXNpbmcgQ29uc3Rh
bnRJZGVudGlmaWVyU2V0RW50cnkgPSBzdGQ6OnBhaXI8SWRlbnRpZmllclNldCwgdW5zaWduZWQ+
OwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewogICAgIHN0cnVjdCBPZmZzZXRM
b2NhdGlvbiB7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgbV9jb25zdGFudFJl
Z2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwogICAgICAgICBtX2NvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcik7Ci0gICAgICAgIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5hcHBlbmQoQ29u
c3RhbnRJbmRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7CisgICAgICAgIG1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0cy5hcHBlbmQoQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkoc2V0LCBy
ZXN1bHQpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQpAQCAtMjAyLDcgKzIwNSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fbGlua1RpbWVDb25zdGFudHNbaW5kZXhdOwogICAgIH0KICAgICBjb25z
dCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgY29uc3QgVmVjdG9yPENvbnN0YW50SW5k
ZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IHJldHVybiBtX2Nv
bnN0YW50SWRlbnRpZmllclNldHM7IH0KKyAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlm
aWVyU2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFu
dElkZW50aWZpZXJTZXRzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25z
dGFudFJlZ2lzdGVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQpA
QCAtMzY3LDYgKzM3MCwxMCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENv
ZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYs
IERlYnVnZ2VyTW9kZSk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
ICAgIFVubGlua2VkQ29kZUJsb2NrKERlY29kZXImLCBTdHJ1Y3R1cmUqLCBjb25zdCBDYWNoZWRD
b2RlQmxvY2s8Q29kZUJsb2NrVHlwZT4mKTsKKwogICAgIH5VbmxpbmtlZENvZGVCbG9jaygpOwog
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0zNzgsNiArMzg1LDkgQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKICAgICBmcmllbmQgY2xh
c3MgQnl0ZWNvZGVHZW5lcmF0b3I7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRDb2RlQmxvY2s7CisKICAgICB2b2lkIGFwcGx5
TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYp
OwogCiAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKQEAgLTQ0NCw3ICs0NTQs
NyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOwogICAg
IFZlY3RvcjxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVy
PFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3RvcjxDb25zdGFudEluZGVu
dGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICBWZWN0b3I8Q29u
c3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKICAgICBW
ZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CiAgICAgRnVuY3Rpb25F
eHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAppbmRleCA5OTg3YjQz
MTMzNDNiNmNiNzUyYTQyMGIzNThkOWEzNjAzMTcyZjI2Li4yZjMyMzc5YTAxZjQzNWMzZDAxOGRm
NjUxOTM1YTJlMmIwM2NkMDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiBjbGFzcyBVbmxp
bmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sg
ewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAg
LTU5LDExICs2MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRp
ZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsKICAgICB9CiBwcml2
YXRlOgorICAgIGZyaWVuZCBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRFdmFs
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQog
CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRFdmFsQ29k
ZUJsb2NrJik7CisKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
LmgKaW5kZXggYjU0ODJiNjVjOGI4ZWZiM2FhMzA2YTQxM2JkNTQ2MDM0OTFhOTAxMy4uNjVhYWZj
ODhlNTk3Y2IyMGY0OWZkMzI3MmJkZTE1YTEwZGNiZGQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5o
CkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWNoZWRGdW5j
dGlvbkNvZGVCbG9jazsKKwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayBmaW5hbCA6
IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtl
ZENvZGVCbG9jayBCYXNlOwpAQCAtNDQsMTAgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRGdW5j
dGlvbkNvZGVCbG9jazsKKwogICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQor
CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkRnVu
Y3Rpb25Db2RlQmxvY2smKTsKICAgICAKIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCA1MjY4OThjOTUxZDgyMTc1OTc5
ODgxMTAyZjlkYzdkNjE1YjAxNTIyLi42NTI2Y2Q5MGNiYmFhNjllMjZjYzBhMWMwYWM3N2I2OGMx
OTVmYjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMzksMTEgKzM5LDEzIEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBEZWNvZGVyOwogY2xhc3MgRnVuY3Rpb25NZXRhZGF0YU5v
ZGU7CiBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CiBjbGFzcyBQYXJzZXJFcnJvcjsKIGNsYXNz
IFNvdXJjZVByb3ZpZGVyOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNz
IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogZW51bSBVbmxpbmtlZEZ1bmN0aW9uS2luZCB7
CiAgICAgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwKQEAgLTU0LDYgKzU2LDcgQEAgY2xhc3MgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwogICAgIGZyaWVuZCBjbGFzcyBWTTsKKyAgICBm
cmllbmQgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiAgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CkBAIC0xNDcsNiArMTUwLDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiwgU3Ry
dWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5r
ZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgVmFy
aWFibGVFbnZpcm9ubWVudCYsICBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0
aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUoRGVjb2RlciYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4
ZWN1dGFibGUmKTsKIAogICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2ln
bmVkIG1fbGluZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAppbmRleCAzNDM4NjJlNjQ3MGZlMWIxYTQy
NDg1ZDg3NjllMjc3ZDcyYzE1MDhlLi4zZDA0MmVmNDg2YzdkMTJjYWYwZDMyZDYwMmUxNmZiMjEy
ZjZlMDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaApAQCAtMzgsNiArMzgsMTIgQEAgcHJvdGVjdGVkOgog
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9k
ZSkKICAgICB7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
KyAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+JiBjYWNoZWRD
b2RlQmxvY2spCisgICAgICAgIDogQmFzZShkZWNvZGVyLCBzdHJ1Y3R1cmUsIGNhY2hlZENvZGVC
bG9jaykKKyAgICB7CisgICAgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCmluZGV4IDNlM2U4ZGZiNGQ1
YmJjNDY0ZjVlNmEyMzQ0Y2FhY2E5OTQ5NDllZjEuLmY5NDcwN2UzYjE4NWQ3NzE2YjQxNmE0OTMz
ZWNhNmM5NTFhNGQ1ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKQEAgLTM1LDYgKzM1LDcgQEAgY2xhc3MgTWV0
YWRhdGFUYWJsZTsKIGNsYXNzIFVubGlua2VkTWV0YWRhdGFUYWJsZSB7CiAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3MgTWV0YWRhdGFUYWJs
ZTsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkTWV0YWRhdGFUYWJsZTsKIAogcHVibGljOgogICAg
IHN0cnVjdCBMaW5raW5nRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKaW5kZXgg
MGU5YzVmNWJkZGU2Yzc1NjJiNjZhMDNiYzBhOThjODdhZGJkOTMwMi4uMzkzM2JmZDNlM2FlMjRl
NmY2NGY1ZTBhOWQ5ZDExOTAyMTMwMDZkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2su
aApAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsK
K2NsYXNzIENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKwogY2xhc3MgVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CkBAIC03NCwx
MSArNzcsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVk
TW9kdWxlQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
TW9kdWxlQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CiAKKyAgICBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZE1vZHVsZUNv
ZGVCbG9jayYpOworCiAgICAgaW50IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0
YW50UmVnaXN0ZXJPZmZzZXQgeyAwIH07CiAKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAppbmRl
eCBhZmUyNmFlZDFhNTAzYWIyM2ZkOGY0NDdmOWRlYzJkYzA2Y2E1ODI2Li43Njg0NGEzN2E0MTE5
NTJlZWRhYmE0NWM3ODJkZGY1NTUzYjBjZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCkBAIC0yOSw2
ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWNoZWRQcm9ncmFtQ29kZUJs
b2NrOworCiBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2sgQmFzZTsKQEAgLTUwLDExICs1MiwxNSBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fbGV4aWNhbERlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRQ
cm9ncmFtQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dl
ck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFs
Q29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CiAKKyAgICBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZFByb2dyYW1Db2RlQmxvY2smKTsK
KwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJhdGlvbnM7CiAgICAgVmFyaWFi
bGVFbnZpcm9ubWVudCBtX2xleGljYWxEZWNsYXJhdGlvbnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGFkNjUzNjE4YjQy
OGZjYTA2YmUwNGRkYjY2YzBmM2QzMWQyYjI2NGMuLjhlODI1NjAyOGIxMDM3ZGIyYjMwN2FjZDE3
ZDA1YjdmMzU4ZjQ3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFt
ZUNsb3N1cmUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgi
CiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCmluZGV4IGI1ZDQ3ZGQzZGI5YWQ4YmE2Zjg0NWJiMzIxMTRmYjBkYWY4ZDhmNjUuLmRlYmE2
MzdmMTIxM2Q5NDNiMjQwMjFmMjU0MDJjZDJmZDk4NWE5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1
ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2Rl
Q2FjaGUuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVkZSAiQ29uZmlnRmlsZS5o
IgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgpAQCAtMTk4OCw4ICsxOTg5LDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayhFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0YXRl
KikKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIHZtLmNvZGVDYWNoZSgpLT53
cml0ZSh2bSk7CisKICAgICBqc2NFeGl0KEVYSVRfU1VDQ0VTUyk7CiAKICNpZiBDT01QSUxFUihN
U1ZDKQpAQCAtMjg3Niw2ICsyODgwLDggQEAgaW50IHJ1bkpTQyhjb25zdCBDb21tYW5kTGluZSYg
b3B0aW9ucywgYm9vbCBpc1dvcmtlciwgY29uc3QgRnVuYyYgZnVuYykKICNlbmRpZgogICAgIH0K
IAorICAgIHZtLmNvZGVDYWNoZSgpLT53cml0ZSh2bSk7CisKICAgICBpZiAoaXNXb3JrZXIpIHsK
ICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIC8vIFRoaXMgaXMgbmVl
ZGVkIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgd29ya2VyJ3MgbWFpbgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaAppbmRleCBjM2MwZjczNDZiMDU1MzZiNWMwOTlk
NDMzNzE1ODY0MzZmZDNkOWMyLi5mYmU0YzlhMGRmMWNjMWFmMDBiMjUyODU3ZWU5Yzc4NGZhMjdh
ZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaApAQCAtMzMs
NiArMzMsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTb3VyY2VDb2RlIDogcHVi
bGljIFVubGlua2VkU291cmNlQ29kZSB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRTb3Vy
Y2VDb2RlOworCiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VDb2RlKCkKICAgICAgICAgICAg
IDogVW5saW5rZWRTb3VyY2VDb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU291cmNlQ29kZUtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VDb2RlS2V5LmgKaW5kZXggYThlNjAzYzI2YTBiNjAzNjJhMDJkZWFjMDUxNjE2OWQ1NzU1
ODAyMS4uY2MzYWJlMjFmYWY1NzE0YmY5OTgwMWRmYjllZWQ0MjgzNDgxZjE4OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKQEAgLTM3LDYgKzM3LDgg
QEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJFbmFibGVkIHsgTm8sIFllcyB9OwogZW51bSBjbGFz
cyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMgfTsKIAogY2xhc3MgU291cmNl
Q29kZUZsYWdzIHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU291cmNlQ29kZUtleTsKKwogcHVi
bGljOgogICAgIFNvdXJjZUNvZGVGbGFncygpID0gZGVmYXVsdDsKIApAQCAtNzAsNiArNzIsOCBA
QCBwcml2YXRlOgogfTsKIAogY2xhc3MgU291cmNlQ29kZUtleSB7CisgICAgZnJpZW5kIGNsYXNz
IENhY2hlZFNvdXJjZUNvZGVLZXk7CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2RlS2V5KCkKICAg
ICB7CkBAIC0xMTQsNiArMTE4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICYmIHN0cmluZygp
ID09IG90aGVyLnN0cmluZygpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBT
b3VyY2VDb2RlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisKICAgICBzdHJ1Y3QgSGFzaCB7CiAgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTb3VyY2VDb2RlS2V5JiBhLCBj
b25zdCBTb3VyY2VDb2RlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCmluZGV4IDZlYzU5MGI1
M2U2YzljMzI3ZTQyNDRkMGIxMTliMzZkMDk2ZmM4MWUuLmFhYWFkM2Y0MTJmOGYzZmE1YmMxZjJm
ZWJmYjE0Y2M3NGRlMjI0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9VbmxpbmtlZFNvdXJjZUNvZGUuaApAQCAtMzUsNiArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBVbmxpbmtlZFNvdXJjZUNvZGUgeworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTb3VyY2VUeXBlPgorICAgICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkVW5saW5rZWRTb3Vy
Y2VDb2RlU2hhcGU7CisKICAgICBwdWJsaWM6CiAgICAgICAgIFVubGlua2VkU291cmNlQ29kZSgp
CiAgICAgICAgICAgICA6IG1fcHJvdmlkZXIoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgKaW5kZXggMTI5YjVlYTZiZDliNzI2YTFk
OWE0MDExZWY5NjkwZjhjYzZiMGRkMy4uZDg0YjJlMWZiMjE4ZWM0OWNkOTVlNWJkODVkYzc2NTBj
ZmE2MDlkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJs
ZUVudmlyb25tZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJs
ZUVudmlyb25tZW50LmgKQEAgLTExNiw2ICsxMTYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0V2
ZXJ5dGhpbmdDYXB0dXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7
IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVu
dDsKKwogICAgIE1hcCBtX21hcDsKICAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgeyBm
YWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZDk1NTRjNWE3ODRlNjJjYWI1ZDBkMTMyYTAzZmM5ZDI1MDM5YjNh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCkBAIC0wLDAgKzEsMjAyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRU
eXBlcy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVk
ZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKKyNpbmNsdWRl
ICJKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50
c1RhYmxlLmgiCisjaW5jbHVkZSAiU291cmNlQ29kZUtleS5oIgorI2luY2x1ZGUgIlVubGlua2Vk
RXZhbENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIK
KyNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZ0ltcGwuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgU291cmNlVHlwZUltcGwgeworICAgIHVz
aW5nIHR5cGUgPSBUOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTb3VyY2VU
eXBlSW1wbDxULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFQ+Ojp2YWx1
ZSAmJiAhc3RkOjppc19zYW1lPHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfLCB2b2lkPjo6dmFsdWU+
PiB7CisgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfOworCit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgU291cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJjZVR5
cGVJbXBsPFQ+Ojp0eXBlOworCitjbGFzcyBFbmNvZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShFbmNvZGVyKTsKKyAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKKworcHVibGlj
OgorICAgIGNsYXNzIEFsbG9jYXRpb24geworICAgICAgICBmcmllbmQgY2xhc3MgRW5jb2RlcjsK
KworICAgIHB1YmxpYzoKKyAgICAgICAgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXI7IH0KKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBBbGxvY2F0aW9uKHVpbnQ4X3QqIGJ1
ZmZlciwgcHRyZGlmZl90IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQor
ICAgICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgICAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Cisg
ICAgfTsKKworICAgIEVuY29kZXIoVk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisgICAgICAg
ICwgbV9iYXNlT2Zmc2V0KDApCisgICAgICAgICwgbV9jdXJyZW50UGFnZShudWxscHRyKQorICAg
IHsKKyAgICAgICAgYWxsb2NhdGVOZXdQYWdlKCk7CisgICAgfQorCisgICAgVk0mIHZtKCkgeyBy
ZXR1cm4gbV92bTsgfQorCisgICAgQWxsb2NhdGlvbiBtYWxsb2ModW5zaWduZWQgc2l6ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzaXplKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldDsKKyAg
ICAgICAgaWYgKG1fY3VycmVudFBhZ2UtPm1hbGxvYyhzaXplLCBvZmZzZXQpKQorICAgICAgICAg
ICAgcmV0dXJuIEFsbG9jYXRpb24geyBtX2N1cnJlbnRQYWdlLT5idWZmZXIoKSArIG9mZnNldCwg
bV9iYXNlT2Zmc2V0ICsgb2Zmc2V0IH07CisgICAgICAgIGFsbG9jYXRlTmV3UGFnZShzaXplKTsK
KyAgICAgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIFQqIG1hbGxvYygpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUKj4obWFsbG9jKHNpemVvZihUKSkuYnVmZmVyKCkpOworICAgIH0KKworICAgIHB0
cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcHRy
ZGlmZl90IG9mZnNldDsKKyAgICAgICAgcHRyZGlmZl90IGJhc2VPZmZzZXQgPSAwOworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKSB7CisgICAgICAgICAgICBpZiAocGFn
ZS5nZXRPZmZzZXQoYWRkcmVzcywgb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFz
ZU9mZnNldCArIG9mZnNldDsKKyAgICAgICAgICAgIGJhc2VPZmZzZXQgKz0gcGFnZS5zaXplKCk7
CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBjYWNoZVB0cihjb25zdCB2b2lkKiBwdHIs
IHB0cmRpZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBtX3B0clRvT2Zmc2V0TWFwLmFkZChw
dHIsIG9mZnNldCk7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNl
dEZvclB0cihjb25zdCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9wdHJU
b09mZnNldE1hcC5maW5kKHB0cik7CisgICAgICAgIGlmIChpdCA9PSBtX3B0clRvT2Zmc2V0TWFw
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJu
IHsgaXQtPnZhbHVlIH07CisgICAgfQorCisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90
Piwgc2l6ZV90PiByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIHNpemVfdCBzaXplID0gbV9iYXNl
T2Zmc2V0ICsgbV9jdXJyZW50UGFnZS0+c2l6ZSgpOworICAgICAgICBNYWxsb2NQdHI8dWludDhf
dD4gYnVmZmVyID0gTWFsbG9jUHRyPHVpbnQ4X3Q+OjptYWxsb2Moc2l6ZSk7CisgICAgICAgIHVu
c2lnbmVkIG9mZnNldCA9IDA7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFnZSA6IG1fcGFn
ZXMpIHsKKyAgICAgICAgICAgIG1lbWNweShidWZmZXIuZ2V0KCkgKyBvZmZzZXQsIHBhZ2UuYnVm
ZmVyKCksIHBhZ2Uuc2l6ZSgpKTsKKyAgICAgICAgICAgIG9mZnNldCArPSBwYWdlLnNpemUoKTsK
KyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPT0gc2l6ZSk7CisgICAg
ICAgIHJldHVybiB7IFdURk1vdmUoYnVmZmVyKSwgc2l6ZSB9OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBjbGFzcyBQYWdlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBhZ2Uoc2l6ZV90IHNpemUp
CisgICAgICAgICAgICA6IG1fb2Zmc2V0KDApCisgICAgICAgICAgICAsIG1fY2FwYWNpdHkoc2l6
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8dWludDhfdD46
Om1hbGxvYyhzaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbWFsbG9jKHNpemVfdCBz
aXplLCBwdHJkaWZmX3QmIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGFs
aWdubWVudCA9IHN0ZDo6bWluKGFsaWdub2Yoc3RkOjptYXhfYWxpZ25fdCksIHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHNpemUpKSk7CisgICAgICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbV9v
ZmZzZXQpOworICAgICAgICAgICAgc2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihhbGln
bm1lbnQsIHNpemUpOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0
ICsgc2l6ZSkgPiBtX2NhcGFjaXR5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0OworICAgICAgICAgICAgbV9vZmZzZXQgPSBvZmZz
ZXQgKyBzaXplOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQorICAg
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9v
ZmZzZXQpOyB9CisKKyAgICAgICAgYm9vbCBnZXRPZmZzZXQoY29uc3Qgdm9pZCogYWRkcmVzcywg
cHRyZGlmZl90JiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYWRkcmVzcyk7CisgICAg
ICAgICAgICBpZiAoYWRkciA+PSBtX2J1ZmZlci5nZXQoKSAmJiBhZGRyIDwgbV9idWZmZXIuZ2V0
KCkgKyBtX29mZnNldCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFkZHIgLSBtX2J1ZmZl
ci5nZXQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgTWFsbG9jUHRyPHVpbnQ4X3Q+IG1fYnVmZmVyOworICAgICAgICBwdHJkaWZmX3QgbV9vZmZz
ZXQ7CisgICAgICAgIHNpemVfdCBtX2NhcGFjaXR5OworICAgIH07CisKKyAgICB2b2lkIGFsbG9j
YXRlTmV3UGFnZShzaXplX3Qgc2l6ZSA9IDApCisgICAgeworICAgICAgICBzdGF0aWMgc2l6ZV90
IG1pblBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpOworICAgICAgICBpZiAobV9jdXJyZW50UGFn
ZSkKKyAgICAgICAgICAgIG1fYmFzZU9mZnNldCArPSBtX2N1cnJlbnRQYWdlLT5zaXplKCk7Cisg
ICAgICAgIGlmIChzaXplIDwgbWluUGFnZVNpemUpCisgICAgICAgICAgICBzaXplID0gbWluUGFn
ZVNpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2YobWluUGFnZVNpemUsIHNpemUpOworICAgICAgICBtX3BhZ2VzLmFwcGVuZChQYWdl
IHsgc2l6ZSB9KTsKKyAgICAgICAgbV9jdXJyZW50UGFnZSA9ICZtX3BhZ2VzLmxhc3QoKTsKKyAg
ICB9CisKKyAgICBWTSYgbV92bTsKKyAgICBwdHJkaWZmX3QgbV9iYXNlT2Zmc2V0OworICAgIFBh
Z2UqIG1fY3VycmVudFBhZ2U7CisgICAgVmVjdG9yPFBhZ2U+IG1fcGFnZXM7CisgICAgSGFzaE1h
cDxjb25zdCB2b2lkKiwgcHRyZGlmZl90PiBtX3B0clRvT2Zmc2V0TWFwOworfTsKKworY2xhc3Mg
RGVjb2RlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rlcik7CisgICAgV1RGX0ZP
UkJJRF9IRUFQX0FMTE9DQVRJT047CisKK3B1YmxpYzoKKyAgICBEZWNvZGVyKFZNJiB2bSwgY29u
c3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQorICAgICAgICA6IG1fdm0odm0pCisg
ICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
YXNlQWRkcmVzcykpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAsIG1fc2l6ZShzaXplKQorI2Vu
ZGlmCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgfQorCisgICAgfkRl
Y29kZXIoKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9maW5hbGl6ZXJzKQor
ICAgICAgICAgICAgcGFpci52YWx1ZSgpOworICAgIH0KKworICAgIFZNJiB2bSgpIHsgcmV0dXJu
IG1fdm07IH0KKworICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBwdHIpCisgICAg
eworICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHB0cik7CisgICAgICAgIEFTU0VSVChhZGRyID49IG1fYmFzZUFkZHJlc3MgJiYgYWRkciA8
IG1fYmFzZUFkZHJlc3MgKyBtX3NpemUpOworICAgICAgICByZXR1cm4gYWRkciAtIG1fYmFzZUFk
ZHJlc3M7CisgICAgfQorCisgICAgdm9pZCBjYWNoZU9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0LCB2
b2lkKiBwdHIpCisgICAgeworICAgICAgICBtX29mZnNldFRvUHRyTWFwLmFkZChvZmZzZXQsIHB0
cik7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDx2b2lkKj4gcHRyRm9yT2Zmc2V0KHB0cmRp
ZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9vZmZzZXRUb1B0ck1hcC5m
aW5kKG9mZnNldCk7CisgICAgICAgIGlmIChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgaXQtPnZh
bHVlIH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGFkZEZpbmFsaXplcihwdHJkaWZmX3Qgb2Zmc2V0LCBjb25zdCBGdW5jdG9yJiBmbikKKyAgICB7
CisgICAgICAgIG1fZmluYWxpemVycy5hZGQob2Zmc2V0LCBmbik7CisgICAgfQorCitwcml2YXRl
OgorICAgIFZNJiBtX3ZtOworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7CisjaWZu
ZGVmIE5ERUJVRworICAgIHNpemVfdCBtX3NpemU7CisjZW5kaWYKKyAgICBIYXNoTWFwPHB0cmRp
ZmZfdCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7CisgICAgSGFzaE1hcDxwdHJkaWZmX3QsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJzOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBl
PFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYgZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+
JiBzcmMpCit7CisgICAgZHN0ID0gc3JjOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Rh
dGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFs
dWU+IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUJiBkc3QsIGNvbnN0IFNvdXJjZVR5cGU8VD4m
IHNyYykKK3sKKyAgICBkc3QuZW5jb2RlKGVuY29kZXIsIHNyYyk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNvZGUoRGVjb2RlciYsIGNvbnN0
IFQmIHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uKQoreworICAgIGRzdCA9IHNyYzsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KK3N0YXRpYyBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjLCBTb3VyY2VUeXBlPFQ+JiBkc3QsIEFy
Z3MuLi4gYXJncykKK3sKKyAgICBzcmMuZGVjb2RlKGRlY29kZXIsIGRzdCwgYXJncy4uLik7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlLCBUPiBkZWNvZGUoRGVjb2RlciYsIFQgc3Jj
KQoreworICAgIHJldHVybiBzcmM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMg
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwg
U291cmNlVHlwZTxUPj4mJiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjKQor
eworICAgIHJldHVybiBzcmMuZGVjb2RlKGRlY29kZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTb3VyY2U+CitjbGFzcyBDYWNoZWRPYmplY3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENhY2hlZE9iamVjdDxTb3VyY2U+KTsKKyAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsK
KworcHVibGljOgorICAgIHVzaW5nIFNvdXJjZVR5cGVfID0gU291cmNlOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgU291cmNlPgorY2xhc3MgVmFyaWFibGVMZW5ndGhPYmplY3QgOiBwdWJsaWMg
Q2FjaGVkT2JqZWN0PFNvdXJjZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4K
KyAgICBmcmllbmQgc3RydWN0IENhY2hlZFB0cjsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IHVp
bnQ4X3QqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0g
c19pbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHRoaXMpICsgbV9vZmZzZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICB1aW50
OF90KiBhbGxvY2F0ZShFbmNvZGVyJiBlbmNvZGVyLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAg
ICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHB0
cmRpZmZfdCBvZmZzZXRPZmZzZXQgPSBlbmNvZGVyLm9mZnNldE9mKCZtX29mZnNldCk7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gZW5jb2Rlci5tYWxsb2Moc2l6ZSk7CisgICAgICAgIG1fb2Zmc2V0
ID0gcmVzdWx0Lm9mZnNldCgpIC0gb2Zmc2V0T2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0
LmJ1ZmZlcigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYWxs
b2NhdGUoRW5jb2RlciYgZW5jb2RlciwgdW5zaWduZWQgc2l6ZSA9IDEpCisgICAgeworICAgICAg
ICB1aW50OF90KiByZXN1bHQgPSBhbGxvY2F0ZShlbmNvZGVyLCBzaXplb2YoVCkgKiBzaXplKTsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8cHRyZGlmZl90Pjo6bWF4KCk7CisKKyAgICBwdHJkaWZmX3Qg
bV9vZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKKworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KK2NsYXNzIENhY2hlZFB0ciA6IHB1
YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqPiB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIHR5cGVuYW1lPgorICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkUmVmUHRyOworCitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCisg
ICAgeworICAgICAgICBtX2lzRW1wdHkgPSAhc3JjOworICAgICAgICBpZiAobV9pc0VtcHR5KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChXVEY6Ok9wdGlvbmFsPHB0cmRpZmZf
dD4gb2Zmc2V0ID0gZW5jb2Rlci5vZmZzZXRGb3JQdHIoc3JjKSkgeworICAgICAgICAgICAgdGhp
cy0+bV9vZmZzZXQgPSAqb2Zmc2V0IC0gZW5jb2Rlci5vZmZzZXRPZigmdGhpcy0+bV9vZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVCogY2FjaGVkT2Jq
ZWN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlcik7CisgICAgICAgIGNhY2hl
ZE9iamVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOworICAgICAgICBlbmNvZGVyLmNhY2hlUHRy
KHNyYywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFNvdXJjZSogZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzRW1wdHkpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwdHJkaWZmX3QgYnVmZmVyT2Zm
c2V0ID0gZGVjb2Rlci5vZmZzZXRPZih0aGlzLT5idWZmZXIoKSk7CisgICAgICAgIGlmIChXVEY6
Ok9wdGlvbmFsPHZvaWQqPiBwdHIgPSBkZWNvZGVyLnB0ckZvck9mZnNldChidWZmZXJPZmZzZXQp
KQorICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U291cmNlKj4oKnB0cik7CisK
KyAgICAgICAgU291cmNlKiBwdHIgPSBnZXQoKS0+ZGVjb2RlKGRlY29kZXIsIGFyZ3MuLi4pOwor
ICAgICAgICBkZWNvZGVyLmNhY2hlT2Zmc2V0KGJ1ZmZlck9mZnNldCwgcHRyKTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBjb25zdCBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUKiBnZXQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1faXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgfQorCisgICAg
Ym9vbCBtX2lzRW1wdHk7CisKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNv
dXJjZSA9IFNvdXJjZVR5cGU8VD4+CitjbGFzcyBDYWNoZWRSZWZQdHIgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PFJlZlB0cjxTb3VyY2U+PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCisgICAgeworICAgICAgICBtX3B0ci5lbmNv
ZGUoZW5jb2Rlciwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZWZQdHI8U291cmNlPiBzcmMpCisgICAgeworICAgICAgICBlbmNvZGUoZW5j
b2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8U291cmNlPiBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZSogZGVjb2RlZFB0ciA9
IG1fcHRyLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkUHRyKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGRlY29kZXIuYWRkRmluYWxpemVyKGRlY29k
ZXIub2Zmc2V0T2YobV9wdHIuYnVmZmVyKCkpLCBbPV0geyBkZXJlZklmTm90TnVsbChkZWNvZGVk
UHRyKTsgfSk7CisgICAgICAgIHJlZklmTm90TnVsbChkZWNvZGVkUHRyKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKGRlY29kZWRQdHIpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFJlZlB0cjxTb3VyY2U+JiBzcmMpIGNvbnN0CisgICAgeworICAgICAgICBz
cmMgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFB0cjxU
LCBTb3VyY2U+IG1fcHRyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291
cmNlID0gU291cmNlVHlwZTxUPj4KK2NsYXNzIENhY2hlZFdyaXRlQmFycmllciA6IHB1YmxpYyBD
YWNoZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNvdXJjZT4+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8U291cmNlPiBzcmMpCisg
ICAgeworICAgICAgICBtX3B0ci5lbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8U291cmNlPiYg
c3JjLCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlKiBk
ZWNvZGVkUHRyID0gbV9wdHIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoZGVjb2RlZFB0
cikKKyAgICAgICAgICAgIHNyYy5zZXQoZGVjb2Rlci52bSgpLCBvd25lciwgZGVjb2RlZFB0cik7
CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFB0cjxULCBTb3VyY2U+IG1fcHRyOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IElubGluZUNhcGFjaXR5ID0gMCwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PgorY2xhc3MgQ2FjaGVkVmVjdG9y
IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPj4geworcHVibGljOgorICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9zaXplID0g
dmVjdG9yLnNpemUoKTsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2Nh
dGU8VD4oZW5jb2RlciwgbV9zaXplKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBidWZmZXJb
aV0sIHZlY3RvcltpXSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8U291cmNlVHlwZTxUPiwg
SW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIHZlY3RvciwgQXJncy4uLiBhcmdzKSBj
b25zdAorICAgIHsKKyAgICAgICAgdmVjdG9yLnJlc2l6ZVRvRml0KG1fc2l6ZSk7CisgICAgICAg
IGNvbnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6
ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ldLCBhcmdzLi4uKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zaXplOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Rmlyc3QsIHR5cGVuYW1lIFNlY29uZD4KK2NsYXNzIENhY2hlZFBhaXIgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+Pj4g
eworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6
cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+PiYgcGFpcikKKyAgICB7
CisgICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9maXJzdCwgcGFpci5maXJzdCk7Cisg
ICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9zZWNvbmQsIHBhaXIuc2Vjb25kKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8U291cmNl
VHlwZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vjb25kPj4mIHBhaXIpIGNvbnN0CisgICAgeworICAg
ICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fZmlyc3QsIHBhaXIuZmlyc3QpOworICAgICAg
ICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fc2Vjb25kLCBwYWlyLnNlY29uZCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEZpcnN0IG1fZmlyc3Q7CisgICAgU2Vjb25kIG1fc2Vjb25kOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEFy
ZyA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFNvdXJjZVR5cGU8S2V5Pj46Okhhc2gsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlwZTxLZXk+PiwgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxTb3VyY2VUeXBlPFZhbHVlPj4+CitjbGFzcyBDYWNo
ZWRIYXNoTWFwIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEhhc2hNYXA8U291cmNlVHlw
ZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPiwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KKyAgICB1
c2luZyBNYXAgPSBIYXNoTWFwPEssIFYsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKQorICAgIHsK
KyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBlbnRyaWVzVmVjdG9yKG1h
cC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBpdCA6IG1hcCkKKyAgICAgICAgICAgIGVudHJpZXNWZWN0b3JbaSsrXSA9IHsgaXQua2V5
LCBpdC52YWx1ZSB9OworICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNW
ZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hcDxT
b3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKSBjb25zdAorICAgIHsKKyAg
ICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBkZWNvZGVkRW50cmllczsKKyAg
ICAgICAgbV9lbnRyaWVzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkRW50cmllcyk7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgcGFpciA6IGRlY29kZWRFbnRyaWVzKQorICAgICAgICAgICAgbWFw
LnNldChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENh
Y2hlZFZlY3RvcjxDYWNoZWRQYWlyPEtleSwgVmFsdWU+PiBtX2VudHJpZXM7Cit9OworCitjbGFz
cyBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxV
bmlxdWVkU3RyaW5nSW1wbD4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKKyAgICB7CisgICAgICAgIG1faXNBdG9t
aWMgPSBzdHJpbmcuaXNBdG9taWMoKTsKKyAgICAgICAgbV9pc1N5bWJvbCA9IHN0cmluZy5pc1N5
bWJvbCgpOworICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29uc3RfY2FzdDxTdHJpbmdJbXBs
Kj4oJnN0cmluZyk7CisgICAgICAgIGlmIChtX2lzU3ltYm9sKSB7CisgICAgICAgICAgICBTeW1i
b2xJbXBsKiBzeW1ib2wgPSBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsKj4oaW1wbCk7CisgICAgICAg
ICAgICBpZiAoIXN5bWJvbC0+aXNOdWxsU3ltYm9sKCkpIHsKKyAgICAgICAgICAgICAgICBJZGVu
dGlmaWVyIHVpZCA9IElkZW50aWZpZXI6OmZyb21VaWQoJmVuY29kZXIudm0oKSwgc3ltYm9sKTsK
KyAgICAgICAgICAgICAgICBpbXBsID0gZW5jb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tV
cFB1YmxpY05hbWUodWlkKS5zdHJpbmcoKS5pbXBsKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBtX2lzOEJpdCA9IGltcGwtPmlzOEJpdCgpOworICAgICAgICBtX2xlbmd0
aCA9IGltcGwtPmxlbmd0aCgpOworCisgICAgICAgIGlmICghbV9sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fbGVuZ3RoOworICAgICAgICBj
b25zdCB2b2lkKiBwYXlsb2FkOworICAgICAgICBpZiAobV9pczhCaXQpCisgICAgICAgICAgICBw
YXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBwYXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBzaXplICo9IDI7
CisgICAgICAgIH0KKworICAgICAgICB1aW50OF90KiBidWZmZXIgPSB0aGlzLT5hbGxvY2F0ZShl
bmNvZGVyLCBzaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgcGF5bG9hZCwgc2l6ZSk7Cisg
ICAgfQorCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgYXV0byBjcmVhdGUgPSBbJl0oY29uc3QgYXV0byogYnVmZmVy
KSAtPiBVbmlxdWVkU3RyaW5nSW1wbCogeworICAgICAgICAgICAgaWYgKCFtX2lzU3ltYm9sKQor
ICAgICAgICAgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmdJbXBsOjphZGQoYnVmZmVyLCBtX2xl
bmd0aCkubGVha1JlZigpOworCisgICAgICAgICAgICBpZiAoIW1fbGVuZ3RoKQorICAgICAgICAg
ICAgICAgIHJldHVybiAmU3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5bWJvbCgpLmxlYWtSZWYoKTsK
KworICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
JmRlY29kZXIudm0oKSwgYnVmZmVyLCBtX2xlbmd0aCk7CisgICAgICAgICAgICBTdHJpbmcgc3Ry
ID0gZGVjb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKGlkZW50KS0+
c3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gc3RyLnJlbGVhc2VJbXBs
KCkuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoaW1wbC0+aXNTeW1ib2woKSk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihpbXBsKTsKKyAgICAg
ICAgfTsKKworICAgICAgICBpZiAobV9pczhCaXQpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
KHRoaXMtPmJ1ZmZlcjxMQ2hhcj4oKSk7CisgICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVm
ZmVyPFVDaGFyPigpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzOEJpdCA6IDE7
CisgICAgYm9vbCBtX2lzU3ltYm9sIDogMTsKKyAgICBib29sIG1faXNBdG9taWMgOiAxOworICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworY2xhc3MgQ2FjaGVkU3RyaW5nSW1wbCA6IHB1Ymxp
YyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTdHJpbmdJbXBsPiB7CitwdWJsaWM6CisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nSW1wbCYgaW1wbCkKKyAgICB7Cisg
ICAgICAgIG1fdW5pcXVlZFN0cmluZ0ltcGwuZW5jb2RlKGVuY29kZXIsIGltcGwpOworICAgIH0K
KworICAgIFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdW5pcXVlZFN0cmluZ0ltcGwuZGVjb2RlKGRlY29kZXIpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCBtX3VuaXF1ZWRTdHJp
bmdJbXBsOworfTsKKworY2xhc3MgQ2FjaGVkU3RyaW5nIDogcHVibGljIFZhcmlhYmxlTGVuZ3Ro
T2JqZWN0PFN0cmluZz4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgbV9pbXBsLmVuY29kZShl
bmNvZGVyLCBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy5pbXBsKCkpKTsK
KyAgICB9CisKKyAgICBTdHJpbmcgZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXRpY19jYXN0PFJlZlB0cjxTdHJpbmdJbXBsPj4o
bV9pbXBsLmRlY29kZShkZWNvZGVyKSkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFN0cmluZyYgZHN0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHN0ID0gZGVj
b2RlKGRlY29kZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRSZWZQdHI8Q2FjaGVk
VW5pcXVlZFN0cmluZ0ltcGw+IG1faW1wbDsKK307CisKK2NsYXNzIENhY2hlZElkZW50aWZpZXIg
OiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmllcj4geworcHVibGljOgorICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIpCisgICAgeworICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5jb2RlciwgaWRlbnRpZmllci5z
dHJpbmcoKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHIgPSBtX3N0cmluZy5kZWNvZGUoZGVj
b2Rlcik7CisgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gSWRl
bnRpZmllcigpOworCisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVy
LnZtKCksIChVbmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7CisgICAgfQorCisgICAgdm9p
ZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CisgICAg
eworICAgICAgICBpZGVudCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQ2FjaGVkU3RyaW5nIG1fc3RyaW5nOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIENhY2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdURjo6T3B0
aW9uYWw8U291cmNlVHlwZTxUPj4+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCisg
ICAgeworICAgICAgICBtX2lzRW1wdHkgPSAhc291cmNlOworCisgICAgICAgIGlmIChtX2lzRW1w
dHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy0+dGVtcGxhdGUgYWxsb2Nh
dGU8VD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc291cmNlKTsKKyAgICB9CisKKyAgICBX
VEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1faXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICAgICAgcmV0dXJuIHsgdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCkt
PmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4mIGRzdCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGRzdCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlVHlwZTxUPj4mIHNv
dXJjZSkKKyAgICB7CisgICAgICAgIGlmICghc291cmNlKQorICAgICAgICAgICAgZW5jb2RlKGVu
Y29kZXIsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY29kZShl
bmNvZGVyLCB7ICpzb3VyY2UgfSk7CisgICAgfQorCisgICAgU291cmNlVHlwZTxUPiogZGVjb2Rl
QXNQdHIoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzRW1w
dHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gdGhpcy0+
dGVtcGxhdGUgYnVmZmVyPFQ+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgYm9vbCBtX2lzRW1wdHk7Cit9OworCitjbGFzcyBDYWNoZWRTaW1wbGVKdW1wVGFibGUg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiB7CitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIGp1bXBUYWJsZSkKKyAgICB7CisgICAgICAgIG1fbWluID0ganVtcFRhYmxlLm1p
bjsKKyAgICAgICAgbV9icmFuY2hPZmZzZXRzLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUuYnJh
bmNoT2Zmc2V0cyk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QKKyAgICB7CisgICAgICAg
IGp1bXBUYWJsZS5taW4gPSBtX21pbjsKKyAgICAgICAgbV9icmFuY2hPZmZzZXRzLmRlY29kZShk
ZWNvZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAgfQorCitwcml2YXRlOgorICAg
IGludDMyX3QgbV9taW47CisgICAgQ2FjaGVkVmVjdG9yPGludDMyX3Q+IG1fYnJhbmNoT2Zmc2V0
czsKK307CisKK2NsYXNzIENhY2hlZFN0cmluZ0p1bXBUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxl
KQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRUYWJsZS5lbmNvZGUoZW5jb2RlciwganVtcFRhYmxl
Lm9mZnNldFRhYmxlKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgbV9vZmZzZXRUYWJsZS5kZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVk
U3RyaW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjogT2Zmc2V0TG9jYXRpb24+IG1f
b2Zmc2V0VGFibGU7Cit9OworCitjbGFzcyBDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YSA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhPiB7CitwdWJsaWM6Cisg
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2s6
OlJhcmVEYXRhJiByYXJlRGF0YSkKKyAgICB7CisgICAgICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMu
ZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fZXhjZXB0aW9uSGFuZGxlcnMpOworICAgICAgICBt
X3N3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3dpdGNoSnVtcFRh
Ymxlcyk7CisgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5lbmNvZGUoZW5jb2Rlciwg
cmFyZURhdGEubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgbV9leHByZXNzaW9u
SW5mb0ZhdFBvc2l0aW9ucy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leHByZXNzaW9uSW5m
b0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5lbmNvZGUoZW5j
b2RlciwgcmFyZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICAgICAgbV9vcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9v
cFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7CisgICAgfQorCisgICAgVW5saW5r
ZWRDb2RlQmxvY2s6OlJhcmVEYXRhKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogcmFyZURhdGEgPSBuZXcg
VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhIHsgfTsKKyAgICAgICAgbV9leGNlcHRpb25IYW5k
bGVycy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMpOworICAg
ICAgICBtX3N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMpOworICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRl
Y29kZXIsIHJhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBtX2V4
cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9leHBy
ZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5k
ZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAg
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZGVjb2RlKGRlY29kZXIsIHJh
cmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTsKKyAgICAgICAg
cmV0dXJuIHJhcmVEYXRhOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKKyAgICBDYWNoZWRWZWN0b3I8
Q2FjaGVkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgQ2FjaGVkVmVj
dG9yPENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAg
IENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNz
aW9uSW5mb0ZhdFBvc2l0aW9uczsKKyAgICBDYWNoZWRIYXNoTWFwPHVuc2lnbmVkLCBVbmxpbmtl
ZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gbV90eXBl
UHJvZmlsZXJJbmZvTWFwOworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOworfTsKKworY2xhc3Mg
Q2FjaGVkQml0VmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEJpdFZlY3Rvcj4g
eworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEJpdFZl
Y3RvciYgYml0VmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9zaXplID0gYml0VmVjdG9yLnNpemUo
KTsKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2RlciwgbV9z
aXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgYml0VmVjdG9yLmJpdHMoKSwgbV9zaXplKTsK
KyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgQml0VmVjdG9yJiBiaXRWZWN0b3Ip
IGNvbnN0CisgICAgeworICAgICAgICBiaXRWZWN0b3IuZW5zdXJlU2l6ZShtX3NpemUpOworICAg
ICAgICBtZW1jcHkoYml0VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVmZmVyKCksIG1fc2l6ZSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc2l6ZTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxUPjo6SGFz
aD4KK2NsYXNzIENhY2hlZEhhc2hTZXQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PEhhc2hTZXQ8U291
cmNlVHlwZTxUPiwgSGFzaEFyZz4+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+JiBzZXQpCisg
ICAgeworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKG1fZW50cmllcyk+IGVudHJpZXNWZWN0
b3Ioc2V0LnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGl0ZW0gOiBzZXQpCisgICAgICAgICAgICBlbnRyaWVzVmVjdG9yW2krK10gPSBp
dGVtOworICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0b3IpOwor
ICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hTZXQ8U291cmNl
VHlwZTxUPiwgSGFzaEFyZz4mIHNldCkgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGU8
ZGVjbHR5cGUobV9lbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKKyAgICAgICAgbV9lbnRyaWVzLmRl
Y29kZShkZWNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBp
dGVtIDogZW50cmllc1ZlY3RvcikKKyAgICAgICAgICAgIHNldC5hZGQoaXRlbSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIENhY2hlZFZlY3RvcjxUPiBtX2VudHJpZXM7Cit9OworCitjbGFzcyBD
YWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9i
amVjdDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4geworcHVibGljOgorICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBl
bnRyeSkKKyAgICB7CisgICAgICAgIG1fY29uc3RhbnQgPSBlbnRyeS5zZWNvbmQ7CisgICAgICAg
IG1fc2V0LmVuY29kZShlbmNvZGVyLCBlbnRyeS5maXJzdCk7CisgICAgfQorCisgICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5
KSBjb25zdAorICAgIHsKKyAgICAgICAgZW50cnkuc2Vjb25kID0gbV9jb25zdGFudDsKKyAgICAg
ICAgbV9zZXQuZGVjb2RlKGRlY29kZXIsIGVudHJ5LmZpcnN0KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdW5zaWduZWQgbV9jb25zdGFudDsKKyAgICBDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0
cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPiBtX3NldDsKK307
CisKK2NsYXNzIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0
PFZhcmlhYmxlRW52aXJvbm1lbnQ+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCisgICAgeworICAgICAg
ICBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7Cisg
ICAgICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBlbnYubV9tYXApOworICAgIH0KKworICAgIHZv
aWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudikgY29u
c3QKKyAgICB7CisgICAgICAgIGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gbV9pc0V2ZXJ5
dGhpbmdDYXB0dXJlZDsKKyAgICAgICAgbV9tYXAuZGVjb2RlKGRlY29kZXIsIGVudi5tX21hcCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKKyAg
ICBDYWNoZWRIYXNoTWFwPENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIFZh
cmlhYmxlRW52aXJvbm1lbnRFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVm
UHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeUhhc2hUcmFp
dHM+IG1fbWFwOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNlID0g
U291cmNlVHlwZTxUPj4KK2NsYXNzIENhY2hlZEFycmF5IDogcHVibGljIFZhcmlhYmxlTGVuZ3Ro
T2JqZWN0PFNvdXJjZSo+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTb3VyY2UqIGFycmF5LCB1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAg
VCogZHN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpT
Qzo6ZW5jb2RlKGVuY29kZXIsIGRzdFtpXSwgYXJyYXlbaV0pOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
U291cmNlKiBhcnJheSwgdW5zaWduZWQgc2l6ZSwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsK
KyAgICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6
OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgYXJyYXlbaV0sIGFyZ3MuLi4pOworICAg
IH0KK307CisKK2NsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlIDogcHVibGljIENhY2hl
ZE9iamVjdDxTY29wZWRBcmd1bWVudHNUYWJsZT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNjb3BlZEFyZ3VtZW50c1RhYmxlJiBzY29wZWRBcmd1
bWVudHNUYWJsZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gc2NvcGVkQXJndW1lbnRzVGFi
bGUubV9sZW5ndGg7CisgICAgICAgIG1fYXJndW1lbnRzLmVuY29kZShlbmNvZGVyLCBzY29wZWRB
cmd1bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSwgbV9sZW5ndGgpOworICAgIH0KKworICAg
IFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29wZWRBcmd1bWVudHNUYWJsZSA9
IFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7Cisg
ICAgICAgIG1fYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS0+
bV9hcmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAg
ICBDYWNoZWRBcnJheTxTY29wZU9mZnNldD4gbV9hcmd1bWVudHM7Cit9OworCitjbGFzcyBDYWNo
ZWRTeW1ib2xUYWJsZUVudHJ5IDogcHVibGljIENhY2hlZE9iamVjdDxTeW1ib2xUYWJsZUVudHJ5
PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN5bWJvbFRhYmxl
RW50cnkmIHN5bWJvbFRhYmxlRW50cnkpCisgICAgeworICAgICAgICBtX2JpdHMgPSBzeW1ib2xU
YWJsZUVudHJ5Lm1fYml0cyB8IFN5bWJvbFRhYmxlRW50cnk6OlNsaW1GbGFnOworICAgIH0KKwor
ICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBTeW1ib2xUYWJsZUVudHJ5JiBzeW1ib2xUYWJsZUVu
dHJ5KSBjb25zdAorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMgPSBtX2Jp
dHM7CisgICAgfQorCitwcml2YXRlOgorICAgIGludHB0cl90IG1fYml0czsKK307CisKK2NsYXNz
IENhY2hlZFN5bWJvbFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxTeW1ib2xUYWJsZT4gewor
cHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghc3ltYm9sVGFibGUubV9y
YXJlRGF0YSk7CisgICAgICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX21h
cCk7CisgICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSBzeW1ib2xUYWJsZS5tX21heFNjb3BlT2Zm
c2V0OworICAgICAgICBtX3VzZXNOb25TdHJpY3RFdmFsID0gc3ltYm9sVGFibGUubV91c2VzTm9u
U3RyaWN0RXZhbDsKKyAgICAgICAgbV9uZXN0ZWRMZXhpY2FsU2NvcGUgPSBzeW1ib2xUYWJsZS5t
X25lc3RlZExleGljYWxTY29wZTsKKyAgICAgICAgbV9zY29wZVR5cGUgPSBzeW1ib2xUYWJsZS5t
X3Njb3BlVHlwZTsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHN5bWJvbFRh
YmxlLm1fYXJndW1lbnRzLmdldCgpKTsKKyAgICB9CisKKyAgICBTeW1ib2xUYWJsZSogZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSk7CisgICAgICAgIG1f
bWFwLmRlY29kZShkZWNvZGVyLCBzeW1ib2xUYWJsZS0+bV9tYXApOworICAgICAgICBzeW1ib2xU
YWJsZS0+bV9tYXhTY29wZU9mZnNldCA9IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgICAgIHN5bWJv
bFRhYmxlLT5tX3VzZXNOb25TdHJpY3RFdmFsID0gbV91c2VzTm9uU3RyaWN0RXZhbDsKKyAgICAg
ICAgc3ltYm9sVGFibGUtPm1fbmVzdGVkTGV4aWNhbFNjb3BlID0gbV9uZXN0ZWRMZXhpY2FsU2Nv
cGU7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX3Njb3BlVHlwZSA9IG1fc2NvcGVUeXBlOworICAg
ICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1lbnRzVGFibGUgPSBtX2FyZ3Vt
ZW50cy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzY29wZWRBcmd1bWVudHNUYWJsZSkK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cy5zZXQoZGVjb2Rlci52bSgpLCBz
eW1ib2xUYWJsZSwgc2NvcGVkQXJndW1lbnRzVGFibGUpOworICAgICAgICByZXR1cm4gc3ltYm9s
VGFibGU7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRy
PENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSwgSWRlbnRp
ZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFN5bWJv
bFRhYmxlSW5kZXhIYXNoVHJhaXRzPiBtX21hcDsKKyAgICBTY29wZU9mZnNldCBtX21heFNjb3Bl
T2Zmc2V0OworICAgIHVuc2lnbmVkIG1fdXNlc05vblN0cmljdEV2YWwgOiAxOworICAgIHVuc2ln
bmVkIG1fbmVzdGVkTGV4aWNhbFNjb3BlIDogMTsKKyAgICB1bnNpZ25lZCBtX3Njb3BlVHlwZSA6
IDM7CisgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gY2FjaGVkIHRoaXMgZXZlbnR1YWxseT8K
KyAgICAvLyBDYWNoZWRQdHI8U3ltYm9sVGFibGVSYXJlRGF0YT4gcmFyZURhdGE7CisgICAgQ2Fj
aGVkUHRyPENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKK307CisKK2Ns
YXNzIENhY2hlZEpTVmFsdWU7CitjbGFzcyBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHkgOiBwdWJs
aWMgQ2FjaGVkT2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5PiB7CitwdWJsaWM6CisgICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgSlNJbW11dGFibGVCdXR0ZXJmbHkmIGltbXV0YWJs
ZUJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gaW1tdXRhYmxlQnV0dGVyZmx5
Lmxlbmd0aCgpOworICAgICAgICBtX2luZGV4aW5nVHlwZSA9IGltbXV0YWJsZUJ1dHRlcmZseS5p
bmRleGluZ1R5cGVBbmRNaXNjKCk7CisgICAgICAgIGlmIChoYXNEb3VibGUobV9pbmRleGluZ1R5
cGUpKQorICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmVuY29kZShlbmNvZGVyLCBpbW11dGFi
bGVCdXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9s
ZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5lbmNvZGUo
ZW5jb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5k
YXRhKCksIG1fbGVuZ3RoKTsKKyAgICB9CisKKyAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogZGVj
b2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU0ltbXV0YWJsZUJ1
dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0
ZShkZWNvZGVyLnZtKCksIG1faW5kZXhpbmdUeXBlLCBtX2xlbmd0aCk7CisgICAgICAgIGlmICho
YXNEb3VibGUobV9pbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmRl
Y29kZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKS5kYXRhKCksIG1fbGVuZ3RoLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5kZWNvZGUoZGVjb2RlciwgaW1tdXRh
YmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2xlbmd0
aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuIGltbXV0YWJsZUJ1dHRlcmZs
eTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwor
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIHVuaW9uIHsKKyAgICAgICAgQ2FjaGVkQXJyYXk8
ZG91YmxlPiBtX2NhY2hlZERvdWJsZXM7CisgICAgICAgIENhY2hlZEFycmF5PENhY2hlZEpTVmFs
dWUsIFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jYWNoZWRWYWx1ZXM7CisgICAgfTsKK307CisK
K2NsYXNzIENhY2hlZFJlZ0V4cCA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8UmVnRXhwPiB7CitwdWJs
aWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVnRXhwJiByZWdF
eHApCisgICAgeworICAgICAgICBtX3BhdHRlcm5TdHJpbmcuZW5jb2RlKGVuY29kZXIsIHJlZ0V4
cC5tX3BhdHRlcm5TdHJpbmcpOworICAgICAgICBtX2ZsYWdzID0gcmVnRXhwLm1fZmxhZ3M7Cisg
ICAgfQorCisgICAgUmVnRXhwKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7
CisgICAgICAgIFN0cmluZyBwYXR0ZXJuIHsgbV9wYXR0ZXJuU3RyaW5nLmRlY29kZShkZWNvZGVy
KSB9OworICAgICAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBwYXR0ZXJu
LCBtX2ZsYWdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkU3RyaW5nIG1fcGF0dGVy
blN0cmluZzsKKyAgICBSZWdFeHBGbGFncyBtX2ZsYWdzOworfTsKKworY2xhc3MgQ2FjaGVkVGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yIDogcHVibGljIENhY2hlZE9iamVjdDxUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3I+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3ImIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
cikKKyAgICB7CisgICAgICAgIG1fcmF3U3RyaW5ncy5lbmNvZGUoZW5jb2RlciwgdGVtcGxhdGVP
YmplY3REZXNjcmlwdG9yLnJhd1N0cmluZ3MoKSk7CisgICAgICAgIG1fY29va2VkU3RyaW5ncy5l
bmNvZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNvb2tlZFN0cmluZ3MoKSk7
CisgICAgfQorCisgICAgUmVmPFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3I6OlN0cmluZ1ZlY3RvciBkZWNvZGVkUmF3U3RyaW5nczsKKyAgICAgICAgVGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yOjpPcHRpb25hbFN0cmluZ1ZlY3RvciBkZWNvZGVkQ29va2VkU3RyaW5nczsK
KyAgICAgICAgbV9yYXdTdHJpbmdzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkUmF3U3RyaW5ncyk7
CisgICAgICAgIG1fY29va2VkU3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZENvb2tlZFN0
cmluZ3MpOworICAgICAgICByZXR1cm4gVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUo
V1RGTW92ZShkZWNvZGVkUmF3U3RyaW5ncyksIFdURk1vdmUoZGVjb2RlZENvb2tlZFN0cmluZ3Mp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZywgND4g
bV9yYXdTdHJpbmdzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRPcHRpb25hbDxDYWNoZWRTdHJp
bmc+LCA0PiBtX2Nvb2tlZFN0cmluZ3M7Cit9OworCitjbGFzcyBDYWNoZWRCaWdJbnQgOiBwdWJs
aWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQ+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0JpZ0ludCYgYmlnSW50KQorICAgIHsKKyAgICAgICAg
bV9sZW5ndGggPSBiaWdJbnQubGVuZ3RoKCk7CisgICAgICAgIG1fc2lnbiA9IGJpZ0ludC5zaWdu
KCk7CisKKyAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aDsK
KyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7
CisgICAgICAgIG1lbWNweShidWZmZXIsIGJpZ0ludC5kYXRhU3RvcmFnZSgpLCBzaXplKTsKKyAg
ICB9CisKKyAgICBKU0JpZ0ludCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhV
bmNoZWNrZWQoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7CisgICAgICAgIGJpZ0ludC0+c2V0U2ln
bihtX3NpZ24pOworICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5i
dWZmZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7CisgICAgICAgIHJl
dHVybiBiaWdJbnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwor
ICAgIGJvb2wgbV9zaWduOworfTsKKworY2xhc3MgQ2FjaGVkSlNWYWx1ZSA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
dmFsdWUpCisgICAgeworICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZS5nZXQoKTsKKworICAgICAg
ICBpZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fdHlwZSA9
IEVuY29kZWRUeXBlOjpKU1ZhbHVlOworICAgICAgICAgICAgKnRoaXMtPmFsbG9jYXRlPEVuY29k
ZWRKU1ZhbHVlPihlbmNvZGVyKSA9IEpTVmFsdWU6OmVuY29kZSh2KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHYuYXNDZWxsKCk7Cisg
ICAgICAgIFZNJiB2bSA9IGVuY29kZXIudm0oKTsKKworICAgICAgICBpZiAoYXV0byogc3ltYm9s
VGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4odm0sIGNlbGwpKSB7CisgICAgICAg
ICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6U3ltYm9sVGFibGU7CisgICAgICAgICAgICB0aGlz
LT5hbGxvY2F0ZTxDYWNoZWRTeW1ib2xUYWJsZT4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAq
c3ltYm9sVGFibGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGF1dG8qIHN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2bSwgY2VsbCkpIHsK
KyAgICAgICAgICAgIG1fdHlwZSA9IEVuY29kZWRUeXBlOjpTdHJpbmc7CisgICAgICAgICAgICBT
dHJpbmdJbXBsKiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZSgpLmltcGwoKTsKKyAgICAgICAg
ICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPihlbmNvZGVyKS0+ZW5j
b2RlKGVuY29kZXIsICppbXBsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhdXRvKiBpbW11dGFibGVCdXR0ZXJmbHkgPSBqc0R5bmFtaWNDYXN0PEpTSW1t
dXRhYmxlQnV0dGVyZmx5Kj4odm0sIGNlbGwpKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNv
ZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8
Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICppbW11
dGFibGVCdXR0ZXJmbHkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGF1dG8qIHJlZ2V4cCA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwKj4odm0sIGNlbGwpKSB7
CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6UmVnRXhwOworICAgICAgICAgICAg
dGhpcy0+YWxsb2NhdGU8Q2FjaGVkUmVnRXhwPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpy
ZWdleHApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1
dG8qIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA9IGpzRHluYW1pY0Nhc3Q8SlNUZW1wbGF0ZU9i
amVjdERlc2NyaXB0b3IqPih2bSwgY2VsbCkpIHsKKyAgICAgICAgICAgIG1fdHlwZSA9IEVuY29k
ZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7CisgICAgICAgICAgICB0aGlzLT5hbGxv
Y2F0ZTxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KGVuY29kZXIpLT5lbmNvZGUoZW5j
b2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIGJpZ0ludCA9IGpzRHlu
YW1pY0Nhc3Q8SlNCaWdJbnQqPih2bSwgY2VsbCkpIHsKKyAgICAgICAgICAgIG1fdHlwZSA9IEVu
Y29kZWRUeXBlOjpCaWdJbnQ7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRCaWdJ
bnQ+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmJpZ0ludCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWUsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBKU1ZhbHVlIHY7CisgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgRW5j
b2RlZFR5cGU6OkpTVmFsdWU6CisgICAgICAgICAgICB2ID0gSlNWYWx1ZTo6ZGVjb2RlKCp0aGlz
LT5idWZmZXI8RW5jb2RlZEpTVmFsdWU+KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRW5jb2RlZFR5cGU6OlN5bWJvbFRhYmxlOgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1
ZmZlcjxDYWNoZWRTeW1ib2xUYWJsZT4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN0cmluZzogeworICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgPSB0aGlzLT5idWZmZXI8Q2FjaGVkVW5pcXVlZFN0cmlu
Z0ltcGw+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIHYgPSBKU1N0cmluZzo6Y3Jl
YXRlKGRlY29kZXIudm0oKSwgYWRvcHRSZWYoKmltcGwpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseToK
KyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5Pigp
LT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNv
ZGVkVHlwZTo6UmVnRXhwOgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRSZWdF
eHA+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVuY29kZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6CisgICAgICAgICAgICB2ID0g
SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShkZWNvZGVyLnZtKCksIHRoaXMtPmJ1
ZmZlcjxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KCktPmRlY29kZShkZWNvZGVyKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6QmlnSW50Ogor
ICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRCaWdJbnQ+KCktPmRlY29kZShkZWNv
ZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZS5z
ZXQoZGVjb2Rlci52bSgpLCBvd25lciwgdik7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0g
Y2xhc3MgRW5jb2RlZFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgSlNWYWx1ZSwKKyAgICAgICAg
U3ltYm9sVGFibGUsCisgICAgICAgIFN0cmluZywKKyAgICAgICAgSW1tdXRhYmxlQnV0dGVyZmx5
LAorICAgICAgICBSZWdFeHAsCisgICAgICAgIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciwKKyAg
ICAgICAgQmlnSW50LAorICAgIH07CisKKyAgICBFbmNvZGVkVHlwZSBtX3R5cGU7Cit9OworCitj
bGFzcyBDYWNoZWRJbnN0cnVjdGlvblN0cmVhbSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SW5zdHJ1
Y3Rpb25TdHJlYW0+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgc3RyZWFtKQorICAgIHsKKyAgICAgICAgbV9pbnN0
cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIHN0cmVhbS5tX2luc3RydWN0aW9ucyk7CisgICAgfQor
CisgICAgSW5zdHJ1Y3Rpb25TdHJlYW0qIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBp
bnN0cnVjdGlvbnNWZWN0b3I7CisgICAgICAgIG1faW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVy
LCBpbnN0cnVjdGlvbnNWZWN0b3IpOworICAgICAgICByZXR1cm4gbmV3IEluc3RydWN0aW9uU3Ry
ZWFtKFdURk1vdmUoaW5zdHJ1Y3Rpb25zVmVjdG9yKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENhY2hlZFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9pbnN0cnVj
dGlvbnM7Cit9OworCitjbGFzcyBDYWNoZWRNZXRhZGF0YVRhYmxlIDogcHVibGljIENhY2hlZE9i
amVjdDxVbmxpbmtlZE1ldGFkYXRhVGFibGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgVW5saW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YVRhYmxlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhVGFibGUubV9pc0ZpbmFsaXplZCk7CisgICAgICAg
IG1faGFzTWV0YWRhdGEgPSBtZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGE7CisgICAgICAgIGlm
ICghbV9oYXNNZXRhZGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllczsgaS0t
OykKKyAgICAgICAgICAgIG1fbWV0YWRhdGFbaV0gPSBtZXRhZGF0YVRhYmxlLmJ1ZmZlcigpW2ld
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBVbmxpbmtlZE1ldGFkYXRhVGFi
bGUmIG1ldGFkYXRhVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBtZXRhZGF0YVRhYmxlLm1f
aXNGaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBtZXRhZGF0YVRhYmxlLm1faXNMaW5rZWQgPSBm
YWxzZTsKKyAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2hhc01ldGFkYXRhID0gbV9oYXNNZXRhZGF0
YTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29m
ZnNldFRhYmxlRW50cmllczsgaS0tOykKKyAgICAgICAgICAgIG1ldGFkYXRhVGFibGUuYnVmZmVy
KClbaV0gPSBtX21ldGFkYXRhW2ldOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faGFz
TWV0YWRhdGE7CisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgVW5saW5rZWRNZXRhZGF0YVRhYmxl
OjpzX29mZnNldFRhYmxlRW50cmllcz4gbV9tZXRhZGF0YTsKK307CisKK2NsYXNzIENhY2hlZFNv
dXJjZU9yaWdpbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlT3JpZ2luPiB7CitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlT3JpZ2luJiBz
b3VyY2VPcmlnaW4pCisgICAgeworICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5jb2Rlciwgc291
cmNlT3JpZ2luLnN0cmluZygpKTsKKyAgICB9CisKKyAgICBTb3VyY2VPcmlnaW4gZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU291cmNlT3JpZ2lu
IHsgbV9zdHJpbmcuZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQorCitwcml2YXRlOgorICAgIENh
Y2hlZFN0cmluZyBtX3N0cmluZzsKK307CisKK2NsYXNzIENhY2hlZFRleHRQb3NpdGlvbiA6IHB1
YmxpYyBDYWNoZWRPYmplY3Q8VGV4dFBvc2l0aW9uPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24pCisgICAgeworICAgICAgICBt
X2xpbmUgPSB0ZXh0UG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOworICAgICAgICBtX2Nv
bHVtbiA9IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKKyAgICB9CisKKyAg
ICBUZXh0UG9zaXRpb24gZGVjb2RlKERlY29kZXImKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFRleHRQb3NpdGlvbiB7IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9saW5l
KSwgT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2NvbHVtbikgfTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgaW50IG1fbGluZTsKKyAgICBpbnQgbV9jb2x1bW47Cit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBDYWNoZWRUeXBlPgorY2xhc3MgQ2FjaGVk
U291cmNlUHJvdmlkZXJTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlPiB7CitwdWJs
aWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlk
ZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VPcmlnaW4uZW5jb2Rl
KGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZU9yaWdpbigpKTsKKyAgICAgICAgbV91cmwu
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnVybCgpKTsKKyAgICAgICAgbV9zb3VyY2VV
UkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZVVSTCgpKTsK
KyAgICAgICAgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBzb3Vy
Y2VQcm92aWRlci5zb3VyY2VNYXBwaW5nVVJMKCkpOworICAgICAgICBtX3N0YXJ0UG9zaXRpb24u
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnN0YXJ0UG9zaXRpb24oKSk7CisgICAgfQor
CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlUHJvdmlkZXImIHNvdXJj
ZVByb3ZpZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNl
VVJMRGlyZWN0aXZlKG1fc291cmNlVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKSk7CisgICAg
ICAgIHNvdXJjZVByb3ZpZGVyLnNldFNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUobV9zb3VyY2VN
YXBwaW5nVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgQ2FjaGVkU291cmNlT3JpZ2luIG1fc291cmNlT3JpZ2luOworICAgIENhY2hlZFN0cmlu
ZyBtX3VybDsKKyAgICBDYWNoZWRTdHJpbmcgbV9zb3VyY2VVUkxEaXJlY3RpdmU7CisgICAgQ2Fj
aGVkU3RyaW5nIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRUZXh0UG9z
aXRpb24gbV9zdGFydFBvc2l0aW9uOworfTsKKworY2xhc3MgQ2FjaGVkU3RyaW5nU291cmNlUHJv
dmlkZXIgOiBwdWJsaWMgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92
aWRlciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0gQ2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRlciwgQ2FjaGVkU3RyaW5n
U291cmNlUHJvdmlkZXI+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU3RyaW5nU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsK
KyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAg
bV9zb3VyY2UuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZSgpLnRvU3RyaW5n
KCkpOworICAgIH0KKworICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVyKiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlIHNvdXJjZVR5cGUpIGNvbnN0CisgICAg
eworICAgICAgICBTdHJpbmcgZGVjb2RlZFNvdXJjZSA9IG1fc291cmNlLmRlY29kZShkZWNvZGVy
KTsKKyAgICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRTb3VyY2VPcmlnaW4gPSBtX3NvdXJjZU9y
aWdpbi5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFN0cmluZyBkZWNvZGVkVVJMID0gbV91cmwu
ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBUZXh0UG9zaXRpb24gZGVjb2RlZFN0YXJ0UG9zaXRp
b24gPSBtX3N0YXJ0UG9zaXRpb24uZGVjb2RlKGRlY29kZXIpOworCisgICAgICAgIFJlZjxTdHJp
bmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3VyY2VQcm92aWRlcjo6
Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVj
b2RlZFVSTCksIGRlY29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsKKyAgICAgICAgQmFz
ZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
ICZzb3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hl
ZFN0cmluZyBtX3NvdXJjZTsKK307CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjbGFzcyBD
YWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJjZVByb3Zp
ZGVyU2hhcGU8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciwgQ2FjaGVkV2ViQXNzZW1ibHlTb3Vy
Y2VQcm92aWRlcj4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBl
PFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlk
ZXI+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAg
ICBCYXNlOjplbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIpOworICAgICAgICBtX2RhdGEu
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLmRhdGEoKSk7CisgICAgfQorCisgICAgV2Vi
QXNzZW1ibHlTb3VyY2VQcm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGVjb2RlZERhdGE7CisgICAgICAgIFNvdXJj
ZU9yaWdpbiBkZWNvZGVkU291cmNlT3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBTdHJpbmcgZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShkZWNvZGVyKTsK
KworICAgICAgICBtX2RhdGEuZGVjb2RlKGRlY29kZXIsIGRlY29kZWREYXRhKTsKKworICAgICAg
ICBSZWY8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBXZWJBc3Nl
bWJseVNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkRGF0YSksIGRlY29kZWRT
b3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVjb2RlZFVSTCkpOworICAgICAgICBCYXNlOjpkZWNv
ZGUoZGVjb2Rlciwgc291cmNlUHJvdmlkZXIuZ2V0KCkpOworCisgICAgICAgIHJldHVybiAmc291
cmNlUHJvdmlkZXIubGVha1JlZigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0
b3I8dWludDhfdD4gbV9kYXRhOworfTsKKyNlbmRpZgorCitjbGFzcyBDYWNoZWRTb3VyY2VQcm92
aWRlciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2VQcm92aWRlcj4geworcHVi
bGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3Zp
ZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIG1fc291cmNlVHlwZSA9IHNvdXJj
ZVByb3ZpZGVyLnNvdXJjZVR5cGUoKTsKKyAgICAgICAgc3dpdGNoIChtX3NvdXJjZVR5cGUpIHsK
KyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW06CisgICAgICAg
IGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGU6CisgICAgICAgICAgICB0aGlz
LT5hbGxvY2F0ZTxDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj4oZW5jb2RlciktPmVuY29kZShl
bmNvZGVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVyJj4oc291
cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5Ogor
ICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRl
cj4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFdlYkFz
c2VtYmx5U291cmNlUHJvdmlkZXImPihzb3VyY2VQcm92aWRlcikpOworICAgICAgICAgICAgYnJl
YWs7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTb3VyY2VQcm92aWRlciog
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1f
c291cmNlVHlwZSkgeworICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6UHJv
Z3JhbToKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZToKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLT5idWZmZXI8Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+
KCktPmRlY29kZShkZWNvZGVyLCBtX3NvdXJjZVR5cGUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5Ogor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyPigpLT5kZWNvZGUoZGVjb2Rlcik7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisKK3ByaXZhdGU6CisgICAgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlIG1fc291cmNlVHlwZTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZT4KK2NsYXNzIENhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlIDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2U+IHsKK3B1YmxpYzoKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUpCisgICAgeworICAgICAgICBtX3Byb3ZpZGVyLmVuY29kZShlbmNvZGVyLCBz
b3VyY2VDb2RlLm1fcHJvdmlkZXIuZ2V0KCkpOworICAgICAgICBtX3N0YXJ0T2Zmc2V0ID0gc291
cmNlQ29kZS5zdGFydE9mZnNldCgpOworICAgICAgICBtX2VuZE9mZnNldCA9IHNvdXJjZUNvZGUu
ZW5kT2Zmc2V0KCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgc291
cmNlQ29kZS5tX3Byb3ZpZGVyID0gbV9wcm92aWRlci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAg
IHNvdXJjZUNvZGUubV9zdGFydE9mZnNldCA9IG1fc3RhcnRPZmZzZXQ7CisgICAgICAgIHNvdXJj
ZUNvZGUubV9lbmRPZmZzZXQgPSBtX2VuZE9mZnNldDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Q2FjaGVkUHRyPENhY2hlZFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOworICAgIGludCBtX3N0
YXJ0T2Zmc2V0OworICAgIGludCBtX2VuZE9mZnNldDsKK307CisKKworY2xhc3MgQ2FjaGVkVW5s
aW5rZWRTb3VyY2VDb2RlIDogcHVibGljIENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFVu
bGlua2VkU291cmNlQ29kZT4geyB9OworCitjbGFzcyBDYWNoZWRTb3VyY2VDb2RlIDogcHVibGlj
IENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFNvdXJjZUNvZGU+IHsKKyAgICB1c2luZyBC
YXNlID0gQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8U291cmNlQ29kZT47CisKK3B1Ymxp
YzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIHNvdXJjZUNv
ZGUpOworICAgICAgICBtX2ZpcnN0TGluZSA9IHNvdXJjZUNvZGUuZmlyc3RMaW5lKCkuemVyb0Jh
c2VkSW50KCk7CisgICAgICAgIG1fc3RhcnRDb2x1bW4gPSBzb3VyY2VDb2RlLnN0YXJ0Q29sdW1u
KCkuemVyb0Jhc2VkSW50KCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgU291cmNlQ29kZSYgc291cmNlQ29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIEJhc2U6
OmRlY29kZShkZWNvZGVyLCBzb3VyY2VDb2RlKTsKKyAgICAgICAgc291cmNlQ29kZS5tX2ZpcnN0
TGluZSA9IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9maXJzdExpbmUpOworICAg
ICAgICBzb3VyY2VDb2RlLm1fc3RhcnRDb2x1bW4gPSBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jh
c2VkSW50KG1fc3RhcnRDb2x1bW4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9maXJz
dExpbmU7CisgICAgaW50IG1fc3RhcnRDb2x1bW47Cit9OworCitjbGFzcyBDYWNoZWRGdW5jdGlv
bkV4ZWN1dGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlJik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGRl
Y29kZShEZWNvZGVyJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBmaXJzdExpbmVPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX2ZpcnN0TGluZU9mZnNldDsgfQorICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CisgICAgdW5zaWduZWQgdW5saW5rZWRG
dW5jdGlvbk5hbWVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRGdW5jdGlvbk5hbWVT
dGFydDsgfQorICAgIHVuc2lnbmVkIHVubGlua2VkQm9keVN0YXJ0Q29sdW1uKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbjsgfQorICAgIHVuc2lnbmVkIHVubGlua2Vk
Qm9keUVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uOyB9
CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0
OyB9CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VM
ZW5ndGg7IH0KKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHR5cGVQcm9maWxp
bmdTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0
OyB9CisgICAgdW5zaWduZWQgdHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudDsgfQorCisgICAgQ29kZUZlYXR1cmVz
IGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIFNvdXJjZVBhcnNl
TW9kZSBzb3VyY2VQYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVBhcnNlTW9kZTsg
fQorCisgICAgdW5zaWduZWQgaXNJblN0cmljdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lz
SW5TdHJpY3RDb250ZXh0OyB9CisgICAgdW5zaWduZWQgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9CisgICAgdW5zaWduZWQgaXNC
dWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9Cisg
ICAgdW5zaWduZWQgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yOyB9CisgICAgdW5zaWduZWQg
Y29uc3RydWN0QWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0QWJpbGl0eTsgfQor
ICAgIHVuc2lnbmVkIGNvbnN0cnVjdG9yS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0
b3JLaW5kOyB9CisgICAgdW5zaWduZWQgZnVuY3Rpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9m
dW5jdGlvbk1vZGU7IH0KKyAgICB1bnNpZ25lZCBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JpcHRNb2RlOyB9CisgICAgdW5zaWduZWQgc3VwZXJCaW5kaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdXBlckJpbmRpbmc7IH0KKyAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2Rlcml2ZWRDb250ZXh0VHlwZTsgfQorCisgICAgSWRlbnRpZmllciBu
YW1lKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kZWNvZGUoZGVjb2Rl
cik7IH0KKyAgICBJZGVudGlmaWVyIGVjbWFOYW1lKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsg
cmV0dXJuIG1fZWNtYU5hbWUuZGVjb2RlKGRlY29kZXIpOyB9CisgICAgSWRlbnRpZmllciBpbmZl
cnJlZE5hbWUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWUu
ZGVjb2RlKGRlY29kZXIpOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9maXJzdExpbmVP
ZmZzZXQ7CisgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CisgICAgdW5zaWduZWQgbV91bmxpbmtl
ZEZ1bmN0aW9uTmFtZVN0YXJ0OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1
bW47CisgICAgdW5zaWduZWQgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW47CisgICAgdW5zaWduZWQg
bV9zdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKKyAgICB1bnNpZ25l
ZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdT
dGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAg
dW5zaWduZWQgbV9wYXJhbWV0ZXJDb3VudDsKKyAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsK
KyAgICBTb3VyY2VQYXJzZU1vZGUgbV9zb3VyY2VQYXJzZU1vZGU7CisgICAgdW5zaWduZWQgbV9p
c0luU3RyaWN0Q29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxl
cyA6IDE7CisgICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWdu
ZWQgbV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQg
bV9jb25zdHJ1Y3RBYmlsaXR5OiAxOworICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5kIDog
MjsKKyAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uTW9kZSA6IDI7IC8vIEZ1bmN0aW9uTW9kZQorICAg
IHVuc2lnbmVkIG1fc2NyaXB0TW9kZTogMTsgLy8gSlNQYXJzZXJTY3JpcHRNb2RlCisgICAgdW5z
aWduZWQgbV9zdXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVkIG1fZGVyaXZlZENvbnRleHRU
eXBlOiAyOworCisgICAgQ2FjaGVkU291cmNlQ29kZSBtX2NsYXNzU291cmNlOworCisgICAgQ2Fj
aGVkSWRlbnRpZmllciBtX25hbWU7CisgICAgQ2FjaGVkSWRlbnRpZmllciBtX2VjbWFOYW1lOwor
ICAgIENhY2hlZElkZW50aWZpZXIgbV9pbmZlcnJlZE5hbWU7CisKKyAgICBDYWNoZWRWYXJpYWJs
ZUVudmlyb25tZW50IG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7CisKKyAgICBDYWNoZWRXcml0
ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsOworICAgIENhY2hlZFdyaXRlQmFycmllcjxD
YWNoZWRGdW5jdGlvbkNvZGVCbG9jaywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV91bmxp
bmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+CitjbGFzcyBDYWNoZWRDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PENv
ZGVCbG9ja1R5cGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
VW5saW5rZWRDb2RlQmxvY2smKTsKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgVW5saW5rZWRD
b2RlQmxvY2smKSBjb25zdDsKKworICAgIEluc3RydWN0aW9uU3RyZWFtKiBpbnN0cnVjdGlvbnMo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuZGVjb2RlKGRl
Y29kZXIpOyB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3Rl
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3Rl
ciBnbG9iYWxPYmplY3RSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVn
aXN0ZXI7IH0KKworICAgIFN0cmluZyBzb3VyY2VVUkxEaXJlY3RpdmUoRGVjb2RlciYgZGVjb2Rl
cikgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpOyB9
CisgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoRGVjb2RlciYgZGVjb2Rlcikg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVy
KTsgfQorCisgICAgdW5zaWduZWQgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFdmFs
OyB9CisgICAgdW5zaWduZWQgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmlj
dE1vZGU7IH0KKyAgICB1bnNpZ25lZCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbnN0cnVjdG9yOyB9CisgICAgdW5zaWduZWQgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBjb25z
dCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9CisgICAgdW5zaWduZWQgaXNCdWls
dGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9CisgICAg
dW5zaWduZWQgc3VwZXJCaW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdXBlckJpbmRpbmc7IH0K
KyAgICB1bnNpZ25lZCBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRNb2RlOyB9
CisgICAgdW5zaWduZWQgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNBcnJvd0Z1bmN0aW9uQ29udGV4dDsgfQorICAgIHVuc2lnbmVkIGlzQ2xhc3NDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc0NsYXNzQ29udGV4dDsgfQorICAgIHVuc2lnbmVkIHdhc0NvbXBp
bGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3dhc0NvbXBpbGVkV2l0
aERlYnVnZ2luZ09wY29kZXM7IH0KKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25z
dCB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZDsgfQorICAgIHVuc2lnbmVkIGRlcml2ZWRDb250
ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZlZENvbnRleHRUeXBlOyB9CisgICAgdW5z
aWduZWQgZXZhbENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ29udGV4dFR5cGU7
IH0KKyAgICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1RhaWxD
YWxsczsgfQorICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNv
dW50OyB9CisgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1
bW47IH0KKworICAgIGludCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9Cisg
ICAgaW50IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxz
OyB9CisgICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRl
cnM7IH0KKworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXM7IH0KKyAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9wYXJzZU1vZGU7IH0KKyAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZVR5cGU7IH0KKworICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogcmFyZURhdGEo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YS5kZWNvZGVBc1B0cihk
ZWNvZGVyKTsgfQorCitwcml2YXRlOgorICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3Rl
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdp
c3RlciBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOworCisgICAgdW5zaWduZWQgbV91c2VzRXZhbCA6
IDE7CisgICAgdW5zaWduZWQgbV9pc1N0cmljdE1vZGUgOiAxOworICAgIHVuc2lnbmVkIG1faXND
b25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7
CisgICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWduZWQgbV9z
dXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVkIG1fc2NyaXB0TW9kZTogMTsKKyAgICB1bnNp
Z25lZCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIG1faXNDbGFz
c0NvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlcyA6IDE7CisgICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOworICAgIHVuc2ln
bmVkIG1fZGVyaXZlZENvbnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0
VHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOworCisgICAgdW5zaWdu
ZWQgbV9saW5lQ291bnQ7CisgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CisKKyAgICBpbnQgbV9u
dW1WYXJzOworICAgIGludCBtX251bUNhbGxlZUxvY2FsczsKKyAgICBpbnQgbV9udW1QYXJhbWV0
ZXJzOworCisgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgU291cmNlUGFyc2VNb2Rl
IG1fcGFyc2VNb2RlOworICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CisKKyAgICBzdGQ6OmFycmF5
PHVuc2lnbmVkLCBMaW5rVGltZUNvbnN0YW50Q291bnQ+IG1fbGlua1RpbWVDb25zdGFudHM7Cisg
ICAgQ2FjaGVkTWV0YWRhdGFUYWJsZSBtX21ldGFkYXRhOworCisgICAgQ2FjaGVkT3B0aW9uYWw8
Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE+IG1fcmFyZURhdGE7CisKKyAgICBDYWNoZWRTdHJpbmcg
bV9zb3VyY2VVUkxEaXJlY3RpdmU7CisgICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlTWFwcGluZ1VS
TERpcmVjdGl2ZTsKKworICAgIENhY2hlZFB0cjxDYWNoZWRJbnN0cnVjdGlvblN0cmVhbT4gbV9p
bnN0cnVjdGlvbnM7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fanVtcFRhcmdldHM7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZz
ZXQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hl
ZEpTVmFsdWU+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgQ2FjaGVkVmVjdG9yPFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247Cisg
ICAgQ2FjaGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87Cisg
ICAgQ2FjaGVkSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+IG1fb3V0T2ZM
aW5lSnVtcFRhcmdldHM7CisKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkQ29uc3RhbnRJZGVudGlm
aWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICBDYWNoZWRWZWN0b3I8
Q2FjaGVkSWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVk
Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFdyaXRlQmFy
cmllcjxDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRGVjbHM7CisgICAgQ2Fj
aGVkVmVjdG9yPENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBt
X2Z1bmN0aW9uRXhwcnM7Cit9OworCitjbGFzcyBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrIDogcHVi
bGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2lu
ZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz47CisKK3B1
YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2spOworICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fdmFyRGVjbGFyYXRpb25zKTsKKyAgICAgICAgbV9sZXhpY2FsRGVj
bGFyYXRpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9sZXhpY2FsRGVjbGFyYXRpb25z
KTsKKyAgICB9CisKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKGRl
Y29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVy
LnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAg
ICAgIG1fdmFyRGVjbGFyYXRpb25zLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFyRGVj
bGFyYXRpb25zKTsKKyAgICAgICAgbV9sZXhpY2FsRGVjbGFyYXRpb25zLmRlY29kZShkZWNvZGVy
LCBjb2RlQmxvY2stPm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7CisgICAgICAgIHJldHVybiBjb2Rl
QmxvY2s7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQg
bV92YXJEZWNsYXJhdGlvbnM7CisgICAgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudCBtX2xleGlj
YWxEZWNsYXJhdGlvbnM7Cit9OworCitjbGFzcyBDYWNoZWRNb2R1bGVDb2RlQmxvY2sgOiBwdWJs
aWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4geworICAg
IHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAg
ICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgICAgIG1fbW9kdWxlRW52
aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBjb2RlQmxvY2subV9t
b2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKyAgICB9
CisKKyAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hD
cmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNv
ZGVCbG9jayk7CisgICAgICAgIGNvZGVCbG9jay0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRh
YmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAg
fQorCitwcml2YXRlOgorICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25z
dGFudFJlZ2lzdGVyT2Zmc2V0OworfTsKKworY2xhc3MgQ2FjaGVkRXZhbENvZGVCbG9jayA6IHB1
YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrPiB7CisgICAgdXNpbmcg
QmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+OworCitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrKTsKKyAgICAgICAgbV92YXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9j
ay5tX3ZhcmlhYmxlcyk7CisgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMuZW5j
b2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsKKyAg
ICB9CisKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KGRlY29k
ZXIudm0oKS5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBC
YXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIG1fdmFyaWFibGVzLmRl
Y29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFyaWFibGVzKTsKKyAgICAgICAgbV9mdW5jdGlv
bkhvaXN0aW5nQ2FuZGlkYXRlcy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2Z1bmN0aW9u
SG9pc3RpbmdDYW5kaWRhdGVzKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSWRlbnRp
ZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0
ZXM7Cit9OworCitjbGFzcyBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRD
b2RlQmxvY2s8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBD
YWNoZWRDb2RlQmxvY2s8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz47CisKK3B1YmxpYzoKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3Jl
YXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2Rl
QmxvY2spOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KK307CisKK0FMV0FZU19J
TkxJTkUgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayYgY2FjaGVk
Q29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsOworCitl
bnVtIENhY2hlZENvZGVCbG9ja1RhZyB7CisgICAgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZywK
KyAgICBDYWNoZWRNb2R1bGVDb2RlQmxvY2tUYWcsCisgICAgQ2FjaGVkRXZhbENvZGVCbG9ja1Rh
ZywKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBlID0gQ2FjaGVkUHJvZ3JhbUNv
ZGVCbG9jazsKKyAgICBzdGF0aWMgY29uc3RleHByIENhY2hlZENvZGVCbG9ja1RhZyB0YWcgPSBD
YWNoZWRQcm9ncmFtQ29kZUJsb2NrVGFnOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IENhY2hl
ZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4geworICAg
IHVzaW5nIHR5cGUgPSBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBDYWNoZWRDb2RlQmxvY2tUYWcgdGFnID0gQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFnOworfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkRXZh
bENvZGVCbG9jaz4geworICAgIHVzaW5nIHR5cGUgPSBDYWNoZWRFdmFsQ29kZUJsb2NrOworICAg
IHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENhY2hlZEV2YWxDb2Rl
QmxvY2tUYWc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgQ2FjaGVkQ29kZUJs
b2NrVHlwZSA9IHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFQ+Ojp0eXBlOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSBVbmxpbmtlZENv
ZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPiYgY2FjaGVkQ29k
ZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLnZtKCksIHN0cnVjdHVyZSkKKyAgICAsIG1faW5z
dHJ1Y3Rpb25zKGNhY2hlZENvZGVCbG9jay5pbnN0cnVjdGlvbnMoZGVjb2RlcikpCisgICAgLCBt
X2xpdmVuZXNzKG51bGxwdHIpCisgICAgLCBtX3RoaXNSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2su
dGhpc1JlZ2lzdGVyKCkpCisgICAgLCBtX3Njb3BlUmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnNj
b3BlUmVnaXN0ZXIoKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoY2FjaGVkQ29kZUJs
b2NrLmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkpCisKKyAgICAsIG1fc291cmNlVVJMRGlyZWN0aXZl
KGNhY2hlZENvZGVCbG9jay5zb3VyY2VVUkxEaXJlY3RpdmUoZGVjb2RlcikpCisgICAgLCBtX3Nv
dXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoY2FjaGVkQ29kZUJsb2NrLnNvdXJjZU1hcHBpbmdVUkxE
aXJlY3RpdmUoZGVjb2RlcikpCisKKyAgICAsIG1fdXNlc0V2YWwoY2FjaGVkQ29kZUJsb2NrLnVz
ZXNFdmFsKCkpCisgICAgLCBtX2lzU3RyaWN0TW9kZShjYWNoZWRDb2RlQmxvY2suaXNTdHJpY3RN
b2RlKCkpCisgICAgLCBtX2lzQ29uc3RydWN0b3IoY2FjaGVkQ29kZUJsb2NrLmlzQ29uc3RydWN0
b3IoKSkKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoY2FjaGVkQ29kZUJsb2NrLmhhc0Nh
cHR1cmVkVmFyaWFibGVzKCkpCisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hlZENvZGVC
bG9jay5pc0J1aWx0aW5GdW5jdGlvbigpKQorICAgICwgbV9zdXBlckJpbmRpbmcoY2FjaGVkQ29k
ZUJsb2NrLnN1cGVyQmluZGluZygpKQorICAgICwgbV9zY3JpcHRNb2RlKGNhY2hlZENvZGVCbG9j
ay5zY3JpcHRNb2RlKCkpCisgICAgLCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQoY2FjaGVkQ29k
ZUJsb2NrLmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSkKKyAgICAsIG1faXNDbGFzc0NvbnRleHQo
Y2FjaGVkQ29kZUJsb2NrLmlzQ2xhc3NDb250ZXh0KCkpCisgICAgLCBtX3dhc0NvbXBpbGVkV2l0
aERlYnVnZ2luZ09wY29kZXMoY2FjaGVkQ29kZUJsb2NrLndhc0NvbXBpbGVkV2l0aERlYnVnZ2lu
Z09wY29kZXMoKSkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kKGNhY2hlZENvZGVCbG9jay5jb25z
dHJ1Y3RvcktpbmQoKSkKKyAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNhY2hlZENvZGVCbG9j
ay5kZXJpdmVkQ29udGV4dFR5cGUoKSkKKyAgICAsIG1fZXZhbENvbnRleHRUeXBlKGNhY2hlZENv
ZGVCbG9jay5ldmFsQ29udGV4dFR5cGUoKSkKKyAgICAsIG1faGFzVGFpbENhbGxzKGNhY2hlZENv
ZGVCbG9jay5oYXNUYWlsQ2FsbHMoKSkKKyAgICAsIG1fbGluZUNvdW50KGNhY2hlZENvZGVCbG9j
ay5saW5lQ291bnQoKSkKKyAgICAsIG1fZW5kQ29sdW1uKGNhY2hlZENvZGVCbG9jay5lbmRDb2x1
bW4oKSkKKyAgICAsIG1fbnVtVmFycyhjYWNoZWRDb2RlQmxvY2subnVtVmFycygpKQorICAgICwg
bV9udW1DYWxsZWVMb2NhbHMoY2FjaGVkQ29kZUJsb2NrLm51bUNhbGxlZUxvY2FscygpKQorICAg
ICwgbV9udW1QYXJhbWV0ZXJzKGNhY2hlZENvZGVCbG9jay5udW1QYXJhbWV0ZXJzKCkpCisgICAg
LCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0dXJlcygpKQorICAgICwgbV9wYXJzZU1v
ZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSgpKQorICAgICwgbV9jb2RlVHlwZShjYWNoZWRD
b2RlQmxvY2suY29kZVR5cGUoKSkKKyAgICAsIG1fcmFyZURhdGEoY2FjaGVkQ29kZUJsb2NrLnJh
cmVEYXRhKGRlY29kZXIpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkQ29kZUJsb2NrJiBjb2RlQmxvY2spIGNvbnN0
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVDb25zdGFudENvdW50OyBpLS07KQor
ICAgICAgICBjb2RlQmxvY2subV9saW5rVGltZUNvbnN0YW50c1tpXSA9IG1fbGlua1RpbWVDb25z
dGFudHNbaV07CisKKyAgICBtX21ldGFkYXRhLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9t
ZXRhZGF0YSk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5kZWNvZGUoZGVjb2Rl
ciwgY29kZUJsb2NrLm1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMpOworICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50UmVnaXN0ZXJz
LCAmY29kZUJsb2NrKTsKKyAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5k
ZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKTsKKyAgICBtX2V4cHJlc3Npb25JbmZvLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9l
eHByZXNzaW9uSW5mbyk7CisgICAgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5kZWNvZGUoZGVjb2Rl
ciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOworICAgIG1fanVtcFRhcmdldHMu
ZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBtX2NvbnN0YW50
SWRlbnRpZmllclNldHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50SWRlbnRp
ZmllclNldHMpOworICAgIG1faWRlbnRpZmllcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5t
X2lkZW50aWZpZXJzKTsKKyAgICBtX2JpdFZlY3RvcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9j
ay5tX2JpdFZlY3RvcnMpOworICAgIG1fZnVuY3Rpb25EZWNscy5kZWNvZGUoZGVjb2RlciwgY29k
ZUJsb2NrLm1fZnVuY3Rpb25EZWNscywgJmNvZGVCbG9jayk7CisgICAgbV9mdW5jdGlvbkV4cHJz
LmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkV4cHJzLCAmY29kZUJsb2NrKTsK
K30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRQcm9ncmFtQ29kZUJs
b2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykK
K3sKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OlVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNo
ZWRNb2R1bGVDb2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rlciwg
ZGVjb2Rlci52bSgpLnVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQo
KSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRXZhbENv
ZGVCbG9jazo6VW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIGNvbnN0IENh
Y2hlZEV2YWxDb2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rlciwg
ZGVjb2Rlci52bSgpLnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVk
Q29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUmIGV4ZWN1dGFibGUpCit7CisgICAgbV9maXJzdExpbmVPZmZzZXQgPSBleGVjdXRh
YmxlLm1fZmlyc3RMaW5lT2Zmc2V0OworICAgIG1fbGluZUNvdW50ID0gZXhlY3V0YWJsZS5tX2xp
bmVDb3VudDsKKyAgICBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQgPSBleGVjdXRhYmxlLm1f
dW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKKyAgICBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1u
ID0gZXhlY3V0YWJsZS5tX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uOworICAgIG1fdW5saW5rZWRC
b2R5RW5kQ29sdW1uID0gZXhlY3V0YWJsZS5tX3VubGlua2VkQm9keUVuZENvbHVtbjsKKyAgICBt
X3N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3N0YXJ0T2Zmc2V0OworICAgIG1fc291cmNlTGVu
Z3RoID0gZXhlY3V0YWJsZS5tX3NvdXJjZUxlbmd0aDsKKyAgICBtX3BhcmFtZXRlcnNTdGFydE9m
ZnNldCA9IGV4ZWN1dGFibGUubV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgbV90eXBlUHJv
ZmlsaW5nU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0
OworICAgIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IGV4ZWN1dGFibGUubV90eXBlUHJvZmls
aW5nRW5kT2Zmc2V0OworICAgIG1fcGFyYW1ldGVyQ291bnQgPSBleGVjdXRhYmxlLm1fcGFyYW1l
dGVyQ291bnQ7CisKKyAgICBtX2ZlYXR1cmVzID0gZXhlY3V0YWJsZS5tX2ZlYXR1cmVzOworICAg
IG1fc291cmNlUGFyc2VNb2RlID0gZXhlY3V0YWJsZS5tX3NvdXJjZVBhcnNlTW9kZTsKKworICAg
IG1faXNJblN0cmljdENvbnRleHQgPSBleGVjdXRhYmxlLm1faXNJblN0cmljdENvbnRleHQ7Cisg
ICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGV4ZWN1dGFibGUubV9oYXNDYXB0dXJlZFZhcmlh
YmxlczsKKyAgICBtX2lzQnVpbHRpbkZ1bmN0aW9uID0gZXhlY3V0YWJsZS5tX2lzQnVpbHRpbkZ1
bmN0aW9uOworICAgIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgPSBleGVjdXRh
YmxlLm1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3I7CisgICAgbV9jb25zdHJ1Y3RB
YmlsaXR5ID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdEFiaWxpdHk7CisgICAgbV9jb25zdHJ1Y3Rv
cktpbmQgPSBleGVjdXRhYmxlLm1fY29uc3RydWN0b3JLaW5kOworICAgIG1fZnVuY3Rpb25Nb2Rl
ID0gZXhlY3V0YWJsZS5tX2Z1bmN0aW9uTW9kZTsKKyAgICBtX3NjcmlwdE1vZGUgPSBleGVjdXRh
YmxlLm1fc2NyaXB0TW9kZTsKKyAgICBtX3N1cGVyQmluZGluZyA9IGV4ZWN1dGFibGUubV9zdXBl
ckJpbmRpbmc7CisgICAgbV9kZXJpdmVkQ29udGV4dFR5cGUgPSBleGVjdXRhYmxlLm1fZGVyaXZl
ZENvbnRleHRUeXBlOworCisgICAgbV9jbGFzc1NvdXJjZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0
YWJsZS5tX2NsYXNzU291cmNlKTsKKworICAgIG1fbmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0
YWJsZS5uYW1lKCkpOworICAgIG1fZWNtYU5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUu
ZWNtYU5hbWUoKSk7CisgICAgbV9pbmZlcnJlZE5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFi
bGUuaW5mZXJyZWROYW1lKCkpOworCisgICAgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5lbmNv
ZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5wYXJlbnRTY29wZVREWlZhcmlhYmxlcygpKTsKKworICAg
IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1f
dW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29u
c3RydWN0LmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1fdW5saW5rZWRDb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAoreworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgZW52OworICAgIG1fcGFyZW50U2NvcGVURFpW
YXJpYWJsZXMuZGVjb2RlKGRlY29kZXIsIGVudik7CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKGRlY29kZXIsIGVudiwgKnRoaXMpOworICAgIGV4ZWN1dGFibGUtPmZpbmlzaENy
ZWF0aW9uKGRlY29kZXIudm0oKSk7CisKKyAgICBtX2NsYXNzU291cmNlLmRlY29kZShkZWNvZGVy
LCBleGVjdXRhYmxlLT5tX2NsYXNzU291cmNlKTsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9y
Q2FsbC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNh
bGwsIGV4ZWN1dGFibGUpOworICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZGVj
b2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Qs
IGV4ZWN1dGFibGUpOworCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK0FMV0FZU19JTkxJ
TkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERaVmFy
aWFibGVzLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmIGNhY2hlZEV4ZWN1dGFibGUp
CisgICAgOiBCYXNlKGRlY29kZXIudm0oKSwgZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9maXJzdExpbmVPZmZzZXQoY2FjaGVk
RXhlY3V0YWJsZS5maXJzdExpbmVPZmZzZXQoKSkKKyAgICAsIG1fbGluZUNvdW50KGNhY2hlZEV4
ZWN1dGFibGUubGluZUNvdW50KCkpCisgICAgLCBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQo
Y2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KCkpCisgICAgLCBtX3Vu
bGlua2VkQm9keVN0YXJ0Q29sdW1uKGNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRCb2R5U3RhcnRD
b2x1bW4oKSkKKyAgICAsIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uKGNhY2hlZEV4ZWN1dGFibGUu
dW5saW5rZWRCb2R5RW5kQ29sdW1uKCkpCisgICAgLCBtX3N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1
dGFibGUuc3RhcnRPZmZzZXQoKSkKKyAgICAsIG1fc291cmNlTGVuZ3RoKGNhY2hlZEV4ZWN1dGFi
bGUuc291cmNlTGVuZ3RoKCkpCisgICAgLCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldChjYWNoZWRF
eGVjdXRhYmxlLnBhcmFtZXRlcnNTdGFydE9mZnNldCgpKQorICAgICwgbV90eXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSkK
KyAgICAsIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQoKSkKKyAgICAsIG1fcGFyYW1ldGVyQ291bnQoY2FjaGVkRXhlY3V0YWJs
ZS5wYXJhbWV0ZXJDb3VudCgpKQorICAgICwgbV9mZWF0dXJlcyhjYWNoZWRFeGVjdXRhYmxlLmZl
YXR1cmVzKCkpCisgICAgLCBtX3NvdXJjZVBhcnNlTW9kZShjYWNoZWRFeGVjdXRhYmxlLnNvdXJj
ZVBhcnNlTW9kZSgpKQorICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChjYWNoZWRFeGVjdXRhYmxl
LmlzSW5TdHJpY3RDb250ZXh0KCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGNhY2hl
ZEV4ZWN1dGFibGUuaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSkKKyAgICAsIG1faXNCdWlsdGluRnVu
Y3Rpb24oY2FjaGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5GdW5jdGlvbigpKQorICAgICwgbV9pc0J1
aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcihjYWNoZWRFeGVjdXRhYmxlLmlzQnVpbHRpbkRl
ZmF1bHRDbGFzc0NvbnN0cnVjdG9yKCkpCisgICAgLCBtX2NvbnN0cnVjdEFiaWxpdHkoY2FjaGVk
RXhlY3V0YWJsZS5jb25zdHJ1Y3RBYmlsaXR5KCkpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZChj
YWNoZWRFeGVjdXRhYmxlLmNvbnN0cnVjdG9yS2luZCgpKQorICAgICwgbV9mdW5jdGlvbk1vZGUo
Y2FjaGVkRXhlY3V0YWJsZS5mdW5jdGlvbk1vZGUoKSkKKyAgICAsIG1fc2NyaXB0TW9kZShjYWNo
ZWRFeGVjdXRhYmxlLnNjcmlwdE1vZGUoKSkKKyAgICAsIG1fc3VwZXJCaW5kaW5nKGNhY2hlZEV4
ZWN1dGFibGUuc3VwZXJCaW5kaW5nKCkpCisgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShjYWNo
ZWRFeGVjdXRhYmxlLmRlcml2ZWRDb250ZXh0VHlwZSgpKQorCisgICAgLCBtX25hbWUoY2FjaGVk
RXhlY3V0YWJsZS5uYW1lKGRlY29kZXIpKQorICAgICwgbV9lY21hTmFtZShjYWNoZWRFeGVjdXRh
YmxlLmVjbWFOYW1lKGRlY29kZXIpKQorICAgICwgbV9pbmZlcnJlZE5hbWUoY2FjaGVkRXhlY3V0
YWJsZS5pbmZlcnJlZE5hbWUoZGVjb2RlcikpCisKKyAgICAsIG1fcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMoZGVjb2Rlci52bSgpLm1fY29tcGFjdFZhcmlhYmxlTWFwLT5nZXQocGFyZW50U2NvcGVU
RFpWYXJpYWJsZXMpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
QUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJiBjb2RlQmxvY2spCit7
CisgICAgbV90aGlzUmVnaXN0ZXIgPSBjb2RlQmxvY2subV90aGlzUmVnaXN0ZXI7CisgICAgbV9z
Y29wZVJlZ2lzdGVyID0gY29kZUJsb2NrLm1fc2NvcGVSZWdpc3RlcjsKKyAgICBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyID0gY29kZUJsb2NrLm1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisgICAgbV91
c2VzRXZhbCA9IGNvZGVCbG9jay5tX3VzZXNFdmFsOworICAgIG1faXNTdHJpY3RNb2RlID0gY29k
ZUJsb2NrLm1faXNTdHJpY3RNb2RlOworICAgIG1faXNDb25zdHJ1Y3RvciA9IGNvZGVCbG9jay5t
X2lzQ29uc3RydWN0b3I7CisgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGNvZGVCbG9jay5t
X2hhc0NhcHR1cmVkVmFyaWFibGVzOworICAgIG1faXNCdWlsdGluRnVuY3Rpb24gPSBjb2RlQmxv
Y2subV9pc0J1aWx0aW5GdW5jdGlvbjsKKyAgICBtX3N1cGVyQmluZGluZyA9IGNvZGVCbG9jay5t
X3N1cGVyQmluZGluZzsKKyAgICBtX3NjcmlwdE1vZGUgPSBjb2RlQmxvY2subV9zY3JpcHRNb2Rl
OworICAgIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNvZGVCbG9jay5tX2lzQXJyb3dGdW5j
dGlvbkNvbnRleHQ7CisgICAgbV9pc0NsYXNzQ29udGV4dCA9IGNvZGVCbG9jay5tX2lzQ2xhc3ND
b250ZXh0OworICAgIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyA9IGNvZGVCbG9j
ay5tX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXM7CisgICAgbV9jb25zdHJ1Y3Rvcktp
bmQgPSBjb2RlQmxvY2subV9jb25zdHJ1Y3RvcktpbmQ7CisgICAgbV9kZXJpdmVkQ29udGV4dFR5
cGUgPSBjb2RlQmxvY2subV9kZXJpdmVkQ29udGV4dFR5cGU7CisgICAgbV9ldmFsQ29udGV4dFR5
cGUgPSBjb2RlQmxvY2subV9ldmFsQ29udGV4dFR5cGU7CisgICAgbV9oYXNUYWlsQ2FsbHMgPSBj
b2RlQmxvY2subV9oYXNUYWlsQ2FsbHM7CisgICAgbV9saW5lQ291bnQgPSBjb2RlQmxvY2subV9s
aW5lQ291bnQ7CisgICAgbV9lbmRDb2x1bW4gPSBjb2RlQmxvY2subV9lbmRDb2x1bW47CisgICAg
bV9udW1WYXJzID0gY29kZUJsb2NrLm1fbnVtVmFyczsKKyAgICBtX251bUNhbGxlZUxvY2FscyA9
IGNvZGVCbG9jay5tX251bUNhbGxlZUxvY2FsczsKKyAgICBtX251bVBhcmFtZXRlcnMgPSBjb2Rl
QmxvY2subV9udW1QYXJhbWV0ZXJzOworICAgIG1fZmVhdHVyZXMgPSBjb2RlQmxvY2subV9mZWF0
dXJlczsKKyAgICBtX3BhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKKyAgICBtX2Nv
ZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5cGU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBM
aW5rVGltZUNvbnN0YW50Q291bnQ7IGktLTspCisgICAgICAgIG1fbGlua1RpbWVDb25zdGFudHNb
aV0gPSBjb2RlQmxvY2subV9saW5rVGltZUNvbnN0YW50c1tpXTsKKworICAgIG1fbWV0YWRhdGEu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhKTsKKyAgICBtX3JhcmVEYXRhLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YSk7CisKKyAgICBtX3NvdXJjZVVSTERp
cmVjdGl2ZS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fc291cmNlVVJMRGlyZWN0aXZlLmlt
cGwoKSk7CisgICAgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBj
b2RlQmxvY2subV9zb3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsKKworICAgIG1faW5zdHJ1Y3Rp
b25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9pbnN0cnVjdGlvbnMuZ2V0KCkpOworICAg
IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTsKKyAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgbV9leHByZXNzaW9uSW5m
by5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lvbkluZm8pOworICAgIG1fanVt
cFRhcmdldHMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBt
X291dE9mTGluZUp1bXBUYXJnZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9vdXRPZkxp
bmVKdW1wVGFyZ2V0cyk7CisKKyAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50SWRlbnRpZmllclNldHMpOworICAgIG1faWRlbnRp
ZmllcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2lkZW50aWZpZXJzKTsKKyAgICBtX2Jp
dFZlY3RvcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2JpdFZlY3RvcnMpOworICAgIG1f
ZnVuY3Rpb25EZWNscy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25EZWNscyk7
CisgICAgbV9mdW5jdGlvbkV4cHJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlv
bkV4cHJzKTsKK30KKworY2xhc3MgQ2FjaGVkU291cmNlQ29kZUtleSA6IHB1YmxpYyBDYWNoZWRP
YmplY3Q8U291cmNlQ29kZUtleT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKKyAgICB7CisgICAgICAgIG1fc291
cmNlQ29kZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fc291cmNlQ29kZSk7CisgICAgICAgIG1fbmFt
ZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fbmFtZSk7CisgICAgICAgIG1fZmxhZ3MgPSBrZXkubV9m
bGFncy5tX2ZsYWdzOworICAgICAgICBtX2hhc2ggPSBrZXkuaGFzaCgpOworICAgICAgICBtX2Z1
bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBrZXkubV9mdW5jdGlvbkNv
bnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAgIH0KKworICAgIHZvaWQgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGVLZXkmIGtleSkgY29uc3QKKyAgICB7CisgICAg
ICAgIG1fc291cmNlQ29kZS5kZWNvZGUoZGVjb2Rlciwga2V5Lm1fc291cmNlQ29kZSk7CisgICAg
ICAgIG1fbmFtZS5kZWNvZGUoZGVjb2Rlciwga2V5Lm1fbmFtZSk7CisgICAgICAgIGtleS5tX2Zs
YWdzLm1fZmxhZ3MgPSBtX2ZsYWdzOworICAgICAgICBrZXkubV9oYXNoID0gbV9oYXNoOworICAg
ICAgICBrZXkubV9mdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0gbV9m
dW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGUgbV9zb3VyY2VDb2RlOworICAgIENhY2hl
ZFN0cmluZyBtX25hbWU7CisgICAgdW5zaWduZWQgbV9mbGFnczsKKyAgICB1bnNpZ25lZCBtX2hh
c2g7CisgICAgaW50IG1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsK
K307CisKK2NsYXNzIEdlbmVyaWNDYWNoZUVudHJ5IHsKK3B1YmxpYzoKKyAgICBzdGQ6OnBhaXI8
U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgQ2FjaGVkQ29kZUJsb2NrVGFnIG1fdGFnOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorY2xhc3MgQ2FjaGVFbnRyeSA6
IHB1YmxpYyBHZW5lcmljQ2FjaGVFbnRyeSB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2Rlciwgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIGNvbnN0IFVubGlua2VkQ29k
ZUJsb2NrVHlwZSo+IHBhaXIpCisgICAgeworICAgICAgICBtX3RhZyA9IENhY2hlZENvZGVCbG9j
a1R5cGVJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnRhZzsKKyAgICAgICAgbV9rZXkuZW5j
b2RlKGVuY29kZXIsIHBhaXIuZmlyc3QpOworICAgICAgICBtX2NvZGVCbG9jay5lbmNvZGUoZW5j
b2RlciwgcGFpci5zZWNvbmQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgR2VuZXJp
Y0NhY2hlRW50cnk7CisKKyAgICBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV90YWcgPT0gQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlPjo6dGFnKTsKKyAgICAgICAgU291cmNlQ29kZUtleSBkZWNvZGVkS2V5OworICAgICAg
ICBtX2tleS5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZEtleSk7CisgICAgICAgIHJldHVybiB7IFdU
Rk1vdmUoZGVjb2RlZEtleSksIG1fY29kZUJsb2NrLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0K
KworICAgIENhY2hlZFNvdXJjZUNvZGVLZXkgbV9rZXk7CisgICAgQ2FjaGVkUHRyPENhY2hlZENv
ZGVCbG9ja1R5cGU8VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4gbV9jb2RlQmxvY2s7Cit9OworCitz
dGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBHZW5lcmljQ2FjaGVF
bnRyeTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3Rh
ZykgeworICAgIGNhc2UgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzoKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2s+Kj4odGhpcyktPmRlY29kZShkZWNvZGVyKTsKKyAgICBjYXNlIENhY2hlZE1vZHVsZUNvZGVC
bG9ja1RhZzoKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FjaGVFbnRy
eTxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+Kj4odGhpcyktPmRlY29kZShkZWNvZGVy
KTsKKyAgICBjYXNlIENhY2hlZEV2YWxDb2RlQmxvY2tUYWc6CisgICAgICAgIC8vIFdlIGRvIG5v
dCBjYWNoZSBldmFsIGNvZGUgYmxvY2tzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjaWYgQ09N
UElMRVIoTVNWQykKKyAgICAvLyBXaXRob3V0IHRoaXMsIE1TVkMgd2lsbCBjb21wbGFpbiB0aGF0
IHRoaXMgcGF0aCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4KKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBDYWNoZUVudHJ5PFVubGlua2VkRXZhbENvZGVCbG9jaz4qPih0aGlzKS0+
ZGVjb2RlKGRlY29kZXIpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2Vk
Q29kZUJsb2NrVHlwZT4KK3ZvaWQgZW5jb2RlQ29kZUJsb2NrKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBhdXRvKiBlbnRyeSA9IGVuY29kZXIudGVtcGxhdGUgbWFsbG9jPENhY2hlRW50
cnk8VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4oKTsKKyAgICBlbnRyeS0+ZW5jb2RlKGVuY29kZXIs
ICB7IGtleSwganNDYXN0PGNvbnN0IFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGNvZGVCbG9jaykg
fSk7Cit9CisKK3N0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29k
ZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0g
Y29kZUJsb2NrLT5jbGFzc0luZm8odm0pOworCisgICAgRW5jb2RlciBlbmNvZGVyKHZtKTsKKyAg
ICBpZiAoY2xhc3NJbmZvID09IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAg
ICAgICBlbmNvZGVDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBr
ZXksIGNvZGVCbG9jayk7CisgICAgZWxzZSBpZiAoY2xhc3NJbmZvID09IFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICBlbmNvZGVDb2RlQmxvY2s8VW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBrZXksIGNvZGVCbG9jayk7CisgICAg
ZWxzZQorICAgICAgICBBU1NFUlQoY2xhc3NJbmZvID09IFVubGlua2VkRXZhbENvZGVCbG9jazo6
aW5mbygpKTsKKworICAgIHJldHVybiBlbmNvZGVyLnJlbGVhc2UoKTsKK30KKworVW5saW5rZWRD
b2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5
JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgICAgY29uc3QgYXV0
byogY2FjaGVkRW50cnkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdlbmVyaWNDYWNoZUVudHJ5
Kj4oYnVmZmVyKTsKKyAgICBEZWNvZGVyIGRlY29kZXIodm0sIGJ1ZmZlciwgc2l6ZSk7CisgICAg
c3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZW50cnk7CisgICAg
eworICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgICAgIGVudHJ5ID0gY2Fj
aGVkRW50cnktPmRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKKyAgICBpZiAoZW50cnkuZmlyc3Qg
IT0ga2V5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZW50cnkuc2Vjb25k
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYjhhY2I2Y2U1NzBlOTcyNjM4OWMyNmQ3MGJj
YmEyMWRhOGQ0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ2Fz
dC5oIgorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIFNvdXJjZUNvZGVLZXk7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKKworc3RkOjpwYWly
PE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mLCBjb25zdCBT
b3VyY2VDb2RlS2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqKTsKK1VubGlua2VkQ29kZUJs
b2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0
IHZvaWQqLCBzaXplX3QpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KK1VubGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29kZUJsb2NrKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQor
eworICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZGVjb2RlQ29kZUJs
b2NrSW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAppbmRleCA0NjAx
NzkyMWE0NmVmYzY0MTcyNWQwYTIzNTI1MjkwMzVhZjVmM2FkLi5jMzJkMjA0YjZjZDg5NjgxODFj
YjBkMWRmMGVhYjgzZWMxMTgxOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5jcHAKQEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5l
U2xvd0Nhc2UoKQogCiAgICAgd2hpbGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgfHwgIWNhblBydW5l
UXVpY2tseSgpKSB7CiAgICAgICAgIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4o
KTsKKworICAgICAgICB3cml0ZUNvZGVCbG9jaygqaXQtPnZhbHVlLmNlbGwtPnZtKCksIGl0LT5r
ZXksIGl0LT52YWx1ZSk7CisKICAgICAgICAgbV9zaXplIC09IGl0LT5rZXkubGVuZ3RoKCk7CiAg
ICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CiAgICAgfQpAQCAtNTksOSArNjIsOCBAQCBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0m
IHZtLCBFeGVjdXRhYmxlVAogICAgICAgICB2bS50eXBlUHJvZmlsZXIoKSA/IFR5cGVQcm9maWxl
ckVuYWJsZWQ6OlllcyA6IFR5cGVQcm9maWxlckVuYWJsZWQ6Ok5vLCAKICAgICAgICAgdm0uY29u
dHJvbEZsb3dQcm9maWxlcigpID8gQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENv
bnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpObywKICAgICAgICAgV1RGOjpudWxsb3B0KTsKLSAg
ICBTb3VyY2VDb2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0
ZUFnZShrZXkpOwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewot
ICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0ganNDYXN0
PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNo
ZUFuZFVwZGF0ZUFnZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkpOworICAgIGlmICh1
bmxpbmtlZENvZGVCbG9jayAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewogICAgICAgICB1
bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bGluZUNvdW50KCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRDb2RlQmxvY2stPnN0YXJ0Q29sdW1u
KCkgKyBzb3VyY2Uuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpOwogICAgICAgICBib29sIGVu
ZENvbHVtbklzT25TdGFydExpbmUgPSAhbGluZUNvdW50OwpAQCAtNzEsOSArNzMsOSBAQCBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2so
Vk0mIHZtLCBFeGVjdXRhYmxlVAogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNl
TWFwcGluZ1VSTERpcmVjdGl2ZSh1bmxpbmtlZENvZGVCbG9jay0+c291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZSgpKTsKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogICAgIH0KLSAg
ICAKKwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7Ci0gICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRD
b2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1
dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJv
ciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIHVubGlua2VkQ29k
ZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUs
IEV4ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3Jp
cHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNV
bmRlclREWik7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0aW9uczo6dXNlQ29k
ZUNhY2hlKCkpCiAgICAgICAgIG1fc291cmNlQ29kZS5hZGRDYWNoZShrZXksIFNvdXJjZUNvZGVW
YWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fc291cmNlQ29kZS5hZ2UoKSkpOwpAQCAtMTEw
LDkgKzExMiw4IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldFVu
bGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2CiAgICAgICAgIHZtLnR5cGVQcm9m
aWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6
Tm8sIAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2Zp
bGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAg
ICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKLSAgICBTb3VyY2VD
b2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkp
OwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewotICAgICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRh
dGVBZ2U8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBrZXkpOworICAgIGlmIChleGVj
dXRhYmxlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAgIHNvdXJjZS5wcm92
aWRlcigpLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291cmNlVVJMRGlyZWN0
aXZlKCkpOwogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZShleGVjdXRhYmxlLT5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKCkpOwogICAgICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKQEAgLTE1NSw0ICsxNTYsMTAgQEAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFi
bGUoVk0mIHYKICAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOwogfQogCit2b2lkIENvZGVD
YWNoZTo6d3JpdGUoVk0mIHZtKQoreworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX3NvdXJj
ZUNvZGUpCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKHZtLCBpdC5rZXksIGl0LnZhbHVlKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRleCA4YTQ0
MTlmOTZjYThmYTRhNjI5YmUwZTlhNzgyN2NiYWY2OGNmZjg2Li45OTM5NWYyY2QyODQxMTM5YTAz
NWM4YjE1ODliYjkzOWM2OWM1NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJC
eXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAjaW5jbHVkZSAi
RXhlY3V0YWJsZUluZm8uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUGFy
c2VyLmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC04OSwxMyArOTEsNzYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VD
b2RlVmFsdWUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkp
CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZl
dGNoRnJvbURpc2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsK
KyNpZiBPUyhEQVJXSU4pCisgICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6
OmRpc2tDYWNoZVBhdGgoKTsKKyAgICAgICAgaWYgKCFjYWNoZVBhdGgpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICB1bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKKyAg
ICAgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgICAgICBpbnQgY291bnQgPSBzbnByaW50Zihm
aWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOworICAgICAgICBp
ZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNTEyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworICAgICAgICBp
ZiAoZmQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbnQg
cmMgPSBmbG9jayhmZCwgTE9DS19TSCB8IExPQ0tfTkIpOworICAgICAgICBpZiAocmMpIHsKKyAg
ICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CisKKyAgICAgICAgc3RydWN0IHN0YXQgc2I7CisgICAgICAgIGludCByZXMgPSBmc3RhdChm
ZCwgJnNiKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0
X3NpemUpOworICAgICAgICBpZiAocmVzIHx8ICFzaXplKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgY29uc3Qgdm9pZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXpl
LCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgICAgICAgIFVubGlua2VkQ29kZUJs
b2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2Rl
QmxvY2tUeXBlPih2bSwga2V5LCBidWZmZXIsIHNpemUpOworCisgICAgICAgIGlmICghdW5saW5r
ZWRDb2RlQmxvY2spCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhZGRD
YWNoZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fYWdlKSk7
CisgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKKyNlbHNlCisgICAgICAgIFVOVVNF
RF9QQVJBTSh2bSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyNlbmRpZgorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2Vk
Q29kZUJsb2NrVHlwZT4KKyAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxVbmxp
bmtlZENvZGVCbG9jaywgVW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNf
c2FtZTxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVl
LCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPgorICAgIGZldGNoRnJvbURpc2soVk0mIHZtLCBjb25z
dCBTb3VyY2VDb2RlS2V5JiBrZXkpCisgICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5
cGUqIGNvZGVCbG9jayA9IGZldGNoRnJvbURpc2tJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT4o
dm0sIGtleSk7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgp
KSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVy
biBjb2RlQmxvY2s7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Jhc2Vfb2Y8VW5saW5rZWRDb2RlQmxvY2ssIFQ+Ojp2YWx1
ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFQqPgor
ICAgIGZldGNoRnJvbURpc2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JikgeyByZXR1cm4gbnVs
bHB0cjsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgor
ICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKFZNJiB2bSwg
Y29uc3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsKICAgICAgICAgcHJ1bmUoKTsKIAogICAg
ICAgICBpdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAo
ZmluZFJlc3VsdCA9PSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIGZldGNoRnJvbURpc2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2
bSwga2V5KTsKIAogICAgICAgICBpbnQ2NF90IGFnZSA9IG1fYWdlIC0gZmluZFJlc3VsdC0+dmFs
dWUuYWdlOwogICAgICAgICBpZiAoYWdlID4gbV9jYXBhY2l0eSkgewpAQCAtMTE1LDcgKzE4MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgZmluZFJlc3VsdC0+dmFsdWUuYWdlID0gbV9hZ2U7CiAgICAg
ICAgIG1fYWdlICs9IGtleS5sZW5ndGgoKTsKIAotICAgICAgICByZXR1cm4gJmZpbmRSZXN1bHQt
PnZhbHVlOworICAgICAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGZp
bmRSZXN1bHQtPnZhbHVlLmNlbGwuZ2V0KCkpOwogICAgIH0KIAogICAgIEFkZFJlc3VsdCBhZGRD
YWNoZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYgdmFs
dWUpCkBAIC0xOTcsNiArMjYyLDcgQEAgcHVibGljOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBTb3VyY2VDb2RlJiwgRGVidWdnZXJNb2RlLCBPcHRpb25hbDxpbnQ+
IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIFBhcnNlckVycm9yJik7
CiAKICAgICB2b2lkIGNsZWFyKCkgeyBtX3NvdXJjZUNvZGUuY2xlYXIoKTsgfQorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgd3JpdGUoVk0mKTsKIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4gCkBAIC0y
NTYsNCArMzIyLDM2IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENv
ZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhCiAgICAgcmV0dXJuIHVubGlu
a2VkQ29kZUJsb2NrOwogfQogCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29kZUJs
b2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFs
dWUmIHZhbHVlKQoreworI2lmIE9TKERBUldJTikKKyAgICBjb25zdCBjaGFyKiBjYWNoZVBhdGgg
PSBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7CisgICAgaWYgKExJS0VMWSghY2FjaGVQYXRoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpz
RHluYW1pY0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5nZXQoKSk7Cisg
ICAgaWYgKCFjb2RlQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGhhc2gg
PSBrZXkuaGFzaCgpOworICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICBpbnQgY291bnQgPSBz
bnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOwor
ICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgIHJldHVybjsKKworICAg
IHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2RlQ29k
ZUJsb2NrKHZtLCBrZXksIGNvZGVCbG9jayk7CisKKyAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1l
LCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOworICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NL
X0VYIHwgTE9DS19OQik7CisgICAgaWYgKCFyYykKKyAgICAgICAgOjp3cml0ZShmZCwgcmVzdWx0
LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKKyAgICBjbG9zZShmZCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyNlbmRpZgorfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IGNhNTMxNjM2Yjc4MWU4Njll
YTc4Zjc2ZDI1YjVlNGFlYWQ0MTYxODUuLjJiY2FhOWI2NzYyZDI1MmYwYjMxZWUxYTg5NDljZGQ4
Mzc0NjgwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmln
SW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
QEAgLTE2ODgsMTEgKzE2ODgsNiBAQCBib29sIEpTQmlnSW50OjpnZXRQcmltaXRpdmVOdW1iZXIo
RXhlY1N0YXRlKiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdQogICAgIHJldHVy
biB0cnVlOwogfQogCi1pbmxpbmUgc2l6ZV90IEpTQmlnSW50OjpvZmZzZXRPZkRhdGEoKQotewot
ICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9m
KEpTQmlnSW50KSk7Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEpTQmlnSW50
KiBKU0JpZ0ludDo6cGFyc2VJbnQoRXhlY1N0YXRlKiBleGVjLCBDaGFyVHlwZSogIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUpCiB7CkBAIC0xNzk1
LDExICsxNzkwLDYgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4
ZWMsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGwKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotaW5saW5lIEpTQmlnSW50OjpEaWdpdCogSlNCaWdJbnQ6OmRhdGFTdG9yYWdlKCkK
LXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOwotfQotCiBpbmxpbmUgSlNCaWdJbnQ6OkRp
Z2l0IEpTQmlnSW50OjpkaWdpdCh1bnNpZ25lZCBuKQogewogICAgIEFTU0VSVChuIDwgbGVuZ3Ro
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5kZXggMmIzYmY5
MzA3ZDhkYmJiMTEwNzUzM2VkODMwMzQ3YmNkZDRhNjEwYi4uZGJiZjYzZGVkMWM4Y2JkNDhlYTdi
OWZjYjViMGU4NTE1YjVmZWE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNCaWdJbnQg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKKyAgICBmcmllbmQgY2xh
c3MgQ2FjaGVkQmlnSW50OwogCiBwdWJsaWM6CiAKQEAgLTIyOCw4ICsyMjksMTUgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoSlNCaWdJbnQqIHgp
OwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCk7Ci0gICAgRGlnaXQqIGRhdGFTdG9yYWdl
KCk7CisgICAgaW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9m
KEpTQmlnSW50KSk7CisgICAgfQorCisgICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOworICAgIH0KIAogICAgIERpZ2l0
IGRpZ2l0KHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDlmYzM0ZmI5ZmFi
YzNkMDBkYjFmZDk5NzFhYTA5OTZkZmMzZDQ1ZDQuLjhiMDVjYTgyMzAwYmM3OWEyMjlhYzYwZjg2
YmI0NTY2N2VlZmRhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCkBAIC01MjQsNiArNTI0LDEyIEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9w
dGlvbnMoKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwogI2VuZGlmCisK
KyAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQorICAgICAgICBPcHRpb25zOjpkaXNr
Q2FjaGVQYXRoKCkgPSBudWxscHRyOworCisgICAgaWYgKCFPcHRpb25zOjpkaXNrQ2FjaGVQYXRo
KCkpCisgICAgICAgIE9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKIH0KIAogdm9p
ZCBPcHRpb25zOjppbml0aWFsaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAppbmRleCA0YzlmNmI2YjRlMTY5YWRjY2E4MTI0OTM0OTczMDIxMmYxMzgyMTM3Li5hZDcz
YmZkZjE4MWEyOWU0NmFjZmI3YzY4Nzc4MjQxZWIyZmZjYzU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC01MDksNiArNTA5LDggQEAgY29uc3RleHByIGJvb2wg
ZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxzZTsKICAgICB2KGJvb2wsIHRyYWNl
TExJbnRTbG93UGF0aCwgZmFsc2UsIENvbmZpZ3VyYWJsZSwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgdHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYodW5zaWduZWQsIHRocmVzaG9sZEZvckdsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIFVJ
TlRfTUFYLCBOb3JtYWwsICJUaHJlc2hvbGQgZm9yIGdsb2JhbCBsZXhpY2FsIGJpbmRpbmcgZXBv
Y2guIElmIHRoZSBlcG9jaCByZWFjaGVzIHRvIHRoaXMgdmFsdWUsIENvZGVCbG9jayBtZXRhZGF0
YSBmb3Igc2NvcGUgb3BlcmF0aW9ucyB3aWxsIGJlIHJldmlzZWQgZ2xvYmFsbHkuIEl0IG5lZWRz
IHRvIGJlIGdyZWF0ZXIgdGhhbiAxLiIpIFwKKyAgICB2KG9wdGlvblN0cmluZywgZGlza0NhY2hl
UGF0aCwgbnVsbHB0ciwgUmVzdHJpY3RlZCwgIiIpIFwKKyAgICB2KGJvb2wsIGZvcmNlRGlza0Nh
Y2hlLCBmYWxzZSwgUmVzdHJpY3RlZCwgIiIpIFwKIAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNl
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKaW5kZXggODNhYWQzNTYwMzhl
YjJlYzc2ZTZiOGJkMzdjNzQ3NmNlYzkxMzUyZS4uMDNhZGQ0NWZiNTU3MDRjZmEwMmQ2ZTVhMjNj
YjAyYzgwNDdiYmU1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKQEAg
LTQxLDYgKzQxLDggQEAgY2xhc3MgVk07CiBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBGbGFncyBy
ZWdFeHBGbGFncyhjb25zdCBTdHJpbmcmKTsKIAogY2xhc3MgUmVnRXhwIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlZ0V4cDsKKwogcHVibGljOgogICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxl
LmgKaW5kZXggNDBlN2M3ZWMyZmQ2MGI1ODQyYTU3Mjg1YWM5N2IwZjZhOTU5Mzk1ZC4uZTgxMjM0
Mjk3YjBiYjhhMDI1ODAyZjM3YTg5ODQ3MDg4YTVhZTEzNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCkBAIC0zOSw2ICsz
OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlm
aWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6
eSBsaWtlCiAvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRlZmlu
ZU93blByb3BlcnR5LgogY2xhc3MgU2NvcGVkQXJndW1lbnRzVGFibGUgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU7CisK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJ
bW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNr
RnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAppbmRl
eCBlZDk4MmUzMWY1NWJiYmM5MTYyOGQyMzQxNzgxMmJiNGY2YzY4NzExLi41ZWVkZWU2ZjgxODZk
YWVhMzA0MDk4MTNkNDUzNDZhYzA3NWVmZDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RhY2tGcmFtZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgogI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDM4MjY0NDI3MDE1NDkx
YTM0NzYzOTIzNTFlNWY1NjU2ZjZjMTAzZGUuLjRhMzBmMzdkZDc1YTYzMTUwMzc1Yjg5MWY5ZGU4
MjEwZDQ0MzNmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNo
YWluLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaApp
bmRleCA5MTU3ZDViODI5MjAwZmI2YTk2NWVhM2JjNzg2OTZlNTMyYTkyYjk1Li41OTY5MWIyZWM0
MWVjN2FlOTdhZDQwYzk4NDkwMTU2NGNmZmQ0MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD4KIC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0t
LV4KIAogc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgeworICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRT
eW1ib2xUYWJsZUVudHJ5OworCiBwcml2YXRlOgogICAgIHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zm
c2V0RnJvbUJpdHMoaW50cHRyX3QgYml0cykKICAgICB7CkBAIC00MzYsNiArNDM4LDggQEAgc3Ry
dWN0IFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxTeW1ib2xUYWJsZUVu
dHJ5PiB7CiB9OwogCiBjbGFzcyBTeW1ib2xUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewor
ICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRTeW1ib2xUYWJsZTsKKwogcHVibGljOgogICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
aAppbmRleCA3NTVjZDdhOWFhNTc2YzZmN2E0ZGIxNGMwZDllMzAyYzc4ZGI1MTc4Li5iOGJiMzY1
YjU5ZDdlYmFjNzlhYzY4OWE0NDRkYTU5MjcyM2M1MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9CaXRWZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaApAQCAtMzMs
NiArMzMsMTAgQEAKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgQ2FjaGVkQml0VmVjdG9y
OworfQorCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gVGhpcyBpcyBhIHNwYWNlLWVmZmljaWVudCwg
cmVzaXplYWJsZSBiaXR2ZWN0b3IgY2xhc3MuIEluIHRoZSBjb21tb24gY2FzZSBpdApAQCAtMzM4
LDYgKzM0Miw4IEBAIHB1YmxpYzoKICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQogICAgICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEpTQzo6Q2FjaGVkQml0VmVjdG9yOworCiAgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJ
blBvaW50ZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5NjI4YzU2
MDhjYzUyNWUzYWY2OWI4YjgyY2RlMzI1ZmIyZjgxNzViLi5mZDk3NzNkNGQyMmUyZmU3ZTJkZmYy
YmUzYmEyZTNlYTIxZTgyZmIzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTktMDEtMTggIFRhZGV1IFphZ2FsbG8g
IDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzawor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdCBoZWxwZXIgdG8gZXhlY3V0ZSBieXRl
Y29kZS1jYWNoZSB0ZXN0czogaXQgZXhlY3V0ZXMgZWFjaCB0ZXN0CisgICAgICAgIHR3aWNlLCB0
aGUgZmlyc3Qgd2l0aCBKU0NfZGlza0NhY2hlUGF0aCBzZXQgdG8gYSB0ZW1wb3JhcnkgZGlyZWN0
b3J5CisgICAgICAgIGFuZCBzZWNvbmQgd2l0aCBKU0NfZm9yY2VEaXNrQ2FjaGU9dHJ1ZSAoaW4g
YWRkaXRpb24gdG8gdGhlIGNhY2hlIHBhdGgpCisgICAgICAgIHRvIGd1YXJhbnRlZSB0aGF0IG9u
bHkgdGhlIGRpc2sgY2FjaGUgaXMgYmVpbmcgdXNlZCBhbmQgbm8gbmV3CisgICAgICAgIFVubGlu
a2VkQ29kZUJsb2NrcyBhcmUgYmVpbmcgY3JlYXRlZC4KKworICAgICAgICAqIFNjcmlwdHMvanNj
LXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXI6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDEtMjAgIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbG91dCByMjQwMjEw
OiBJdCBicm9rZSB0ZXN0cyBvbiBpT1MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvanNjLXN0
cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIgYi9Ub29scy9TY3Jp
cHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRhZDcxZGU1YjJlNDM1ODQ0ZTg5Y2E1MzFjY2E3OTM4ZGNhNjY4NmEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVj
b2RlLWNhY2hlLXRlc3QtaGVscGVyCkBAIC0wLDAgKzEsNTIgQEAKKyMhL3Vzci9iaW4vZW52IGJh
c2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitzZXQgLWUKKworbXlzeXMoKSB7
CisgICAgc2V0ICtlCisgICAgZXZhbCAiJCoiCisgICAgZXhpdENvZGU9JD8KKyAgICBpZiBbICRl
eGl0Q29kZSAhPSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiQ29tbWFuZCAnJConIGZhaWxlZCIK
KyAgICAgICAgcmV0dXJuICRleGl0Q29kZQorICAgIGZpCit9CisKK3BhdGhUb1ZNPSQxCitzaGlm
dAoraW5wdXRGaWxlPSQxCitzaGlmdAorZXh0cmFPcHRpb25zPSggIiRAIiApCitkaXNrQ2FjaGVQ
YXRoPSQobWt0ZW1wIC1kIC10ICJieXRlY29kZS1jYWNoZSIpCisKK190cmFwX2V4aXQoKSB7IHJt
IC1yZiAiJGRpc2tDYWNoZVBhdGgiOyB9Cit0cmFwIF90cmFwX2V4aXQgRVhJVAorCitleHBvcnQg
SlNDX2Rpc2tDYWNoZVBhdGg9JGRpc2tDYWNoZVBhdGgKK215c3lzICIkcGF0aFRvVk0iICIkaW5w
dXRGaWxlIiAiJHtleHRyYU9wdGlvbnNbQF19IgorZXhwb3J0IEpTQ19mb3JjZURpc2tDYWNoZT10
cnVlCitteXN5cyAiJHBhdGhUb1ZNIiAiJGlucHV0RmlsZSIgIiR7ZXh0cmFPcHRpb25zW0BdfSIK
KwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xz
L1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggOTQ5ZTNmNWI1NTIwMTFiNTFhZDIy
ZGYzZWEwYjVhYmUzNmIzMGFkOS4uN2QzZDgwNDQ4MjkxZDAzZmE5N2E1OGQxY2JjZjk3ZTQ0Nzdh
OTBlOCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysg
Yi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02NTUsNiArNjU1LDE1IEBA
IGRlZiBydW5EZWZhdWx0KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcnVuKCJk
ZWZhdWx0IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBl
bmQKIAorZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
KyAgICB1bmxlc3MgJGhvc3RPUyA9PSAiZGFyd2luIgorICAgICAgICBza2lwCisgICAgICAgIHJl
dHVybgorICAgIGVuZAorICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyAkdGVzdFNwZWNpZmlj
UmVxdWlyZWRPcHRpb25zICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMKKyAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsocGF0aFRvSGVscGVycyAr
ICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlciIpLnRvX3MsIHBhdGhUb1ZNLnRvX3MsICRiZW5j
aG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhh
bmRsZXIpCitlbmQKKwogZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDAzMzExMjE+CiAgICAgaWYg
JHJlbW90ZSBvciAoJGFyY2hpdGVjdHVyZSAhfiAveDg2L2kgYW5kICRob3N0T1MgPT0gImRhcndp
biIpCkBAIC03NTEsNiArNzYwLDcgQEAgZGVmIGRlZmF1bHRSdW4KICAgICAgICAgZGVmYXVsdFF1
aWNrUnVuCiAgICAgZWxzZQogICAgICAgICBydW5EZWZhdWx0CisgICAgICAgIHJ1bkJ5dGVjb2Rl
Q2FjaGUKICAgICAgICAgaWYgJGppdFRlc3RzCiAgICAgICAgICAgICBydW5Ob0xMSW50CiAgICAg
ICAgICAgICBydW5Ob0NKSVRWYWxpZGF0ZVBoYXNlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359697</attachid>
            <date>2019-01-21 10:20:17 -0800</date>
            <delta_ts>2019-01-22 09:30:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192782-20190121192003.patch</filename>
            <type>text/plain</type>
            <size>137514</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
YmM3ZDQ2YWQxODllMGU5NDA3ZGE1OTM1MTc3MTczYWE5MjVjMGI4Li4zNWE2ZjA0MDlkYmY5NmI5
ZTgwMjdmZmUxOWEzMjZmOWVlODk0MDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjAgQEAKKzIwMTktMDEtMjEgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIGxvZ2ljIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG5l
dyBKU0MgYnl0ZWNvZGUuIEZvciBub3csCisgICAgICAgIHRoZSBjYWNoZSBpcyBvbmx5IHVzZWQg
Zm9yIHRlc3RzLgorCisgICAgICAgIEVhY2ggY2xhc3MgdGhhdCBjYW4gYmUgc2VyaWFsaXplZCBo
YXMgYSBjb3VudGVycGFydCBpbiBDYWNoZWRUeXBlcywgd2hpY2gKKyAgICAgICAgaGFuZGxlcyB0
aGUgZGVjb2RpbmcgYW5kIGVuY29kaW5nLiBXaGVuIGRlY29kaW5nLCB0aGUgY2FjaGVkIG9iamVj
dHMgYXJlCisgICAgICAgIG1tYXAnZCBmcm9tIGRpc2ssIGJ1dCBvbmx5IHVzZWQgZm9yIGNyZWF0
aW5nIGluc3RhbmNlcyBvZiB0aGUgcmVzcGVjdGl2ZQorICAgICAgICBpbi1tZW1vcnkgdmVyc2lv
biBvZiBlYWNoIG9iamVjdC4gSWRlYWxseSwgdGhlIG1tYXAnZCBvYmplY3RzIHNob3VsZCBiZQor
ICAgICAgICB1c2VkIGF0IHJ1bnRpbWUgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMpOgor
ICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEhhbmRs
ZXJJbmZvOjpVbmxpbmtlZEhhbmRsZXJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvblN0cmVhbS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRTZXRDb25zdGFudCk6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudElkZW50aWZpZXJTZXRzKToKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEdsb2Jh
bENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6VW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRh
dGFUYWJsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoZnVuY3Rpb25RdWl0KToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZUtleS5oOgor
ICAgICAgICAoSlNDOjpTb3VyY2VDb2RlS2V5OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAg
KiBwYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmg6CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxl
RW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkVuY29kZXI6OkFsbG9jYXRpb246OmJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkVuY29kZXI6OkFsbG9jYXRpb246Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6OkVuY29kZXI6OkFsbG9jYXRpb246OkFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpFbmNv
ZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6dm0pOgorICAgICAgICAoSlND
OjpFbmNvZGVyOjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpvZmZzZXRPZik6Cisg
ICAgICAgIChKU0M6OkVuY29kZXI6OmNhY2hlUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6
b2Zmc2V0Rm9yUHRyKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAgICAg
IChKU0M6OkVuY29kZXI6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdl
OjptYWxsb2MpOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdlOjpidWZmZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpFbmNvZGVyOjpQYWdlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
RW5jb2Rlcjo6UGFnZTo6Z2V0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6
YWxsb2NhdGVOZXdQYWdlKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAg
ICAgIChKU0M6OkRlY29kZXI6On5EZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6dm0p
OgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRlY29k
ZXI6OmNhY2hlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6YWRkRmluYWxpemVyKToK
KyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAgICAgICAg
KEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgIChKU0M6
OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFB0
cjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRQdHI6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZW5jb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVmUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFdy
aXRlQmFycmllcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFBhaXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFBhaXI6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEhhc2hNYXA6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRV
bmlxdWVkU3RyaW5nSW1wbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3Ry
aW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSW1wbDo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpDYWNoZWRTdHJpbmc6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZElk
ZW50aWZpZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRlY29k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZE9wdGlvbmFsOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkT3B0aW9uYWw6OmRlY29kZUFzUHRyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2lt
cGxlSnVtcFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTaW1wbGVKdW1wVGFi
bGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3RyaW5nSnVtcFRhYmxlOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZEJpdFZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Qml0VmVjdG9yOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoU2V0OjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQ6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEFycmF5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRB
cnJheTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2NvcGVkQXJndW1lbnRz
VGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZUVudHJ5OjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTeW1ib2xUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkU3ltYm9sVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZEltbXV0YWJsZUJ1dHRlcmZseTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSW1t
dXRhYmxlQnV0dGVyZmx5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdF
eHA6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlZ0V4cDo6ZGVjb2RlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmRlY29kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJpZ0ludDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkQmlnSW50OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVl
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRJbnN0cnVjdGlvblN0cmVhbTo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW06OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZE1ldGFkYXRhVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZE1l
dGFkYXRhVGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9y
aWdpbjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlT3JpZ2luOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFRleHRQb3NpdGlvbjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU3RyaW5nU291cmNlUHJvdmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0
cmluZ1NvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRX
ZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNl
UHJvdmlkZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJj
ZUNvZGVTaGFwZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29k
ZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU291cmNlQ29kZTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpmaXJzdExpbmVPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmVD
b3VudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5s
aW5rZWRGdW5jdGlvbk5hbWVTdGFydCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRCb2R5U3RhcnRDb2x1bW4gY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQm9keUVuZENvbHVtbiBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c3RhcnRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNvdXJjZUxl
bmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFy
YW1ldGVyc1N0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25F
eGVjdXRhYmxlOjp0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnR5cGVQcm9maWxpbmdFbmRPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlckNvdW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpmZWF0dXJl
cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c291cmNl
UGFyc2VNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxl
Ojppc0luU3RyaWN0Q29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6aGFzQ2FwdHVyZWRWYXJpYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmlzQnVpbHRpbkZ1bmN0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjppc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3RvciBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29uc3RydWN0QWJpbGl0eSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29uc3RydWN0b3JLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlOjpmdW5jdGlvbk1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNjcmlwdE1vZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnN1cGVyQmluZGluZyBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVyaXZlZENvbnRleHRUeXBlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpuYW1lIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjplY21hTmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mZXJyZWROYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3RlciBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c2NvcGVSZWdpc3RlciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0UmVnaXN0ZXIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNvdXJjZVVSTERpcmVjdGl2ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6dXNlc0V2YWwgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzU3RyaWN0TW9kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aXNDb25zdHJ1Y3RvciBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2FwdHVyZWRWYXJpYWJsZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQnVpbHRpbkZ1bmN0aW9uIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpzdXBlckJpbmRpbmcgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNjcmlwdE1vZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQXJyb3dGdW5jdGlvbkNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQ2xhc3NDb250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjp3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpjb25zdHJ1Y3RvcktpbmQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmRlcml2ZWRDb250ZXh0VHlw
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6ZXZhbENvbnRleHRUeXBl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpoYXNUYWlsQ2FsbHMgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmxpbmVDb3VudCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6ZW5kQ29sdW1uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1WYXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkQ29kZUJsb2NrOjpudW1DYWxsZWVMb2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRDb2RlQmxvY2s6Om51bVBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRD
b2RlQmxvY2s6OmZlYXR1cmVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2Nr
OjpwYXJzZU1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmNvZGVU
eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpyYXJlRGF0YSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZFByb2dyYW1Db2RlQmxvY2s6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFByb2dyYW1Db2RlQmxvY2s6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZE1vZHVsZUNvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkTW9kdWxlQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRF
dmFsQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRFdmFsQ29kZUJsb2Nr
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OlVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jazo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmVuY29kZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGVLZXk6OmRlY29kZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlRW50cnk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlRW50cnk6OiBj
b25zdCk6CisgICAgICAgIChKU0M6OiBjb25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OmRlY29kZUNvZGVCbG9ja0ltcGwpOgorICAgICAgICAqIHJ1
bnRpbWUvQ2FjaGVkVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmguCisgICAgICAgIChKU0M6OmRlY29kZUNv
ZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpn
ZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZTo6d3JpdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChK
U0M6OkNvZGVDYWNoZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmVu
ZCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAg
ICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAg
IChKU0M6OndyaXRlQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoK
KyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAg
ICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9T
dGFja0ZyYW1lLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAg
ICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorCiAyMDE5LTAxLTIwICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIERGRzogV2hlbiBpbmxpbmluZyBEYXRhVmll
dyBzZXQqIGludHJpbnNpY3Mgd2UgbmVlZCB0byBzZXQgdW5kZWZpbmVkIGFzIG91ciByZXN1bHQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzMzZTNlNzZlMmU4ZGM3YzY0MDk1MDg5YTdiYjZhYzUyYzMwNTY0My4uMWNiMzk4ZjRl
ZGI1MDY2M2ViYWUwNjUxM2RlNDdhMTkyNWM2ZDVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
OS0wMS0yMSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBD
YWNoZSBieXRlY29kZSB0byBkaXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTI3ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MDg0OTMyPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpdFZlY3Rv
cnMgaGF2ZSB0byBiZSBmcmllbmRzIHdpdGggSlNDOjpDYWNoZUJpdFZlY3RvciB0byBhbGxvdwor
ICAgICAgICBzZXJpYWxpemluZyBpdHMgYnVmZmVyIGFzIHBhcnQgb2YgdGhlIGJ5dGVjb2RlIGNh
Y2hlIGVuY29kaW5nLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorCiAyMDE5LTAxLTIw
ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJvbGxvdXQgcjI0
MDIxMDogSXQgYnJva2UgdGVzdHMgb24gaU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggNmFjZGZiMTM0MjY0NjViYzQ4YmYxZDdhNWRiNzc3NWYzODQ5YTU5ZC4uZWE4NThi
MTY4MjQ5YTFjMTJkM2IxMWM2MDM1MWRhMjg3ZGQwYzQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtODMzLDYgKzgzMyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudC5oCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCiAgICAgcnVudGltZS9KU0dsb2Jh
bE9iamVjdElubGluZXMuaAorICAgIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAogICAg
IHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2UuaAogICAgIHJ1bnRpbWUvSlNJbnRlcm5hbFByb21p
c2VEZWZlcnJlZC5oCiAgICAgcnVudGltZS9KU01pY3JvdGFzay5oCkBAIC04NDgsNiArODQ5LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBydW50
aW1lL0pTUHJvbWlzZS5oCiAgICAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5oCiAgICAg
cnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oCisgICAgcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm94eS5oCiAgICAgcnVudGltZS9KU1J1bkxvb3BU
aW1lci5oCiAgICAgcnVudGltZS9KU1Njb3BlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggM2U3NDRkYmU4NDVmODhkMTBlYzQ4OThkMjg2ZjI0MGZhY2YzMjkwYy4uODUyY2MwNGU5
NDAzZDk1MDY1MzBlNjE5YzdmNjE4NzExOWFkZGFjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTgyNiw3ICs4MjYsNyBAQAogCQkyNjJEODVCNzFDMEQ2NTBGMDA2QUNCNjEgLyog
QWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFy
dGlhbFJlZ2lzdGVyU3RhbGxzLmggKi87IH07CiAJCTI2ODRENDM4MUMwMDE2MUMwMDgxRDY2MyAv
KiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggKi87IH07CiAJ
CTI2OUQ2MzZFMUJGQkU1RDEwMDEwMUIxRCAvKiBGVExPdXRwdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OUQ2MzZEMUJGQkU1RDAwMDEwMUIxRCAv
KiBGVExPdXRwdXQuaCAqLzsgfTsKLQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oICovOyB9OworCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkExMTEyNDQxOTJGQ0U3OTAw
NUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElD
YWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAwRTJBMjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5o
ICovOyB9OwogCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0
QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsK
QEAgLTEwNjIsNyArMTA2Miw3IEBACiAJCTUzRUFGRTJGMjA4REZBQjQwMDdENTI0QiAvKiB0ZXN0
YXBpLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MUQ0RTE5MUY1OUNERDIwMEVDODM2QyAvKiB0ZXN0YXBpLmNwcCAqLzsgfTsKIAkJNTNFRTAxQjYy
MThGNjkxNjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VFMDFCNTIxOEY2OTBGMDBBRDFGOEQgLyogSlNTY3JpcHQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0VF
MDFCODIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRTAxQjcyMThGN0VGRjAwQUQxRjhE
IC8qIEpTU2NyaXB0SW50ZXJuYWwuaCAqLzsgfTsKLQkJNTNGMTFGNDEyMDkxMzhENzAwRTQxMUE3
IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVC
dXR0ZXJmbHkuaCAqLzsgfTsKKwkJNTNGMTFGNDEyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRh
YmxlQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0Y0MEU4
NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2Fz
bVNlY3Rpb25zLmggKi87IH07CiAJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVu
Y3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLzsg
fTsKIAkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggKi87IH07CkBAIC0zMTI4LDYgKzMxMjgsNyBAQAogCQkxNDM4
NkE3MzFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0RXZhbEV4ZWN1dGFibGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzODZBNzYxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0
RXZhbEV4ZWN1dGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0Mzg2QTc3MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQzQkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8q
IENhY2hlZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFR5
cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDAwNTFGMEE1MzFEM0IwMDA1
RjA2MSAvKiBOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5vZGUuaDsg
cGF0aCA9IHRlc3RzL05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MDA1
MjAwQTUzMUQzQjAwMDVGMDYxIC8qIE5vZGUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBu
YW1lID0gTm9kZS5jOyBwYXRoID0gdGVzdHMvTm9kZS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDQwMDc0ODBBNTM2Q0MyMDAwNUYwNjEgLyogTm9kZUxpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTm9kZUxpc3QuaDsgcGF0aCA9IHRlc3RzL05vZGVMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjQyLDYgKzMyNDMsNyBAQAogCQkx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgbmFtZSA9IHRlc3RhcGkuanM7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFw
aS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREQTgxOEUwRDk5RkQyMDAwQjBB
NEZCIC8qIEpTTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0xleGljYWxFbnZpcm9ubWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0REFGQTQ1MjFFM0I4NzEwMDRC
NjhGNyAvKiBDYWNoZWRUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REUw
RDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gSlNHbG9iYWxPYmplY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZp
ZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJMTRERjA0RDkxNkIzOTk2RDAwMTZBNTEzIC8qIFN0
YXRpY1Byb3BlcnR5QW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RhdGljUHJvcGVydHlBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NEU4NEY5OTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NjAwLDYgKzY2MDIsOCBAQAogCQkJCTlFNzI5NDA5MTkwRjAzMDYwMDFBOTFC
NSAvKiBCdW5kbGVQYXRoLm1tICovLAogCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBC
dXR0ZXJmbHkuaCAqLywKIAkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5
SW5saW5lcy5oICovLAorCQkJCTE0REFGQTQ1MjFFM0I4NzEwMDRCNjhGNyAvKiBDYWNoZWRUeXBl
cy5jcHAgKi8sCisJCQkJMTQzQkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8qIENhY2hlZFR5cGVzLmgg
Ki8sCiAJCQkJMEZFQzNDNUYxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oICov
LAogCQkJCUJDQTYyREZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJ
MTQ1QzUwN0YwRDlERjYzQjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKaW5kZXggOTQ5ZWRjYWE1YjUzOGI4NThhZGMzNGMxMTI0ZGM2YzFlZGQ2MjI1
NS4uMjU4ZDQ5Y2VkMWUyZDU5ZGRiZGYxNDdmNGFjYjE4OTQ5MzhkYmExNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dApAQCAtNzEzLDYgKzcxMyw3IEBAIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAogcnVudGltZS9Cb29sZWFuT2JqZWN0LmNwcAogcnVudGltZS9Cb29sZWFuUHJv
dG90eXBlLmNwcAogcnVudGltZS9DYWxsRGF0YS5jcHAKK3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CiBydW50aW1lL0NhdGNoU2NvcGUuY3BwCiBydW50aW1lL0NsYXNzSW5mby5jcHAKIHJ1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmNwcAppbmRleCA0NWRlODJlN2NiNThhMjgzYjIwZmNhZTU5ODJiYmI1YzA0
ZGE5MTc1Li5hMGY4NTNhNmUwNWRjNDYxOGZmMDRkZTU5MDE5YjFlYTEzZDZiMzdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApAQCAtNjMs
NiArNjMsNyBAQCBCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyhWTSogdm0sIENvbW1vbklkZW50
aWZpZXJzKiBjb21tb25JZGVudGlmaWVycykKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJ
RklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFJJVkFURV9UT19QVUJMSUNfRU5U
UlkpCiAgICAgSlNDX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElPTl9OQU1FKElOSVRJQUxJWkVfUFVC
TElDX1RPX1BSSVZBVEVfRU5UUlkpCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJT
X0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQor
ICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9M
KElOSVRJQUxJWkVfU1lNQk9MX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZKQogICAgIEpTQ19DT01N
T05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJQUxJWkVf
U1lNQk9MX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQogICAgIG1fcHJpdmF0ZVRvUHVibGljTWFw
LmFkZChtX2RvbGxhclZNUHJpdmF0ZU5hbWUuaW1wbCgpLCAmbV9kb2xsYXJWTU5hbWUpOwogICAg
IG1fcHVibGljVG9Qcml2YXRlTWFwLmFkZChtX2RvbGxhclZNTmFtZS5pbXBsKCksICZtX2RvbGxh
clZNUHJpdmF0ZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCmluZGV4IGY2NmI4Y2I1MWViNDAyZDg3MzZmZDdkZDBkMmQwZTdhMjkyZjQ1MTIu
Ljg1MzFkYjI2MGJkMDcwMWIzNzE5MDFiNjc0YmZmNWRmMGJmYmQ4NzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTIxMyw2ICsyMTMsNyBA
QCBleHRlcm4gU3ltYm9sSW1wbDo6U3RhdGljU3ltYm9sSW1wbCBwb2x5UHJvdG9Qcml2YXRlTmFt
ZTsKIC8vIFdlIGNvbW1hbmRlZXIgdGhlIHB1YmxpY1RvUHJpdmF0ZU1hcCB0byBhbGxvdyB1cyB0
byBjb252ZXJ0IHByaXZhdGUgc3ltYm9sIG5hbWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN5bWJv
bC4KIC8vIGUuZy4gQGl0ZXJhdG9yU3ltYm9sIHBvaW50cyB0byBTeW1ib2wuaXRlcmF0b3IgaW4g
dGhpcyBtYXAgcmF0aGVyIHRoYW4gdG8gYSBhbiBhY3R1YWwgcHJpdmF0ZSBuYW1lLgogLy8gRklY
TUU6IFRoaXMgaXMgYSB3ZWlyZCBoYWNrIGFuZCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBkbyB0aGlz
LgorI2RlZmluZSBJTklUSUFMSVpFX1NZTUJPTF9QUklWQVRFX1RPX1BVQkxJQ19FTlRSWShuYW1l
KSBtX3ByaXZhdGVUb1B1YmxpY01hcC5hZGQobV8jI25hbWUjI1N5bWJvbC5pbXBsKCksICZtXyMj
bmFtZSMjU3ltYm9sUHJpdmF0ZUlkZW50aWZpZXIpOwogI2RlZmluZSBJTklUSUFMSVpFX1NZTUJP
TF9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWShuYW1lKSBtX3B1YmxpY1RvUHJpdmF0ZU1hcC5hZGQo
bV8jI25hbWUjI1N5bWJvbFByaXZhdGVJZGVudGlmaWVyLmltcGwoKSwgJm1fIyNuYW1lIyNTeW1i
b2wpOwogCiBjbGFzcyBCdWlsdGluTmFtZXMgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA2OGQzZDJkMmJlNzlmNDA1ZGM5NGQwNzFhMTQwNDk5
ZjI1OTQzMDA2Li5kY2NjNDExMTQ4NzM3NWRjMThiNmFkZGI1MzlhMTA4Njc3MmVhYTUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtODY5LDcg
Kzg2OSw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KIAotdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhW
TSYgdm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFu
dHMpCit2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZN
JiB2bSwgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRz
KQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggOTRlNmJkMmVlMGVmYjJi
YTA3NGNlYTI1MGQ4MmY3MzE4MmE2ZTExMy4uYzc0NzQyNmIzOGU1NjZlYmI5ZTg0MmNlMjNlZDU5
Mzg0ZWIwYWUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aApAQCAtODkwLDcgKzg5MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUFsbFByZWRp
Y3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKLSAg
ICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNvbnN0IFZlY3Rv
cjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOworICAgIHZvaWQgc2V0
Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgVmVjdG9yPENvbnN0YW50
SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKTsKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRS
ZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywg
Y29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9IYW5kbGVySW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hh
bmRsZXJJbmZvLmgKaW5kZXggNjZjM2I3Njg3NzU2MjA3NzZkMjYzZmYwOThkZTZmNDZiNjZlNzc4
My4uN2Y0NjVkMmFlOTM3OTliOTFkZjc4NzE0MTk0ZmNhMzRiZDJhMWExMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKQEAgLTg5LDYgKzg5LDEwIEBA
IHN0cnVjdCBIYW5kbGVySW5mb0Jhc2UgewogfTsKIAogc3RydWN0IFVubGlua2VkSGFuZGxlcklu
Zm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKCkK
KyAgICB7CisgICAgfQorCiAgICAgVW5saW5rZWRIYW5kbGVySW5mbyh1aW50MzJfdCBzdGFydCwg
dWludDMyX3QgZW5kLCB1aW50MzJfdCB0YXJnZXQsIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlKQog
ICAgIHsKICAgICAgICAgdGhpcy0+c3RhcnQgPSBzdGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmgKaW5kZXggNzBlZGUzZTQxYzVk
NWM0ODlkNzk2ZmNmYzBjMWNjZDk5OGQyOWVkNS4uYjQwNDgwYTVlNzk1OGRmMGE0MTdmZjEyMjAw
Y2Q5NTVlZDAwMmExZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luc3RydWN0aW9uU3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luc3RydWN0aW9uU3RyZWFtLmgKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgSW5zdHJ1Y3Rpb25T
dHJlYW0gewogICAgIHVzaW5nIEluc3RydWN0aW9uQnVmZmVyID0gVmVjdG9yPHVpbnQ4X3QsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnN0cnVjdGlvblN0
cmVhbVdyaXRlcjsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW07CiBw
dWJsaWM6CiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggZjBlOWQ2
NGM4NTRhM2Y1MzY3NTJkNDg3NDY5MmQyNzg3N2Q2NzA0OS4uMTQ4YTUzNTIxZmE3NjJjMjU3YTY1
MmJiZTNkM2MxMjg0YjY2ODZlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTY1LDEyICs2NSwxNSBAQCBjbGFzcyBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7
CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CitjbGFzcyBDYWNoZWRDb2RlQmxvY2s7CisKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRW
YWx1ZVByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxlOwogdHlw
ZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVu
c2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVk
IFVubGlua2VkTExJbnRDYWxsTGlua0luZm87Ci11c2luZyBDb25zdGFudEluZGVudGlmaWVyU2V0
RW50cnkgPSBzdGQ6OnBhaXI8SWRlbnRpZmllclNldCwgdW5zaWduZWQ+OwordXNpbmcgQ29uc3Rh
bnRJZGVudGlmaWVyU2V0RW50cnkgPSBzdGQ6OnBhaXI8SWRlbnRpZmllclNldCwgdW5zaWduZWQ+
OwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewogICAgIHN0cnVjdCBPZmZzZXRM
b2NhdGlvbiB7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgbV9jb25zdGFudFJl
Z2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwogICAgICAgICBtX2NvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcik7Ci0gICAgICAgIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5hcHBlbmQoQ29u
c3RhbnRJbmRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7CisgICAgICAgIG1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0cy5hcHBlbmQoQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkoc2V0LCBy
ZXN1bHQpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQpAQCAtMjAyLDcgKzIwNSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fbGlua1RpbWVDb25zdGFudHNbaW5kZXhdOwogICAgIH0KICAgICBjb25z
dCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgY29uc3QgVmVjdG9yPENvbnN0YW50SW5k
ZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IHJldHVybiBtX2Nv
bnN0YW50SWRlbnRpZmllclNldHM7IH0KKyAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlm
aWVyU2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFu
dElkZW50aWZpZXJTZXRzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25z
dGFudFJlZ2lzdGVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQpA
QCAtMzY3LDYgKzM3MCwxMCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENv
ZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYs
IERlYnVnZ2VyTW9kZSk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
ICAgIFVubGlua2VkQ29kZUJsb2NrKERlY29kZXImLCBTdHJ1Y3R1cmUqLCBjb25zdCBDYWNoZWRD
b2RlQmxvY2s8Q29kZUJsb2NrVHlwZT4mKTsKKwogICAgIH5VbmxpbmtlZENvZGVCbG9jaygpOwog
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0zNzgsNiArMzg1LDkgQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKICAgICBmcmllbmQgY2xh
c3MgQnl0ZWNvZGVHZW5lcmF0b3I7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRDb2RlQmxvY2s7CisKICAgICB2b2lkIGFwcGx5
TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYp
OwogCiAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKQEAgLTQ0NCw3ICs0NTQs
NyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOwogICAg
IFZlY3RvcjxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVy
PFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3RvcjxDb25zdGFudEluZGVu
dGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICBWZWN0b3I8Q29u
c3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKICAgICBW
ZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CiAgICAgRnVuY3Rpb25F
eHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAppbmRleCA5OTg3YjQz
MTMzNDNiNmNiNzUyYTQyMGIzNThkOWEzNjAzMTcyZjI2Li4yZjMyMzc5YTAxZjQzNWMzZDAxOGRm
NjUxOTM1YTJlMmIwM2NkMDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiBjbGFzcyBVbmxp
bmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sg
ewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAg
LTU5LDExICs2MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRp
ZGF0ZXMgPSBXVEZNb3ZlKGZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsKICAgICB9CiBwcml2
YXRlOgorICAgIGZyaWVuZCBDYWNoZWRFdmFsQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRFdmFs
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQog
CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRFdmFsQ29k
ZUJsb2NrJik7CisKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlczsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
LmgKaW5kZXggYjU0ODJiNjVjOGI4ZWZiM2FhMzA2YTQxM2JkNTQ2MDM0OTFhOTAxMy4uNjVhYWZj
ODhlNTk3Y2IyMGY0OWZkMzI3MmJkZTE1YTEwZGNiZGQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5o
CkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWNoZWRGdW5j
dGlvbkNvZGVCbG9jazsKKwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayBmaW5hbCA6
IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtl
ZENvZGVCbG9jayBCYXNlOwpAQCAtNDQsMTAgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRGdW5j
dGlvbkNvZGVCbG9jazsKKwogICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAgfQor
CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhEZWNvZGVyJiwgY29uc3QgQ2FjaGVkRnVu
Y3Rpb25Db2RlQmxvY2smKTsKICAgICAKIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCA1MjY4OThjOTUxZDgyMTc1OTc5
ODgxMTAyZjlkYzdkNjE1YjAxNTIyLi42NTI2Y2Q5MGNiYmFhNjllMjZjYzBhMWMwYWM3N2I2OGMx
OTVmYjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMzksMTEgKzM5LDEzIEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBEZWNvZGVyOwogY2xhc3MgRnVuY3Rpb25NZXRhZGF0YU5v
ZGU7CiBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CiBjbGFzcyBQYXJzZXJFcnJvcjsKIGNsYXNz
IFNvdXJjZVByb3ZpZGVyOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNz
IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogZW51bSBVbmxpbmtlZEZ1bmN0aW9uS2luZCB7
CiAgICAgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwKQEAgLTU0LDYgKzU2LDcgQEAgY2xhc3MgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwogICAgIGZyaWVuZCBjbGFzcyBWTTsKKyAgICBm
cmllbmQgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOwogCiAgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CkBAIC0xNDcsNiArMTUwLDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiwgU3Ry
dWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5r
ZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgVmFy
aWFibGVFbnZpcm9ubWVudCYsICBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0
aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUoRGVjb2RlciYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4
ZWN1dGFibGUmKTsKIAogICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2ln
bmVkIG1fbGluZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAppbmRleCAzNDM4NjJlNjQ3MGZlMWIxYTQy
NDg1ZDg3NjllMjc3ZDcyYzE1MDhlLi4zZDA0MmVmNDg2YzdkMTJjYWYwZDMyZDYwMmUxNmZiMjEy
ZjZlMDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaApAQCAtMzgsNiArMzgsMTIgQEAgcHJvdGVjdGVkOgog
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9k
ZSkKICAgICB7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
KyAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+JiBjYWNoZWRD
b2RlQmxvY2spCisgICAgICAgIDogQmFzZShkZWNvZGVyLCBzdHJ1Y3R1cmUsIGNhY2hlZENvZGVC
bG9jaykKKyAgICB7CisgICAgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCmluZGV4IDNlM2U4ZGZiNGQ1
YmJjNDY0ZjVlNmEyMzQ0Y2FhY2E5OTQ5NDllZjEuLmY5NDcwN2UzYjE4NWQ3NzE2YjQxNmE0OTMz
ZWNhNmM5NTFhNGQ1ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKQEAgLTM1LDYgKzM1LDcgQEAgY2xhc3MgTWV0
YWRhdGFUYWJsZTsKIGNsYXNzIFVubGlua2VkTWV0YWRhdGFUYWJsZSB7CiAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3MgTWV0YWRhdGFUYWJs
ZTsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkTWV0YWRhdGFUYWJsZTsKIAogcHVibGljOgogICAg
IHN0cnVjdCBMaW5raW5nRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKaW5kZXgg
MGU5YzVmNWJkZGU2Yzc1NjJiNjZhMDNiYzBhOThjODdhZGJkOTMwMi4uMzkzM2JmZDNlM2FlMjRl
NmY2NGY1ZTBhOWQ5ZDExOTAyMTMwMDZkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2su
aApAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsK
K2NsYXNzIENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKwogY2xhc3MgVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CkBAIC03NCwx
MSArNzcsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVk
TW9kdWxlQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
TW9kdWxlQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CiAKKyAgICBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZE1vZHVsZUNv
ZGVCbG9jayYpOworCiAgICAgaW50IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0
YW50UmVnaXN0ZXJPZmZzZXQgeyAwIH07CiAKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAppbmRl
eCBhZmUyNmFlZDFhNTAzYWIyM2ZkOGY0NDdmOWRlYzJkYzA2Y2E1ODI2Li43Njg0NGEzN2E0MTE5
NTJlZWRhYmE0NWM3ODJkZGY1NTUzYjBjZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCkBAIC0yOSw2
ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWNoZWRQcm9ncmFtQ29kZUJs
b2NrOworCiBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2sgQmFzZTsKQEAgLTUwLDExICs1MiwxNSBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fbGV4aWNhbERlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBDYWNoZWRQ
cm9ncmFtQ29kZUJsb2NrOworCiAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dl
ck1vZGUgZGVidWdnZXJNb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFs
Q29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9CiAKKyAgICBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2soRGVjb2RlciYsIGNvbnN0IENhY2hlZFByb2dyYW1Db2RlQmxvY2smKTsK
KwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJhdGlvbnM7CiAgICAgVmFyaWFi
bGVFbnZpcm9ubWVudCBtX2xleGljYWxEZWNsYXJhdGlvbnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGFkNjUzNjE4YjQy
OGZjYTA2YmUwNGRkYjY2YzBmM2QzMWQyYjI2NGMuLjhlODI1NjAyOGIxMDM3ZGIyYjMwN2FjZDE3
ZDA1YjdmMzU4ZjQ3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFt
ZUNsb3N1cmUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgi
CiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCmluZGV4IGI1ZDQ3ZGQzZGI5YWQ4YmE2Zjg0NWJiMzIxMTRmYjBkYWY4ZDhmNjUuLmRlYmE2
MzdmMTIxM2Q5NDNiMjQwMjFmMjU0MDJjZDJmZDk4NWE5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1
ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2Rl
Q2FjaGUuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVkZSAiQ29uZmlnRmlsZS5o
IgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgpAQCAtMTk4OCw4ICsxOTg5LDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayhFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0YXRl
KikKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIHZtLmNvZGVDYWNoZSgpLT53
cml0ZSh2bSk7CisKICAgICBqc2NFeGl0KEVYSVRfU1VDQ0VTUyk7CiAKICNpZiBDT01QSUxFUihN
U1ZDKQpAQCAtMjg3Niw2ICsyODgwLDggQEAgaW50IHJ1bkpTQyhjb25zdCBDb21tYW5kTGluZSYg
b3B0aW9ucywgYm9vbCBpc1dvcmtlciwgY29uc3QgRnVuYyYgZnVuYykKICNlbmRpZgogICAgIH0K
IAorICAgIHZtLmNvZGVDYWNoZSgpLT53cml0ZSh2bSk7CisKICAgICBpZiAoaXNXb3JrZXIpIHsK
ICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIC8vIFRoaXMgaXMgbmVl
ZGVkIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgd29ya2VyJ3MgbWFpbgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaAppbmRleCBjM2MwZjczNDZiMDU1MzZiNWMwOTlk
NDMzNzE1ODY0MzZmZDNkOWMyLi5mYmU0YzlhMGRmMWNjMWFmMDBiMjUyODU3ZWU5Yzc4NGZhMjdh
ZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuaApAQCAtMzMs
NiArMzMsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTb3VyY2VDb2RlIDogcHVi
bGljIFVubGlua2VkU291cmNlQ29kZSB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRTb3Vy
Y2VDb2RlOworCiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VDb2RlKCkKICAgICAgICAgICAg
IDogVW5saW5rZWRTb3VyY2VDb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU291cmNlQ29kZUtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VDb2RlS2V5LmgKaW5kZXggYThlNjAzYzI2YTBiNjAzNjJhMDJkZWFjMDUxNjE2OWQ1NzU1
ODAyMS4uY2MzYWJlMjFmYWY1NzE0YmY5OTgwMWRmYjllZWQ0MjgzNDgxZjE4OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmgKQEAgLTM3LDYgKzM3LDgg
QEAgZW51bSBjbGFzcyBUeXBlUHJvZmlsZXJFbmFibGVkIHsgTm8sIFllcyB9OwogZW51bSBjbGFz
cyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZCB7IE5vLCBZZXMgfTsKIAogY2xhc3MgU291cmNl
Q29kZUZsYWdzIHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU291cmNlQ29kZUtleTsKKwogcHVi
bGljOgogICAgIFNvdXJjZUNvZGVGbGFncygpID0gZGVmYXVsdDsKIApAQCAtNzAsNiArNzIsOCBA
QCBwcml2YXRlOgogfTsKIAogY2xhc3MgU291cmNlQ29kZUtleSB7CisgICAgZnJpZW5kIGNsYXNz
IENhY2hlZFNvdXJjZUNvZGVLZXk7CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2RlS2V5KCkKICAg
ICB7CkBAIC0xMTQsNiArMTE4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICYmIHN0cmluZygp
ID09IG90aGVyLnN0cmluZygpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBT
b3VyY2VDb2RlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisKICAgICBzdHJ1Y3QgSGFzaCB7CiAgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTb3VyY2VDb2RlS2V5JiBhLCBj
b25zdCBTb3VyY2VDb2RlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCmluZGV4IDZlYzU5MGI1
M2U2YzljMzI3ZTQyNDRkMGIxMTliMzZkMDk2ZmM4MWUuLmFhYWFkM2Y0MTJmOGYzZmE1YmMxZjJm
ZWJmYjE0Y2M3NGRlMjI0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9VbmxpbmtlZFNvdXJjZUNvZGUuaApAQCAtMzUsNiArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBVbmxpbmtlZFNvdXJjZUNvZGUgeworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTb3VyY2VUeXBlPgorICAgICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkVW5saW5rZWRTb3Vy
Y2VDb2RlU2hhcGU7CisKICAgICBwdWJsaWM6CiAgICAgICAgIFVubGlua2VkU291cmNlQ29kZSgp
CiAgICAgICAgICAgICA6IG1fcHJvdmlkZXIoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgKaW5kZXggMTI5YjVlYTZiZDliNzI2YTFk
OWE0MDExZWY5NjkwZjhjYzZiMGRkMy4uZDg0YjJlMWZiMjE4ZWM0OWNkOTVlNWJkODVkYzc2NTBj
ZmE2MDlkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJs
ZUVudmlyb25tZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJs
ZUVudmlyb25tZW50LmgKQEAgLTExNiw2ICsxMTYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0V2
ZXJ5dGhpbmdDYXB0dXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7
IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVu
dDsKKwogICAgIE1hcCBtX21hcDsKICAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgeyBm
YWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZDk1NTRjNWE3ODRlNjJjYWI1ZDBkMTMyYTAzZmM5ZDI1MDM5YjNh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCkBAIC0wLDAgKzEsMjAyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRU
eXBlcy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVk
ZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKKyNpbmNsdWRl
ICJKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50
c1RhYmxlLmgiCisjaW5jbHVkZSAiU291cmNlQ29kZUtleS5oIgorI2luY2x1ZGUgIlVubGlua2Vk
RXZhbENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIK
KyNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZ0ltcGwuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgU291cmNlVHlwZUltcGwgeworICAgIHVz
aW5nIHR5cGUgPSBUOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTb3VyY2VU
eXBlSW1wbDxULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFQ+Ojp2YWx1
ZSAmJiAhc3RkOjppc19zYW1lPHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfLCB2b2lkPjo6dmFsdWU+
PiB7CisgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFQ6OlNvdXJjZVR5cGVfOworCit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgU291cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJjZVR5
cGVJbXBsPFQ+Ojp0eXBlOworCitjbGFzcyBFbmNvZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShFbmNvZGVyKTsKKyAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKKworcHVibGlj
OgorICAgIGNsYXNzIEFsbG9jYXRpb24geworICAgICAgICBmcmllbmQgY2xhc3MgRW5jb2RlcjsK
KworICAgIHB1YmxpYzoKKyAgICAgICAgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXI7IH0KKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBBbGxvY2F0aW9uKHVpbnQ4X3QqIGJ1
ZmZlciwgcHRyZGlmZl90IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQor
ICAgICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgICAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Cisg
ICAgfTsKKworICAgIEVuY29kZXIoVk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisgICAgICAg
ICwgbV9iYXNlT2Zmc2V0KDApCisgICAgICAgICwgbV9jdXJyZW50UGFnZShudWxscHRyKQorICAg
IHsKKyAgICAgICAgYWxsb2NhdGVOZXdQYWdlKCk7CisgICAgfQorCisgICAgVk0mIHZtKCkgeyBy
ZXR1cm4gbV92bTsgfQorCisgICAgQWxsb2NhdGlvbiBtYWxsb2ModW5zaWduZWQgc2l6ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzaXplKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldDsKKyAg
ICAgICAgaWYgKG1fY3VycmVudFBhZ2UtPm1hbGxvYyhzaXplLCBvZmZzZXQpKQorICAgICAgICAg
ICAgcmV0dXJuIEFsbG9jYXRpb24geyBtX2N1cnJlbnRQYWdlLT5idWZmZXIoKSArIG9mZnNldCwg
bV9iYXNlT2Zmc2V0ICsgb2Zmc2V0IH07CisgICAgICAgIGFsbG9jYXRlTmV3UGFnZShzaXplKTsK
KyAgICAgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIFQqIG1hbGxvYygpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUKj4obWFsbG9jKHNpemVvZihUKSkuYnVmZmVyKCkpOworICAgIH0KKworICAgIHB0
cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcHRy
ZGlmZl90IG9mZnNldDsKKyAgICAgICAgcHRyZGlmZl90IGJhc2VPZmZzZXQgPSAwOworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKSB7CisgICAgICAgICAgICBpZiAocGFn
ZS5nZXRPZmZzZXQoYWRkcmVzcywgb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFz
ZU9mZnNldCArIG9mZnNldDsKKyAgICAgICAgICAgIGJhc2VPZmZzZXQgKz0gcGFnZS5zaXplKCk7
CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBjYWNoZVB0cihjb25zdCB2b2lkKiBwdHIs
IHB0cmRpZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBtX3B0clRvT2Zmc2V0TWFwLmFkZChw
dHIsIG9mZnNldCk7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNl
dEZvclB0cihjb25zdCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9wdHJU
b09mZnNldE1hcC5maW5kKHB0cik7CisgICAgICAgIGlmIChpdCA9PSBtX3B0clRvT2Zmc2V0TWFw
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJu
IHsgaXQtPnZhbHVlIH07CisgICAgfQorCisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90
Piwgc2l6ZV90PiByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIHNpemVfdCBzaXplID0gbV9iYXNl
T2Zmc2V0ICsgbV9jdXJyZW50UGFnZS0+c2l6ZSgpOworICAgICAgICBNYWxsb2NQdHI8dWludDhf
dD4gYnVmZmVyID0gTWFsbG9jUHRyPHVpbnQ4X3Q+OjptYWxsb2Moc2l6ZSk7CisgICAgICAgIHVu
c2lnbmVkIG9mZnNldCA9IDA7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFnZSA6IG1fcGFn
ZXMpIHsKKyAgICAgICAgICAgIG1lbWNweShidWZmZXIuZ2V0KCkgKyBvZmZzZXQsIHBhZ2UuYnVm
ZmVyKCksIHBhZ2Uuc2l6ZSgpKTsKKyAgICAgICAgICAgIG9mZnNldCArPSBwYWdlLnNpemUoKTsK
KyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPT0gc2l6ZSk7CisgICAg
ICAgIHJldHVybiB7IFdURk1vdmUoYnVmZmVyKSwgc2l6ZSB9OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBjbGFzcyBQYWdlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBhZ2Uoc2l6ZV90IHNpemUp
CisgICAgICAgICAgICA6IG1fb2Zmc2V0KDApCisgICAgICAgICAgICAsIG1fY2FwYWNpdHkoc2l6
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8dWludDhfdD46
Om1hbGxvYyhzaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbWFsbG9jKHNpemVfdCBz
aXplLCBwdHJkaWZmX3QmIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGFs
aWdubWVudCA9IHN0ZDo6bWluKGFsaWdub2Yoc3RkOjptYXhfYWxpZ25fdCksIHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHNpemUpKSk7CisgICAgICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbV9v
ZmZzZXQpOworICAgICAgICAgICAgc2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihhbGln
bm1lbnQsIHNpemUpOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0
ICsgc2l6ZSkgPiBtX2NhcGFjaXR5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0OworICAgICAgICAgICAgbV9vZmZzZXQgPSBvZmZz
ZXQgKyBzaXplOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQorICAg
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9v
ZmZzZXQpOyB9CisKKyAgICAgICAgYm9vbCBnZXRPZmZzZXQoY29uc3Qgdm9pZCogYWRkcmVzcywg
cHRyZGlmZl90JiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYWRkcmVzcyk7CisgICAg
ICAgICAgICBpZiAoYWRkciA+PSBtX2J1ZmZlci5nZXQoKSAmJiBhZGRyIDwgbV9idWZmZXIuZ2V0
KCkgKyBtX29mZnNldCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFkZHIgLSBtX2J1ZmZl
ci5nZXQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgTWFsbG9jUHRyPHVpbnQ4X3Q+IG1fYnVmZmVyOworICAgICAgICBwdHJkaWZmX3QgbV9vZmZz
ZXQ7CisgICAgICAgIHNpemVfdCBtX2NhcGFjaXR5OworICAgIH07CisKKyAgICB2b2lkIGFsbG9j
YXRlTmV3UGFnZShzaXplX3Qgc2l6ZSA9IDApCisgICAgeworICAgICAgICBzdGF0aWMgc2l6ZV90
IG1pblBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpOworICAgICAgICBpZiAobV9jdXJyZW50UGFn
ZSkKKyAgICAgICAgICAgIG1fYmFzZU9mZnNldCArPSBtX2N1cnJlbnRQYWdlLT5zaXplKCk7Cisg
ICAgICAgIGlmIChzaXplIDwgbWluUGFnZVNpemUpCisgICAgICAgICAgICBzaXplID0gbWluUGFn
ZVNpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2YobWluUGFnZVNpemUsIHNpemUpOworICAgICAgICBtX3BhZ2VzLmFwcGVuZChQYWdl
IHsgc2l6ZSB9KTsKKyAgICAgICAgbV9jdXJyZW50UGFnZSA9ICZtX3BhZ2VzLmxhc3QoKTsKKyAg
ICB9CisKKyAgICBWTSYgbV92bTsKKyAgICBwdHJkaWZmX3QgbV9iYXNlT2Zmc2V0OworICAgIFBh
Z2UqIG1fY3VycmVudFBhZ2U7CisgICAgVmVjdG9yPFBhZ2U+IG1fcGFnZXM7CisgICAgSGFzaE1h
cDxjb25zdCB2b2lkKiwgcHRyZGlmZl90PiBtX3B0clRvT2Zmc2V0TWFwOworfTsKKworY2xhc3Mg
RGVjb2RlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rlcik7CisgICAgV1RGX0ZP
UkJJRF9IRUFQX0FMTE9DQVRJT047CisKK3B1YmxpYzoKKyAgICBEZWNvZGVyKFZNJiB2bSwgY29u
c3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQorICAgICAgICA6IG1fdm0odm0pCisg
ICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
YXNlQWRkcmVzcykpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAsIG1fc2l6ZShzaXplKQorI2Vu
ZGlmCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgfQorCisgICAgfkRl
Y29kZXIoKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9maW5hbGl6ZXJzKQor
ICAgICAgICAgICAgcGFpci52YWx1ZSgpOworICAgIH0KKworICAgIFZNJiB2bSgpIHsgcmV0dXJu
IG1fdm07IH0KKworICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBwdHIpCisgICAg
eworICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHB0cik7CisgICAgICAgIEFTU0VSVChhZGRyID49IG1fYmFzZUFkZHJlc3MgJiYgYWRkciA8
IG1fYmFzZUFkZHJlc3MgKyBtX3NpemUpOworICAgICAgICByZXR1cm4gYWRkciAtIG1fYmFzZUFk
ZHJlc3M7CisgICAgfQorCisgICAgdm9pZCBjYWNoZU9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0LCB2
b2lkKiBwdHIpCisgICAgeworICAgICAgICBtX29mZnNldFRvUHRyTWFwLmFkZChvZmZzZXQsIHB0
cik7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDx2b2lkKj4gcHRyRm9yT2Zmc2V0KHB0cmRp
ZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9vZmZzZXRUb1B0ck1hcC5m
aW5kKG9mZnNldCk7CisgICAgICAgIGlmIChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgaXQtPnZh
bHVlIH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGFkZEZpbmFsaXplcihwdHJkaWZmX3Qgb2Zmc2V0LCBjb25zdCBGdW5jdG9yJiBmbikKKyAgICB7
CisgICAgICAgIG1fZmluYWxpemVycy5hZGQob2Zmc2V0LCBmbik7CisgICAgfQorCitwcml2YXRl
OgorICAgIFZNJiBtX3ZtOworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7CisjaWZu
ZGVmIE5ERUJVRworICAgIHNpemVfdCBtX3NpemU7CisjZW5kaWYKKyAgICBIYXNoTWFwPHB0cmRp
ZmZfdCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7CisgICAgSGFzaE1hcDxwdHJkaWZmX3QsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJzOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBl
PFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYgZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+
JiBzcmMpCit7CisgICAgZHN0ID0gc3JjOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Rh
dGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFs
dWU+IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBUJiBkc3QsIGNvbnN0IFNvdXJjZVR5cGU8VD4m
IHNyYykKK3sKKyAgICBkc3QuZW5jb2RlKGVuY29kZXIsIHNyYyk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNvZGUoRGVjb2RlciYsIGNvbnN0
IFQmIHNyYywgU291cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uKQoreworICAgIGRzdCA9IHNyYzsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KK3N0YXRpYyBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjLCBTb3VyY2VUeXBlPFQ+JiBkc3QsIEFy
Z3MuLi4gYXJncykKK3sKKyAgICBzcmMuZGVjb2RlKGRlY29kZXIsIGRzdCwgYXJncy4uLik7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlLCBUPiBkZWNvZGUoRGVjb2RlciYsIFQgc3Jj
KQoreworICAgIHJldHVybiBzcmM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMg
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwg
U291cmNlVHlwZTxUPj4mJiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgY29uc3QgVCYgc3JjKQor
eworICAgIHJldHVybiBzcmMuZGVjb2RlKGRlY29kZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTb3VyY2U+CitjbGFzcyBDYWNoZWRPYmplY3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENhY2hlZE9iamVjdDxTb3VyY2U+KTsKKyAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsK
KworcHVibGljOgorICAgIHVzaW5nIFNvdXJjZVR5cGVfID0gU291cmNlOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgU291cmNlPgorY2xhc3MgVmFyaWFibGVMZW5ndGhPYmplY3QgOiBwdWJsaWMg
Q2FjaGVkT2JqZWN0PFNvdXJjZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4K
KyAgICBmcmllbmQgc3RydWN0IENhY2hlZFB0cjsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IHVp
bnQ4X3QqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0g
c19pbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHRoaXMpICsgbV9vZmZzZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KGJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICB1aW50
OF90KiBhbGxvY2F0ZShFbmNvZGVyJiBlbmNvZGVyLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAg
ICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHB0
cmRpZmZfdCBvZmZzZXRPZmZzZXQgPSBlbmNvZGVyLm9mZnNldE9mKCZtX29mZnNldCk7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gZW5jb2Rlci5tYWxsb2Moc2l6ZSk7CisgICAgICAgIG1fb2Zmc2V0
ID0gcmVzdWx0Lm9mZnNldCgpIC0gb2Zmc2V0T2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0
LmJ1ZmZlcigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYWxs
b2NhdGUoRW5jb2RlciYgZW5jb2RlciwgdW5zaWduZWQgc2l6ZSA9IDEpCisgICAgeworICAgICAg
ICB1aW50OF90KiByZXN1bHQgPSBhbGxvY2F0ZShlbmNvZGVyLCBzaXplb2YoVCkgKiBzaXplKTsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8cHRyZGlmZl90Pjo6bWF4KCk7CisKKyAgICBwdHJkaWZmX3Qg
bV9vZmZzZXQgeyBzX2ludmFsaWRPZmZzZXQgfTsKKworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KK2NsYXNzIENhY2hlZFB0ciA6IHB1
YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqPiB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIHR5cGVuYW1lPgorICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkUmVmUHRyOworCitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCisg
ICAgeworICAgICAgICBtX2lzRW1wdHkgPSAhc3JjOworICAgICAgICBpZiAobV9pc0VtcHR5KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChXVEY6Ok9wdGlvbmFsPHB0cmRpZmZf
dD4gb2Zmc2V0ID0gZW5jb2Rlci5vZmZzZXRGb3JQdHIoc3JjKSkgeworICAgICAgICAgICAgdGhp
cy0+bV9vZmZzZXQgPSAqb2Zmc2V0IC0gZW5jb2Rlci5vZmZzZXRPZigmdGhpcy0+bV9vZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVCogY2FjaGVkT2Jq
ZWN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlcik7CisgICAgICAgIGNhY2hl
ZE9iamVjdC0+ZW5jb2RlKGVuY29kZXIsICpzcmMpOworICAgICAgICBlbmNvZGVyLmNhY2hlUHRy
KHNyYywgZW5jb2Rlci5vZmZzZXRPZihjYWNoZWRPYmplY3QpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFNvdXJjZSogZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzRW1wdHkpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwdHJkaWZmX3QgYnVmZmVyT2Zm
c2V0ID0gZGVjb2Rlci5vZmZzZXRPZih0aGlzLT5idWZmZXIoKSk7CisgICAgICAgIGlmIChXVEY6
Ok9wdGlvbmFsPHZvaWQqPiBwdHIgPSBkZWNvZGVyLnB0ckZvck9mZnNldChidWZmZXJPZmZzZXQp
KQorICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U291cmNlKj4oKnB0cik7CisK
KyAgICAgICAgU291cmNlKiBwdHIgPSBnZXQoKS0+ZGVjb2RlKGRlY29kZXIsIGFyZ3MuLi4pOwor
ICAgICAgICBkZWNvZGVyLmNhY2hlT2Zmc2V0KGJ1ZmZlck9mZnNldCwgcHRyKTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBjb25zdCBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUKiBnZXQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1faXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgfQorCisgICAg
Ym9vbCBtX2lzRW1wdHk7CisKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNv
dXJjZSA9IFNvdXJjZVR5cGU8VD4+CitjbGFzcyBDYWNoZWRSZWZQdHIgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PFJlZlB0cjxTb3VyY2U+PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCisgICAgeworICAgICAgICBtX3B0ci5lbmNv
ZGUoZW5jb2Rlciwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZWZQdHI8U291cmNlPiBzcmMpCisgICAgeworICAgICAgICBlbmNvZGUoZW5j
b2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8U291cmNlPiBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZSogZGVjb2RlZFB0ciA9
IG1fcHRyLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkUHRyKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGRlY29kZXIuYWRkRmluYWxpemVyKGRlY29k
ZXIub2Zmc2V0T2YobV9wdHIuYnVmZmVyKCkpLCBbPV0geyBkZXJlZklmTm90TnVsbChkZWNvZGVk
UHRyKTsgfSk7CisgICAgICAgIHJlZklmTm90TnVsbChkZWNvZGVkUHRyKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKGRlY29kZWRQdHIpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFJlZlB0cjxTb3VyY2U+JiBzcmMpIGNvbnN0CisgICAgeworICAgICAgICBz
cmMgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFB0cjxU
LCBTb3VyY2U+IG1fcHRyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291
cmNlID0gU291cmNlVHlwZTxUPj4KK2NsYXNzIENhY2hlZFdyaXRlQmFycmllciA6IHB1YmxpYyBD
YWNoZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNvdXJjZT4+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8U291cmNlPiBzcmMpCisg
ICAgeworICAgICAgICBtX3B0ci5lbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXcml0ZUJhcnJpZXI8U291cmNlPiYg
c3JjLCBjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAorICAgIHsKKyAgICAgICAgU291cmNlKiBk
ZWNvZGVkUHRyID0gbV9wdHIuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoZGVjb2RlZFB0
cikKKyAgICAgICAgICAgIHNyYy5zZXQoZGVjb2Rlci52bSgpLCBvd25lciwgZGVjb2RlZFB0cik7
CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFB0cjxULCBTb3VyY2U+IG1fcHRyOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IElubGluZUNhcGFjaXR5ID0gMCwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PgorY2xhc3MgQ2FjaGVkVmVjdG9y
IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPj4geworcHVibGljOgorICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9zaXplID0g
dmVjdG9yLnNpemUoKTsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2Nh
dGU8VD4oZW5jb2RlciwgbV9zaXplKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBidWZmZXJb
aV0sIHZlY3RvcltpXSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8U291cmNlVHlwZTxUPiwg
SW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIHZlY3RvciwgQXJncy4uLiBhcmdzKSBj
b25zdAorICAgIHsKKyAgICAgICAgdmVjdG9yLnJlc2l6ZVRvRml0KG1fc2l6ZSk7CisgICAgICAg
IGNvbnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6
ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ldLCBhcmdzLi4uKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zaXplOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Rmlyc3QsIHR5cGVuYW1lIFNlY29uZD4KK2NsYXNzIENhY2hlZFBhaXIgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PHN0ZDo6cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+Pj4g
eworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6
cGFpcjxTb3VyY2VUeXBlPEZpcnN0PiwgU291cmNlVHlwZTxTZWNvbmQ+PiYgcGFpcikKKyAgICB7
CisgICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9maXJzdCwgcGFpci5maXJzdCk7Cisg
ICAgICAgIDo6SlNDOjplbmNvZGUoZW5jb2RlciwgbV9zZWNvbmQsIHBhaXIuc2Vjb25kKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8U291cmNl
VHlwZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vjb25kPj4mIHBhaXIpIGNvbnN0CisgICAgeworICAg
ICAgICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fZmlyc3QsIHBhaXIuZmlyc3QpOworICAgICAg
ICA6OkpTQzo6ZGVjb2RlKGRlY29kZXIsIG1fc2Vjb25kLCBwYWlyLnNlY29uZCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEZpcnN0IG1fZmlyc3Q7CisgICAgU2Vjb25kIG1fc2Vjb25kOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEFy
ZyA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFNvdXJjZVR5cGU8S2V5Pj46Okhhc2gsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlwZTxLZXk+PiwgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxTb3VyY2VUeXBlPFZhbHVlPj4+CitjbGFzcyBDYWNo
ZWRIYXNoTWFwIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEhhc2hNYXA8U291cmNlVHlw
ZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPiwgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KKyAgICB1
c2luZyBNYXAgPSBIYXNoTWFwPEssIFYsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IE1hcDxTb3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKQorICAgIHsK
KyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBlbnRyaWVzVmVjdG9yKG1h
cC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBpdCA6IG1hcCkKKyAgICAgICAgICAgIGVudHJpZXNWZWN0b3JbaSsrXSA9IHsgaXQua2V5
LCBpdC52YWx1ZSB9OworICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNW
ZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hcDxT
b3VyY2VUeXBlPEtleT4sIFNvdXJjZVR5cGU8VmFsdWU+PiYgbWFwKSBjb25zdAorICAgIHsKKyAg
ICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2VudHJpZXMpPiBkZWNvZGVkRW50cmllczsKKyAg
ICAgICAgbV9lbnRyaWVzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkRW50cmllcyk7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgcGFpciA6IGRlY29kZWRFbnRyaWVzKQorICAgICAgICAgICAgbWFw
LnNldChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENh
Y2hlZFZlY3RvcjxDYWNoZWRQYWlyPEtleSwgVmFsdWU+PiBtX2VudHJpZXM7Cit9OworCitjbGFz
cyBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxV
bmlxdWVkU3RyaW5nSW1wbD4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKKyAgICB7CisgICAgICAgIG1faXNBdG9t
aWMgPSBzdHJpbmcuaXNBdG9taWMoKTsKKyAgICAgICAgbV9pc1N5bWJvbCA9IHN0cmluZy5pc1N5
bWJvbCgpOworICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gY29uc3RfY2FzdDxTdHJpbmdJbXBs
Kj4oJnN0cmluZyk7CisgICAgICAgIGlmIChtX2lzU3ltYm9sKSB7CisgICAgICAgICAgICBTeW1i
b2xJbXBsKiBzeW1ib2wgPSBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsKj4oaW1wbCk7CisgICAgICAg
ICAgICBpZiAoIXN5bWJvbC0+aXNOdWxsU3ltYm9sKCkpIHsKKyAgICAgICAgICAgICAgICBJZGVu
dGlmaWVyIHVpZCA9IElkZW50aWZpZXI6OmZyb21VaWQoJmVuY29kZXIudm0oKSwgc3ltYm9sKTsK
KyAgICAgICAgICAgICAgICBpbXBsID0gZW5jb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tV
cFB1YmxpY05hbWUodWlkKS5zdHJpbmcoKS5pbXBsKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBtX2lzOEJpdCA9IGltcGwtPmlzOEJpdCgpOworICAgICAgICBtX2xlbmd0
aCA9IGltcGwtPmxlbmd0aCgpOworCisgICAgICAgIGlmICghbV9sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fbGVuZ3RoOworICAgICAgICBj
b25zdCB2b2lkKiBwYXlsb2FkOworICAgICAgICBpZiAobV9pczhCaXQpCisgICAgICAgICAgICBw
YXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBwYXlsb2FkID0gaW1wbC0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBzaXplICo9IDI7
CisgICAgICAgIH0KKworICAgICAgICB1aW50OF90KiBidWZmZXIgPSB0aGlzLT5hbGxvY2F0ZShl
bmNvZGVyLCBzaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgcGF5bG9hZCwgc2l6ZSk7Cisg
ICAgfQorCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgYXV0byBjcmVhdGUgPSBbJl0oY29uc3QgYXV0byogYnVmZmVy
KSAtPiBVbmlxdWVkU3RyaW5nSW1wbCogeworICAgICAgICAgICAgaWYgKCFtX2lzU3ltYm9sKQor
ICAgICAgICAgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmdJbXBsOjphZGQoYnVmZmVyLCBtX2xl
bmd0aCkubGVha1JlZigpOworCisgICAgICAgICAgICBpZiAoIW1fbGVuZ3RoKQorICAgICAgICAg
ICAgICAgIHJldHVybiAmU3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5bWJvbCgpLmxlYWtSZWYoKTsK
KworICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
JmRlY29kZXIudm0oKSwgYnVmZmVyLCBtX2xlbmd0aCk7CisgICAgICAgICAgICBTdHJpbmcgc3Ry
ID0gZGVjb2Rlci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKGlkZW50KS0+
c3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gc3RyLnJlbGVhc2VJbXBs
KCkuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoaW1wbC0+aXNTeW1ib2woKSk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihpbXBsKTsKKyAgICAg
ICAgfTsKKworICAgICAgICBpZiAobV9pczhCaXQpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
KHRoaXMtPmJ1ZmZlcjxMQ2hhcj4oKSk7CisgICAgICAgIHJldHVybiBjcmVhdGUodGhpcy0+YnVm
ZmVyPFVDaGFyPigpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzOEJpdCA6IDE7
CisgICAgYm9vbCBtX2lzU3ltYm9sIDogMTsKKyAgICBib29sIG1faXNBdG9taWMgOiAxOworICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworY2xhc3MgQ2FjaGVkU3RyaW5nSW1wbCA6IHB1Ymxp
YyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTdHJpbmdJbXBsPiB7CitwdWJsaWM6CisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nSW1wbCYgaW1wbCkKKyAgICB7Cisg
ICAgICAgIG1fdW5pcXVlZFN0cmluZ0ltcGwuZW5jb2RlKGVuY29kZXIsIGltcGwpOworICAgIH0K
KworICAgIFN0cmluZ0ltcGwqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdW5pcXVlZFN0cmluZ0ltcGwuZGVjb2RlKGRlY29kZXIpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbCBtX3VuaXF1ZWRTdHJp
bmdJbXBsOworfTsKKworY2xhc3MgQ2FjaGVkU3RyaW5nIDogcHVibGljIFZhcmlhYmxlTGVuZ3Ro
T2JqZWN0PFN0cmluZz4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgbV9pbXBsLmVuY29kZShl
bmNvZGVyLCBzdGF0aWNfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy5pbXBsKCkpKTsK
KyAgICB9CisKKyAgICBTdHJpbmcgZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXRpY19jYXN0PFJlZlB0cjxTdHJpbmdJbXBsPj4o
bV9pbXBsLmRlY29kZShkZWNvZGVyKSkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFN0cmluZyYgZHN0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHN0ID0gZGVj
b2RlKGRlY29kZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRSZWZQdHI8Q2FjaGVk
VW5pcXVlZFN0cmluZ0ltcGw+IG1faW1wbDsKK307CisKK2NsYXNzIENhY2hlZElkZW50aWZpZXIg
OiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SWRlbnRpZmllcj4geworcHVibGljOgorICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIpCisgICAgeworICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5jb2RlciwgaWRlbnRpZmllci5z
dHJpbmcoKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHIgPSBtX3N0cmluZy5kZWNvZGUoZGVj
b2Rlcik7CisgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gSWRl
bnRpZmllcigpOworCisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVy
LnZtKCksIChVbmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7CisgICAgfQorCisgICAgdm9p
ZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CisgICAg
eworICAgICAgICBpZGVudCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQ2FjaGVkU3RyaW5nIG1fc3RyaW5nOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIENhY2hlZE9wdGlvbmFsIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFdURjo6T3B0
aW9uYWw8U291cmNlVHlwZTxUPj4+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCisg
ICAgeworICAgICAgICBtX2lzRW1wdHkgPSAhc291cmNlOworCisgICAgICAgIGlmIChtX2lzRW1w
dHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy0+dGVtcGxhdGUgYWxsb2Nh
dGU8VD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqc291cmNlKTsKKyAgICB9CisKKyAgICBX
VEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1faXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICAgICAgcmV0dXJuIHsgdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCkt
PmRlY29kZShkZWNvZGVyKSB9OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFdURjo6T3B0aW9uYWw8U291cmNlVHlwZTxUPj4mIGRzdCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGRzdCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlVHlwZTxUPj4mIHNv
dXJjZSkKKyAgICB7CisgICAgICAgIGlmICghc291cmNlKQorICAgICAgICAgICAgZW5jb2RlKGVu
Y29kZXIsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY29kZShl
bmNvZGVyLCB7ICpzb3VyY2UgfSk7CisgICAgfQorCisgICAgU291cmNlVHlwZTxUPiogZGVjb2Rl
QXNQdHIoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzRW1w
dHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gdGhpcy0+
dGVtcGxhdGUgYnVmZmVyPFQ+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgYm9vbCBtX2lzRW1wdHk7Cit9OworCitjbGFzcyBDYWNoZWRTaW1wbGVKdW1wVGFibGUg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiB7CitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIGp1bXBUYWJsZSkKKyAgICB7CisgICAgICAgIG1fbWluID0ganVtcFRhYmxlLm1p
bjsKKyAgICAgICAgbV9icmFuY2hPZmZzZXRzLmVuY29kZShlbmNvZGVyLCBqdW1wVGFibGUuYnJh
bmNoT2Zmc2V0cyk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSkgY29uc3QKKyAgICB7CisgICAgICAg
IGp1bXBUYWJsZS5taW4gPSBtX21pbjsKKyAgICAgICAgbV9icmFuY2hPZmZzZXRzLmRlY29kZShk
ZWNvZGVyLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cyk7CisgICAgfQorCitwcml2YXRlOgorICAg
IGludDMyX3QgbV9taW47CisgICAgQ2FjaGVkVmVjdG9yPGludDMyX3Q+IG1fYnJhbmNoT2Zmc2V0
czsKK307CisKK2NsYXNzIENhY2hlZFN0cmluZ0p1bXBUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxl
KQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRUYWJsZS5lbmNvZGUoZW5jb2RlciwganVtcFRhYmxl
Lm9mZnNldFRhYmxlKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgbV9vZmZzZXRUYWJsZS5kZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLm9mZnNldFRhYmxlKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVk
U3RyaW5nSW1wbD4sIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjogT2Zmc2V0TG9jYXRpb24+IG1f
b2Zmc2V0VGFibGU7Cit9OworCitjbGFzcyBDYWNoZWRDb2RlQmxvY2tSYXJlRGF0YSA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhPiB7CitwdWJsaWM6Cisg
ICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2s6
OlJhcmVEYXRhJiByYXJlRGF0YSkKKyAgICB7CisgICAgICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMu
ZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fZXhjZXB0aW9uSGFuZGxlcnMpOworICAgICAgICBt
X3N3aXRjaEp1bXBUYWJsZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3dpdGNoSnVtcFRh
Ymxlcyk7CisgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5lbmNvZGUoZW5jb2Rlciwg
cmFyZURhdGEubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgbV9leHByZXNzaW9u
SW5mb0ZhdFBvc2l0aW9ucy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9leHByZXNzaW9uSW5m
b0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5lbmNvZGUoZW5j
b2RlciwgcmFyZURhdGEubV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICAgICAgbV9vcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5lbmNvZGUoZW5jb2RlciwgcmFyZURhdGEubV9v
cFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7CisgICAgfQorCisgICAgVW5saW5r
ZWRDb2RlQmxvY2s6OlJhcmVEYXRhKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogcmFyZURhdGEgPSBuZXcg
VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhIHsgfTsKKyAgICAgICAgbV9leGNlcHRpb25IYW5k
bGVycy5kZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMpOworICAg
ICAgICBtX3N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMpOworICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZGVjb2RlKGRl
Y29kZXIsIHJhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBtX2V4
cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9leHBy
ZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucyk7CisgICAgICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5k
ZWNvZGUoZGVjb2RlciwgcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAg
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZGVjb2RlKGRlY29kZXIsIHJh
cmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTsKKyAgICAgICAg
cmV0dXJuIHJhcmVEYXRhOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKKyAgICBDYWNoZWRWZWN0b3I8
Q2FjaGVkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgQ2FjaGVkVmVj
dG9yPENhY2hlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAg
IENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNz
aW9uSW5mb0ZhdFBvc2l0aW9uczsKKyAgICBDYWNoZWRIYXNoTWFwPHVuc2lnbmVkLCBVbmxpbmtl
ZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gbV90eXBl
UHJvZmlsZXJJbmZvTWFwOworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOworfTsKKworY2xhc3Mg
Q2FjaGVkQml0VmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEJpdFZlY3Rvcj4g
eworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEJpdFZl
Y3RvciYgYml0VmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9zaXplID0gYml0VmVjdG9yLnNpemUo
KTsKKyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2RlciwgbV9z
aXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgYml0VmVjdG9yLmJpdHMoKSwgbV9zaXplKTsK
KyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgQml0VmVjdG9yJiBiaXRWZWN0b3Ip
IGNvbnN0CisgICAgeworICAgICAgICBiaXRWZWN0b3IuZW5zdXJlU2l6ZShtX3NpemUpOworICAg
ICAgICBtZW1jcHkoYml0VmVjdG9yLmJpdHMoKSwgdGhpcy0+YnVmZmVyKCksIG1fc2l6ZSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc2l6ZTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxUPjo6SGFz
aD4KK2NsYXNzIENhY2hlZEhhc2hTZXQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PEhhc2hTZXQ8U291
cmNlVHlwZTxUPiwgSGFzaEFyZz4+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+JiBzZXQpCisg
ICAgeworICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKG1fZW50cmllcyk+IGVudHJpZXNWZWN0
b3Ioc2V0LnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGl0ZW0gOiBzZXQpCisgICAgICAgICAgICBlbnRyaWVzVmVjdG9yW2krK10gPSBp
dGVtOworICAgICAgICBtX2VudHJpZXMuZW5jb2RlKGVuY29kZXIsIGVudHJpZXNWZWN0b3IpOwor
ICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hTZXQ8U291cmNl
VHlwZTxUPiwgSGFzaEFyZz4mIHNldCkgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGU8
ZGVjbHR5cGUobV9lbnRyaWVzKT4gZW50cmllc1ZlY3RvcjsKKyAgICAgICAgbV9lbnRyaWVzLmRl
Y29kZShkZWNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBp
dGVtIDogZW50cmllc1ZlY3RvcikKKyAgICAgICAgICAgIHNldC5hZGQoaXRlbSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIENhY2hlZFZlY3RvcjxUPiBtX2VudHJpZXM7Cit9OworCitjbGFzcyBD
YWNoZWRDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9i
amVjdDxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4geworcHVibGljOgorICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBl
bnRyeSkKKyAgICB7CisgICAgICAgIG1fY29uc3RhbnQgPSBlbnRyeS5zZWNvbmQ7CisgICAgICAg
IG1fc2V0LmVuY29kZShlbmNvZGVyLCBlbnRyeS5maXJzdCk7CisgICAgfQorCisgICAgdm9pZCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5
KSBjb25zdAorICAgIHsKKyAgICAgICAgZW50cnkuc2Vjb25kID0gbV9jb25zdGFudDsKKyAgICAg
ICAgbV9zZXQuZGVjb2RlKGRlY29kZXIsIGVudHJ5LmZpcnN0KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdW5zaWduZWQgbV9jb25zdGFudDsKKyAgICBDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0
cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPiBtX3NldDsKK307
CisKK2NsYXNzIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0
PFZhcmlhYmxlRW52aXJvbm1lbnQ+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCisgICAgeworICAgICAg
ICBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7Cisg
ICAgICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBlbnYubV9tYXApOworICAgIH0KKworICAgIHZv
aWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudikgY29u
c3QKKyAgICB7CisgICAgICAgIGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gbV9pc0V2ZXJ5
dGhpbmdDYXB0dXJlZDsKKyAgICAgICAgbV9tYXAuZGVjb2RlKGRlY29kZXIsIGVudi5tX21hcCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKKyAg
ICBDYWNoZWRIYXNoTWFwPENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIFZh
cmlhYmxlRW52aXJvbm1lbnRFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVm
UHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeUhhc2hUcmFp
dHM+IG1fbWFwOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU291cmNlID0g
U291cmNlVHlwZTxUPj4KK2NsYXNzIENhY2hlZEFycmF5IDogcHVibGljIFZhcmlhYmxlTGVuZ3Ro
T2JqZWN0PFNvdXJjZSo+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTb3VyY2UqIGFycmF5LCB1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAg
VCogZHN0ID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rlciwgc2l6ZSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6OkpT
Qzo6ZW5jb2RlKGVuY29kZXIsIGRzdFtpXSwgYXJyYXlbaV0pOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
U291cmNlKiBhcnJheSwgdW5zaWduZWQgc2l6ZSwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsK
KyAgICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICA6
OkpTQzo6ZGVjb2RlKGRlY29kZXIsIGJ1ZmZlcltpXSwgYXJyYXlbaV0sIGFyZ3MuLi4pOworICAg
IH0KK307CisKK2NsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlIDogcHVibGljIENhY2hl
ZE9iamVjdDxTY29wZWRBcmd1bWVudHNUYWJsZT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNjb3BlZEFyZ3VtZW50c1RhYmxlJiBzY29wZWRBcmd1
bWVudHNUYWJsZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gc2NvcGVkQXJndW1lbnRzVGFi
bGUubV9sZW5ndGg7CisgICAgICAgIG1fYXJndW1lbnRzLmVuY29kZShlbmNvZGVyLCBzY29wZWRB
cmd1bWVudHNUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSwgbV9sZW5ndGgpOworICAgIH0KKworICAg
IFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzY29wZWRBcmd1bWVudHNUYWJsZSA9
IFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7Cisg
ICAgICAgIG1fYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS0+
bV9hcmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAg
ICBDYWNoZWRBcnJheTxTY29wZU9mZnNldD4gbV9hcmd1bWVudHM7Cit9OworCitjbGFzcyBDYWNo
ZWRTeW1ib2xUYWJsZUVudHJ5IDogcHVibGljIENhY2hlZE9iamVjdDxTeW1ib2xUYWJsZUVudHJ5
PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN5bWJvbFRhYmxl
RW50cnkmIHN5bWJvbFRhYmxlRW50cnkpCisgICAgeworICAgICAgICBtX2JpdHMgPSBzeW1ib2xU
YWJsZUVudHJ5Lm1fYml0cyB8IFN5bWJvbFRhYmxlRW50cnk6OlNsaW1GbGFnOworICAgIH0KKwor
ICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBTeW1ib2xUYWJsZUVudHJ5JiBzeW1ib2xUYWJsZUVu
dHJ5KSBjb25zdAorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMgPSBtX2Jp
dHM7CisgICAgfQorCitwcml2YXRlOgorICAgIGludHB0cl90IG1fYml0czsKK307CisKK2NsYXNz
IENhY2hlZFN5bWJvbFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxTeW1ib2xUYWJsZT4gewor
cHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghc3ltYm9sVGFibGUubV9y
YXJlRGF0YSk7CisgICAgICAgIG1fbWFwLmVuY29kZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX21h
cCk7CisgICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSBzeW1ib2xUYWJsZS5tX21heFNjb3BlT2Zm
c2V0OworICAgICAgICBtX3VzZXNOb25TdHJpY3RFdmFsID0gc3ltYm9sVGFibGUubV91c2VzTm9u
U3RyaWN0RXZhbDsKKyAgICAgICAgbV9uZXN0ZWRMZXhpY2FsU2NvcGUgPSBzeW1ib2xUYWJsZS5t
X25lc3RlZExleGljYWxTY29wZTsKKyAgICAgICAgbV9zY29wZVR5cGUgPSBzeW1ib2xUYWJsZS5t
X3Njb3BlVHlwZTsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHN5bWJvbFRh
YmxlLm1fYXJndW1lbnRzLmdldCgpKTsKKyAgICB9CisKKyAgICBTeW1ib2xUYWJsZSogZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKGRlY29kZXIudm0oKSk7CisgICAgICAgIG1f
bWFwLmRlY29kZShkZWNvZGVyLCBzeW1ib2xUYWJsZS0+bV9tYXApOworICAgICAgICBzeW1ib2xU
YWJsZS0+bV9tYXhTY29wZU9mZnNldCA9IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgICAgIHN5bWJv
bFRhYmxlLT5tX3VzZXNOb25TdHJpY3RFdmFsID0gbV91c2VzTm9uU3RyaWN0RXZhbDsKKyAgICAg
ICAgc3ltYm9sVGFibGUtPm1fbmVzdGVkTGV4aWNhbFNjb3BlID0gbV9uZXN0ZWRMZXhpY2FsU2Nv
cGU7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX3Njb3BlVHlwZSA9IG1fc2NvcGVUeXBlOworICAg
ICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2NvcGVkQXJndW1lbnRzVGFibGUgPSBtX2FyZ3Vt
ZW50cy5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmIChzY29wZWRBcmd1bWVudHNUYWJsZSkK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cy5zZXQoZGVjb2Rlci52bSgpLCBz
eW1ib2xUYWJsZSwgc2NvcGVkQXJndW1lbnRzVGFibGUpOworICAgICAgICByZXR1cm4gc3ltYm9s
VGFibGU7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkUmVmUHRy
PENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSwgSWRlbnRp
ZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4sIFN5bWJv
bFRhYmxlSW5kZXhIYXNoVHJhaXRzPiBtX21hcDsKKyAgICBTY29wZU9mZnNldCBtX21heFNjb3Bl
T2Zmc2V0OworICAgIHVuc2lnbmVkIG1fdXNlc05vblN0cmljdEV2YWwgOiAxOworICAgIHVuc2ln
bmVkIG1fbmVzdGVkTGV4aWNhbFNjb3BlIDogMTsKKyAgICB1bnNpZ25lZCBtX3Njb3BlVHlwZSA6
IDM7CisgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gY2FjaGVkIHRoaXMgZXZlbnR1YWxseT8K
KyAgICAvLyBDYWNoZWRQdHI8U3ltYm9sVGFibGVSYXJlRGF0YT4gcmFyZURhdGE7CisgICAgQ2Fj
aGVkUHRyPENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKK307CisKK2Ns
YXNzIENhY2hlZEpTVmFsdWU7CitjbGFzcyBDYWNoZWRJbW11dGFibGVCdXR0ZXJmbHkgOiBwdWJs
aWMgQ2FjaGVkT2JqZWN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5PiB7CitwdWJsaWM6CisgICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgSlNJbW11dGFibGVCdXR0ZXJmbHkmIGltbXV0YWJs
ZUJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gaW1tdXRhYmxlQnV0dGVyZmx5
Lmxlbmd0aCgpOworICAgICAgICBtX2luZGV4aW5nVHlwZSA9IGltbXV0YWJsZUJ1dHRlcmZseS5p
bmRleGluZ1R5cGVBbmRNaXNjKCk7CisgICAgICAgIGlmIChoYXNEb3VibGUobV9pbmRleGluZ1R5
cGUpKQorICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmVuY29kZShlbmNvZGVyLCBpbW11dGFi
bGVCdXR0ZXJmbHkudG9CdXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9s
ZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5lbmNvZGUo
ZW5jb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5k
YXRhKCksIG1fbGVuZ3RoKTsKKyAgICB9CisKKyAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogZGVj
b2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBKU0ltbXV0YWJsZUJ1
dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0
ZShkZWNvZGVyLnZtKCksIG1faW5kZXhpbmdUeXBlLCBtX2xlbmd0aCk7CisgICAgICAgIGlmICho
YXNEb3VibGUobV9pbmRleGluZ1R5cGUpKQorICAgICAgICAgICAgbV9jYWNoZWREb3VibGVzLmRl
Y29kZShkZWNvZGVyLCBpbW11dGFibGVCdXR0ZXJmbHktPnRvQnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKS5kYXRhKCksIG1fbGVuZ3RoLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2NhY2hlZFZhbHVlcy5kZWNvZGUoZGVjb2RlciwgaW1tdXRh
YmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2xlbmd0
aCwgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuIGltbXV0YWJsZUJ1dHRlcmZs
eTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwor
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIHVuaW9uIHsKKyAgICAgICAgQ2FjaGVkQXJyYXk8
ZG91YmxlPiBtX2NhY2hlZERvdWJsZXM7CisgICAgICAgIENhY2hlZEFycmF5PENhY2hlZEpTVmFs
dWUsIFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jYWNoZWRWYWx1ZXM7CisgICAgfTsKK307CisK
K2NsYXNzIENhY2hlZFJlZ0V4cCA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8UmVnRXhwPiB7CitwdWJs
aWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVnRXhwJiByZWdF
eHApCisgICAgeworICAgICAgICBtX3BhdHRlcm5TdHJpbmcuZW5jb2RlKGVuY29kZXIsIHJlZ0V4
cC5tX3BhdHRlcm5TdHJpbmcpOworICAgICAgICBtX2ZsYWdzID0gcmVnRXhwLm1fZmxhZ3M7Cisg
ICAgfQorCisgICAgUmVnRXhwKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7
CisgICAgICAgIFN0cmluZyBwYXR0ZXJuIHsgbV9wYXR0ZXJuU3RyaW5nLmRlY29kZShkZWNvZGVy
KSB9OworICAgICAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZGVjb2Rlci52bSgpLCBwYXR0ZXJu
LCBtX2ZsYWdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkU3RyaW5nIG1fcGF0dGVy
blN0cmluZzsKKyAgICBSZWdFeHBGbGFncyBtX2ZsYWdzOworfTsKKworY2xhc3MgQ2FjaGVkVGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yIDogcHVibGljIENhY2hlZE9iamVjdDxUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3I+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3ImIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
cikKKyAgICB7CisgICAgICAgIG1fcmF3U3RyaW5ncy5lbmNvZGUoZW5jb2RlciwgdGVtcGxhdGVP
YmplY3REZXNjcmlwdG9yLnJhd1N0cmluZ3MoKSk7CisgICAgICAgIG1fY29va2VkU3RyaW5ncy5l
bmNvZGUoZW5jb2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNvb2tlZFN0cmluZ3MoKSk7
CisgICAgfQorCisgICAgUmVmPFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3I6OlN0cmluZ1ZlY3RvciBkZWNvZGVkUmF3U3RyaW5nczsKKyAgICAgICAgVGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yOjpPcHRpb25hbFN0cmluZ1ZlY3RvciBkZWNvZGVkQ29va2VkU3RyaW5nczsK
KyAgICAgICAgbV9yYXdTdHJpbmdzLmRlY29kZShkZWNvZGVyLCBkZWNvZGVkUmF3U3RyaW5ncyk7
CisgICAgICAgIG1fY29va2VkU3RyaW5ncy5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZENvb2tlZFN0
cmluZ3MpOworICAgICAgICByZXR1cm4gVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUo
V1RGTW92ZShkZWNvZGVkUmF3U3RyaW5ncyksIFdURk1vdmUoZGVjb2RlZENvb2tlZFN0cmluZ3Mp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFN0cmluZywgND4g
bV9yYXdTdHJpbmdzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRPcHRpb25hbDxDYWNoZWRTdHJp
bmc+LCA0PiBtX2Nvb2tlZFN0cmluZ3M7Cit9OworCitjbGFzcyBDYWNoZWRCaWdJbnQgOiBwdWJs
aWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQ+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBKU0JpZ0ludCYgYmlnSW50KQorICAgIHsKKyAgICAgICAg
bV9sZW5ndGggPSBiaWdJbnQubGVuZ3RoKCk7CisgICAgICAgIG1fc2lnbiA9IGJpZ0ludC5zaWdu
KCk7CisKKyAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aDsK
KyAgICAgICAgdWludDhfdCogYnVmZmVyID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7
CisgICAgICAgIG1lbWNweShidWZmZXIsIGJpZ0ludC5kYXRhU3RvcmFnZSgpLCBzaXplKTsKKyAg
ICB9CisKKyAgICBKU0JpZ0ludCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhV
bmNoZWNrZWQoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7CisgICAgICAgIGJpZ0ludC0+c2V0U2ln
bihtX3NpZ24pOworICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5i
dWZmZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7CisgICAgICAgIHJl
dHVybiBiaWdJbnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwor
ICAgIGJvb2wgbV9zaWduOworfTsKKworY2xhc3MgQ2FjaGVkSlNWYWx1ZSA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
dmFsdWUpCisgICAgeworICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZS5nZXQoKTsKKworICAgICAg
ICBpZiAoIXYuaXNDZWxsKCkgfHwgdi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fdHlwZSA9
IEVuY29kZWRUeXBlOjpKU1ZhbHVlOworICAgICAgICAgICAgKnRoaXMtPmFsbG9jYXRlPEVuY29k
ZWRKU1ZhbHVlPihlbmNvZGVyKSA9IEpTVmFsdWU6OmVuY29kZSh2KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHYuYXNDZWxsKCk7Cisg
ICAgICAgIFZNJiB2bSA9IGVuY29kZXIudm0oKTsKKworICAgICAgICBpZiAoYXV0byogc3ltYm9s
VGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4odm0sIGNlbGwpKSB7CisgICAgICAg
ICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6U3ltYm9sVGFibGU7CisgICAgICAgICAgICB0aGlz
LT5hbGxvY2F0ZTxDYWNoZWRTeW1ib2xUYWJsZT4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAq
c3ltYm9sVGFibGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGF1dG8qIHN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2bSwgY2VsbCkpIHsK
KyAgICAgICAgICAgIG1fdHlwZSA9IEVuY29kZWRUeXBlOjpTdHJpbmc7CisgICAgICAgICAgICBT
dHJpbmdJbXBsKiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZSgpLmltcGwoKTsKKyAgICAgICAg
ICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPihlbmNvZGVyKS0+ZW5j
b2RlKGVuY29kZXIsICppbXBsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhdXRvKiBpbW11dGFibGVCdXR0ZXJmbHkgPSBqc0R5bmFtaWNDYXN0PEpTSW1t
dXRhYmxlQnV0dGVyZmx5Kj4odm0sIGNlbGwpKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNv
ZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8
Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICppbW11
dGFibGVCdXR0ZXJmbHkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGF1dG8qIHJlZ2V4cCA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwKj4odm0sIGNlbGwpKSB7
CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6UmVnRXhwOworICAgICAgICAgICAg
dGhpcy0+YWxsb2NhdGU8Q2FjaGVkUmVnRXhwPihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpy
ZWdleHApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1
dG8qIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA9IGpzRHluYW1pY0Nhc3Q8SlNUZW1wbGF0ZU9i
amVjdERlc2NyaXB0b3IqPih2bSwgY2VsbCkpIHsKKyAgICAgICAgICAgIG1fdHlwZSA9IEVuY29k
ZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I7CisgICAgICAgICAgICB0aGlzLT5hbGxv
Y2F0ZTxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KGVuY29kZXIpLT5lbmNvZGUoZW5j
b2RlciwgdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIGJpZ0ludCA9IGpzRHlu
YW1pY0Nhc3Q8SlNCaWdJbnQqPih2bSwgY2VsbCkpIHsKKyAgICAgICAgICAgIG1fdHlwZSA9IEVu
Y29kZWRUeXBlOjpCaWdJbnQ7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRCaWdJ
bnQ+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKmJpZ0ludCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWUsIGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBKU1ZhbHVlIHY7CisgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgRW5j
b2RlZFR5cGU6OkpTVmFsdWU6CisgICAgICAgICAgICB2ID0gSlNWYWx1ZTo6ZGVjb2RlKCp0aGlz
LT5idWZmZXI8RW5jb2RlZEpTVmFsdWU+KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRW5jb2RlZFR5cGU6OlN5bWJvbFRhYmxlOgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1
ZmZlcjxDYWNoZWRTeW1ib2xUYWJsZT4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN0cmluZzogeworICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgPSB0aGlzLT5idWZmZXI8Q2FjaGVkVW5pcXVlZFN0cmlu
Z0ltcGw+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIHYgPSBKU1N0cmluZzo6Y3Jl
YXRlKGRlY29kZXIudm0oKSwgYWRvcHRSZWYoKmltcGwpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseToK
KyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkSW1tdXRhYmxlQnV0dGVyZmx5Pigp
LT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNv
ZGVkVHlwZTo6UmVnRXhwOgorICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRSZWdF
eHA+KCktPmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVuY29kZWRUeXBlOjpUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6CisgICAgICAgICAgICB2ID0g
SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZShkZWNvZGVyLnZtKCksIHRoaXMtPmJ1
ZmZlcjxDYWNoZWRUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KCktPmRlY29kZShkZWNvZGVyKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6QmlnSW50Ogor
ICAgICAgICAgICAgdiA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRCaWdJbnQ+KCktPmRlY29kZShkZWNv
ZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZS5z
ZXQoZGVjb2Rlci52bSgpLCBvd25lciwgdik7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0g
Y2xhc3MgRW5jb2RlZFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgSlNWYWx1ZSwKKyAgICAgICAg
U3ltYm9sVGFibGUsCisgICAgICAgIFN0cmluZywKKyAgICAgICAgSW1tdXRhYmxlQnV0dGVyZmx5
LAorICAgICAgICBSZWdFeHAsCisgICAgICAgIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciwKKyAg
ICAgICAgQmlnSW50LAorICAgIH07CisKKyAgICBFbmNvZGVkVHlwZSBtX3R5cGU7Cit9OworCitj
bGFzcyBDYWNoZWRJbnN0cnVjdGlvblN0cmVhbSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8SW5zdHJ1
Y3Rpb25TdHJlYW0+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgc3RyZWFtKQorICAgIHsKKyAgICAgICAgbV9pbnN0
cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIHN0cmVhbS5tX2luc3RydWN0aW9ucyk7CisgICAgfQor
CisgICAgSW5zdHJ1Y3Rpb25TdHJlYW0qIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3QsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBp
bnN0cnVjdGlvbnNWZWN0b3I7CisgICAgICAgIG1faW5zdHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVy
LCBpbnN0cnVjdGlvbnNWZWN0b3IpOworICAgICAgICByZXR1cm4gbmV3IEluc3RydWN0aW9uU3Ry
ZWFtKFdURk1vdmUoaW5zdHJ1Y3Rpb25zVmVjdG9yKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENhY2hlZFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9pbnN0cnVj
dGlvbnM7Cit9OworCitjbGFzcyBDYWNoZWRNZXRhZGF0YVRhYmxlIDogcHVibGljIENhY2hlZE9i
amVjdDxVbmxpbmtlZE1ldGFkYXRhVGFibGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgVW5saW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YVRhYmxlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhVGFibGUubV9pc0ZpbmFsaXplZCk7CisgICAgICAg
IG1faGFzTWV0YWRhdGEgPSBtZXRhZGF0YVRhYmxlLm1faGFzTWV0YWRhdGE7CisgICAgICAgIGlm
ICghbV9oYXNNZXRhZGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29mZnNldFRhYmxlRW50cmllczsgaS0t
OykKKyAgICAgICAgICAgIG1fbWV0YWRhdGFbaV0gPSBtZXRhZGF0YVRhYmxlLmJ1ZmZlcigpW2ld
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImLCBVbmxpbmtlZE1ldGFkYXRhVGFi
bGUmIG1ldGFkYXRhVGFibGUpIGNvbnN0CisgICAgeworICAgICAgICBtZXRhZGF0YVRhYmxlLm1f
aXNGaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBtZXRhZGF0YVRhYmxlLm1faXNMaW5rZWQgPSBm
YWxzZTsKKyAgICAgICAgbWV0YWRhdGFUYWJsZS5tX2hhc01ldGFkYXRhID0gbV9oYXNNZXRhZGF0
YTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpzX29m
ZnNldFRhYmxlRW50cmllczsgaS0tOykKKyAgICAgICAgICAgIG1ldGFkYXRhVGFibGUuYnVmZmVy
KClbaV0gPSBtX21ldGFkYXRhW2ldOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faGFz
TWV0YWRhdGE7CisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgVW5saW5rZWRNZXRhZGF0YVRhYmxl
OjpzX29mZnNldFRhYmxlRW50cmllcz4gbV9tZXRhZGF0YTsKK307CisKK2NsYXNzIENhY2hlZFNv
dXJjZU9yaWdpbiA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlT3JpZ2luPiB7CitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlT3JpZ2luJiBz
b3VyY2VPcmlnaW4pCisgICAgeworICAgICAgICBtX3N0cmluZy5lbmNvZGUoZW5jb2Rlciwgc291
cmNlT3JpZ2luLnN0cmluZygpKTsKKyAgICB9CisKKyAgICBTb3VyY2VPcmlnaW4gZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU291cmNlT3JpZ2lu
IHsgbV9zdHJpbmcuZGVjb2RlKGRlY29kZXIpIH07CisgICAgfQorCitwcml2YXRlOgorICAgIENh
Y2hlZFN0cmluZyBtX3N0cmluZzsKK307CisKK2NsYXNzIENhY2hlZFRleHRQb3NpdGlvbiA6IHB1
YmxpYyBDYWNoZWRPYmplY3Q8VGV4dFBvc2l0aW9uPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24pCisgICAgeworICAgICAgICBt
X2xpbmUgPSB0ZXh0UG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOworICAgICAgICBtX2Nv
bHVtbiA9IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKKyAgICB9CisKKyAg
ICBUZXh0UG9zaXRpb24gZGVjb2RlKERlY29kZXImKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFRleHRQb3NpdGlvbiB7IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9saW5l
KSwgT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2NvbHVtbikgfTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgaW50IG1fbGluZTsKKyAgICBpbnQgbV9jb2x1bW47Cit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBDYWNoZWRUeXBlPgorY2xhc3MgQ2FjaGVk
U291cmNlUHJvdmlkZXJTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlPiB7CitwdWJs
aWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlUHJvdmlk
ZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VPcmlnaW4uZW5jb2Rl
KGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZU9yaWdpbigpKTsKKyAgICAgICAgbV91cmwu
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnVybCgpKTsKKyAgICAgICAgbV9zb3VyY2VV
UkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZVVSTCgpKTsK
KyAgICAgICAgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBzb3Vy
Y2VQcm92aWRlci5zb3VyY2VNYXBwaW5nVVJMKCkpOworICAgICAgICBtX3N0YXJ0UG9zaXRpb24u
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnN0YXJ0UG9zaXRpb24oKSk7CisgICAgfQor
CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU291cmNlUHJvdmlkZXImIHNvdXJj
ZVByb3ZpZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgc291cmNlUHJvdmlkZXIuc2V0U291cmNl
VVJMRGlyZWN0aXZlKG1fc291cmNlVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKSk7CisgICAg
ICAgIHNvdXJjZVByb3ZpZGVyLnNldFNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUobV9zb3VyY2VN
YXBwaW5nVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVyKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgQ2FjaGVkU291cmNlT3JpZ2luIG1fc291cmNlT3JpZ2luOworICAgIENhY2hlZFN0cmlu
ZyBtX3VybDsKKyAgICBDYWNoZWRTdHJpbmcgbV9zb3VyY2VVUkxEaXJlY3RpdmU7CisgICAgQ2Fj
aGVkU3RyaW5nIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKKyAgICBDYWNoZWRUZXh0UG9z
aXRpb24gbV9zdGFydFBvc2l0aW9uOworfTsKKworY2xhc3MgQ2FjaGVkU3RyaW5nU291cmNlUHJv
dmlkZXIgOiBwdWJsaWMgQ2FjaGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92
aWRlciwgQ2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0gQ2Fj
aGVkU291cmNlUHJvdmlkZXJTaGFwZTxTdHJpbmdTb3VyY2VQcm92aWRlciwgQ2FjaGVkU3RyaW5n
U291cmNlUHJvdmlkZXI+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU3RyaW5nU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKQorICAgIHsK
KyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAg
bV9zb3VyY2UuZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLnNvdXJjZSgpLnRvU3RyaW5n
KCkpOworICAgIH0KKworICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVyKiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlIHNvdXJjZVR5cGUpIGNvbnN0CisgICAg
eworICAgICAgICBTdHJpbmcgZGVjb2RlZFNvdXJjZSA9IG1fc291cmNlLmRlY29kZShkZWNvZGVy
KTsKKyAgICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRTb3VyY2VPcmlnaW4gPSBtX3NvdXJjZU9y
aWdpbi5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFN0cmluZyBkZWNvZGVkVVJMID0gbV91cmwu
ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBUZXh0UG9zaXRpb24gZGVjb2RlZFN0YXJ0UG9zaXRp
b24gPSBtX3N0YXJ0UG9zaXRpb24uZGVjb2RlKGRlY29kZXIpOworCisgICAgICAgIFJlZjxTdHJp
bmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3VyY2VQcm92aWRlcjo6
Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVj
b2RlZFVSTCksIGRlY29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsKKyAgICAgICAgQmFz
ZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
ICZzb3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hl
ZFN0cmluZyBtX3NvdXJjZTsKK307CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjbGFzcyBD
YWNoZWRXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJjZVByb3Zp
ZGVyU2hhcGU8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciwgQ2FjaGVkV2ViQXNzZW1ibHlTb3Vy
Y2VQcm92aWRlcj4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBl
PFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENhY2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlk
ZXI+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAg
ICBCYXNlOjplbmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIpOworICAgICAgICBtX2RhdGEu
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVyLmRhdGEoKSk7CisgICAgfQorCisgICAgV2Vi
QXNzZW1ibHlTb3VyY2VQcm92aWRlciogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGVjb2RlZERhdGE7CisgICAgICAgIFNvdXJj
ZU9yaWdpbiBkZWNvZGVkU291cmNlT3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBTdHJpbmcgZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShkZWNvZGVyKTsK
KworICAgICAgICBtX2RhdGEuZGVjb2RlKGRlY29kZXIsIGRlY29kZWREYXRhKTsKKworICAgICAg
ICBSZWY8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBXZWJBc3Nl
bWJseVNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoV1RGTW92ZShkZWNvZGVkRGF0YSksIGRlY29kZWRT
b3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVjb2RlZFVSTCkpOworICAgICAgICBCYXNlOjpkZWNv
ZGUoZGVjb2Rlciwgc291cmNlUHJvdmlkZXIuZ2V0KCkpOworCisgICAgICAgIHJldHVybiAmc291
cmNlUHJvdmlkZXIubGVha1JlZigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0
b3I8dWludDhfdD4gbV9kYXRhOworfTsKKyNlbmRpZgorCitjbGFzcyBDYWNoZWRTb3VyY2VQcm92
aWRlciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2VQcm92aWRlcj4geworcHVi
bGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZVByb3Zp
ZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIG1fc291cmNlVHlwZSA9IHNvdXJj
ZVByb3ZpZGVyLnNvdXJjZVR5cGUoKTsKKyAgICAgICAgc3dpdGNoIChtX3NvdXJjZVR5cGUpIHsK
KyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW06CisgICAgICAg
IGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGU6CisgICAgICAgICAgICB0aGlz
LT5hbGxvY2F0ZTxDYWNoZWRTdHJpbmdTb3VyY2VQcm92aWRlcj4oZW5jb2RlciktPmVuY29kZShl
bmNvZGVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVyJj4oc291
cmNlUHJvdmlkZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5Ogor
ICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRl
cj4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFdlYkFz
c2VtYmx5U291cmNlUHJvdmlkZXImPihzb3VyY2VQcm92aWRlcikpOworICAgICAgICAgICAgYnJl
YWs7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTb3VyY2VQcm92aWRlciog
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1f
c291cmNlVHlwZSkgeworICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6UHJv
Z3JhbToKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZToKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLT5idWZmZXI8Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+
KCktPmRlY29kZShkZWNvZGVyLCBtX3NvdXJjZVR5cGUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5Ogor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcjxDYWNoZWRXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyPigpLT5kZWNvZGUoZGVjb2Rlcik7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisKK3ByaXZhdGU6CisgICAgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlIG1fc291cmNlVHlwZTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZT4KK2NsYXNzIENhY2hlZFVubGlua2VkU291
cmNlQ29kZVNoYXBlIDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2U+IHsKK3B1YmxpYzoKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUpCisgICAgeworICAgICAgICBtX3Byb3ZpZGVyLmVuY29kZShlbmNvZGVyLCBz
b3VyY2VDb2RlLm1fcHJvdmlkZXIuZ2V0KCkpOworICAgICAgICBtX3N0YXJ0T2Zmc2V0ID0gc291
cmNlQ29kZS5zdGFydE9mZnNldCgpOworICAgICAgICBtX2VuZE9mZnNldCA9IHNvdXJjZUNvZGUu
ZW5kT2Zmc2V0KCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgc291
cmNlQ29kZS5tX3Byb3ZpZGVyID0gbV9wcm92aWRlci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAg
IHNvdXJjZUNvZGUubV9zdGFydE9mZnNldCA9IG1fc3RhcnRPZmZzZXQ7CisgICAgICAgIHNvdXJj
ZUNvZGUubV9lbmRPZmZzZXQgPSBtX2VuZE9mZnNldDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Q2FjaGVkUHRyPENhY2hlZFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOworICAgIGludCBtX3N0
YXJ0T2Zmc2V0OworICAgIGludCBtX2VuZE9mZnNldDsKK307CisKKworY2xhc3MgQ2FjaGVkVW5s
aW5rZWRTb3VyY2VDb2RlIDogcHVibGljIENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFVu
bGlua2VkU291cmNlQ29kZT4geyB9OworCitjbGFzcyBDYWNoZWRTb3VyY2VDb2RlIDogcHVibGlj
IENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFNvdXJjZUNvZGU+IHsKKyAgICB1c2luZyBC
YXNlID0gQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlU2hhcGU8U291cmNlQ29kZT47CisKK3B1Ymxp
YzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIHNvdXJjZUNv
ZGUpOworICAgICAgICBtX2ZpcnN0TGluZSA9IHNvdXJjZUNvZGUuZmlyc3RMaW5lKCkuemVyb0Jh
c2VkSW50KCk7CisgICAgICAgIG1fc3RhcnRDb2x1bW4gPSBzb3VyY2VDb2RlLnN0YXJ0Q29sdW1u
KCkuemVyb0Jhc2VkSW50KCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgU291cmNlQ29kZSYgc291cmNlQ29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIEJhc2U6
OmRlY29kZShkZWNvZGVyLCBzb3VyY2VDb2RlKTsKKyAgICAgICAgc291cmNlQ29kZS5tX2ZpcnN0
TGluZSA9IE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9maXJzdExpbmUpOworICAg
ICAgICBzb3VyY2VDb2RlLm1fc3RhcnRDb2x1bW4gPSBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jh
c2VkSW50KG1fc3RhcnRDb2x1bW4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9maXJz
dExpbmU7CisgICAgaW50IG1fc3RhcnRDb2x1bW47Cit9OworCitjbGFzcyBDYWNoZWRGdW5jdGlv
bkV4ZWN1dGFibGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlJik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGRl
Y29kZShEZWNvZGVyJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBmaXJzdExpbmVPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX2ZpcnN0TGluZU9mZnNldDsgfQorICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CisgICAgdW5zaWduZWQgdW5saW5rZWRG
dW5jdGlvbk5hbWVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRGdW5jdGlvbk5hbWVT
dGFydDsgfQorICAgIHVuc2lnbmVkIHVubGlua2VkQm9keVN0YXJ0Q29sdW1uKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbjsgfQorICAgIHVuc2lnbmVkIHVubGlua2Vk
Qm9keUVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uOyB9
CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0
OyB9CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VM
ZW5ndGg7IH0KKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHR5cGVQcm9maWxp
bmdTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0
OyB9CisgICAgdW5zaWduZWQgdHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudDsgfQorCisgICAgQ29kZUZlYXR1cmVz
IGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIFNvdXJjZVBhcnNl
TW9kZSBzb3VyY2VQYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVBhcnNlTW9kZTsg
fQorCisgICAgdW5zaWduZWQgaXNJblN0cmljdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lz
SW5TdHJpY3RDb250ZXh0OyB9CisgICAgdW5zaWduZWQgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9CisgICAgdW5zaWduZWQgaXNC
dWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9Cisg
ICAgdW5zaWduZWQgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yOyB9CisgICAgdW5zaWduZWQg
Y29uc3RydWN0QWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0QWJpbGl0eTsgfQor
ICAgIHVuc2lnbmVkIGNvbnN0cnVjdG9yS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0
b3JLaW5kOyB9CisgICAgdW5zaWduZWQgZnVuY3Rpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9m
dW5jdGlvbk1vZGU7IH0KKyAgICB1bnNpZ25lZCBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JpcHRNb2RlOyB9CisgICAgdW5zaWduZWQgc3VwZXJCaW5kaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdXBlckJpbmRpbmc7IH0KKyAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2Rlcml2ZWRDb250ZXh0VHlwZTsgfQorCisgICAgSWRlbnRpZmllciBu
YW1lKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kZWNvZGUoZGVjb2Rl
cik7IH0KKyAgICBJZGVudGlmaWVyIGVjbWFOYW1lKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsg
cmV0dXJuIG1fZWNtYU5hbWUuZGVjb2RlKGRlY29kZXIpOyB9CisgICAgSWRlbnRpZmllciBpbmZl
cnJlZE5hbWUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWUu
ZGVjb2RlKGRlY29kZXIpOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9maXJzdExpbmVP
ZmZzZXQ7CisgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CisgICAgdW5zaWduZWQgbV91bmxpbmtl
ZEZ1bmN0aW9uTmFtZVN0YXJ0OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1
bW47CisgICAgdW5zaWduZWQgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW47CisgICAgdW5zaWduZWQg
bV9zdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKKyAgICB1bnNpZ25l
ZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdT
dGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAg
dW5zaWduZWQgbV9wYXJhbWV0ZXJDb3VudDsKKyAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsK
KyAgICBTb3VyY2VQYXJzZU1vZGUgbV9zb3VyY2VQYXJzZU1vZGU7CisgICAgdW5zaWduZWQgbV9p
c0luU3RyaWN0Q29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxl
cyA6IDE7CisgICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWdu
ZWQgbV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQg
bV9jb25zdHJ1Y3RBYmlsaXR5OiAxOworICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5kIDog
MjsKKyAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uTW9kZSA6IDI7IC8vIEZ1bmN0aW9uTW9kZQorICAg
IHVuc2lnbmVkIG1fc2NyaXB0TW9kZTogMTsgLy8gSlNQYXJzZXJTY3JpcHRNb2RlCisgICAgdW5z
aWduZWQgbV9zdXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVkIG1fZGVyaXZlZENvbnRleHRU
eXBlOiAyOworCisgICAgQ2FjaGVkU291cmNlQ29kZSBtX2NsYXNzU291cmNlOworCisgICAgQ2Fj
aGVkSWRlbnRpZmllciBtX25hbWU7CisgICAgQ2FjaGVkSWRlbnRpZmllciBtX2VjbWFOYW1lOwor
ICAgIENhY2hlZElkZW50aWZpZXIgbV9pbmZlcnJlZE5hbWU7CisKKyAgICBDYWNoZWRWYXJpYWJs
ZUVudmlyb25tZW50IG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7CisKKyAgICBDYWNoZWRXcml0
ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsOworICAgIENhY2hlZFdyaXRlQmFycmllcjxD
YWNoZWRGdW5jdGlvbkNvZGVCbG9jaywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV91bmxp
bmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+CitjbGFzcyBDYWNoZWRDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PENv
ZGVCbG9ja1R5cGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
VW5saW5rZWRDb2RlQmxvY2smKTsKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgVW5saW5rZWRD
b2RlQmxvY2smKSBjb25zdDsKKworICAgIEluc3RydWN0aW9uU3RyZWFtKiBpbnN0cnVjdGlvbnMo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuZGVjb2RlKGRl
Y29kZXIpOyB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3Rl
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3Rl
ciBnbG9iYWxPYmplY3RSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVn
aXN0ZXI7IH0KKworICAgIFN0cmluZyBzb3VyY2VVUkxEaXJlY3RpdmUoRGVjb2RlciYgZGVjb2Rl
cikgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VVUkxEaXJlY3RpdmUuZGVjb2RlKGRlY29kZXIpOyB9
CisgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoRGVjb2RlciYgZGVjb2Rlcikg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmRlY29kZShkZWNvZGVy
KTsgfQorCisgICAgdW5zaWduZWQgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFdmFs
OyB9CisgICAgdW5zaWduZWQgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmlj
dE1vZGU7IH0KKyAgICB1bnNpZ25lZCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbnN0cnVjdG9yOyB9CisgICAgdW5zaWduZWQgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBjb25z
dCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9CisgICAgdW5zaWduZWQgaXNCdWls
dGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9CisgICAg
dW5zaWduZWQgc3VwZXJCaW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdXBlckJpbmRpbmc7IH0K
KyAgICB1bnNpZ25lZCBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRNb2RlOyB9
CisgICAgdW5zaWduZWQgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNBcnJvd0Z1bmN0aW9uQ29udGV4dDsgfQorICAgIHVuc2lnbmVkIGlzQ2xhc3NDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc0NsYXNzQ29udGV4dDsgfQorICAgIHVuc2lnbmVkIHdhc0NvbXBp
bGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3dhc0NvbXBpbGVkV2l0
aERlYnVnZ2luZ09wY29kZXM7IH0KKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25z
dCB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZDsgfQorICAgIHVuc2lnbmVkIGRlcml2ZWRDb250
ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZlZENvbnRleHRUeXBlOyB9CisgICAgdW5z
aWduZWQgZXZhbENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ29udGV4dFR5cGU7
IH0KKyAgICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1RhaWxD
YWxsczsgfQorICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNv
dW50OyB9CisgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1
bW47IH0KKworICAgIGludCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9Cisg
ICAgaW50IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxz
OyB9CisgICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRl
cnM7IH0KKworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXM7IH0KKyAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9wYXJzZU1vZGU7IH0KKyAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZVR5cGU7IH0KKworICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogcmFyZURhdGEo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YS5kZWNvZGVBc1B0cihk
ZWNvZGVyKTsgfQorCitwcml2YXRlOgorICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3Rl
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdp
c3RlciBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOworCisgICAgdW5zaWduZWQgbV91c2VzRXZhbCA6
IDE7CisgICAgdW5zaWduZWQgbV9pc1N0cmljdE1vZGUgOiAxOworICAgIHVuc2lnbmVkIG1faXND
b25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7
CisgICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWduZWQgbV9z
dXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVkIG1fc2NyaXB0TW9kZTogMTsKKyAgICB1bnNp
Z25lZCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIG1faXNDbGFz
c0NvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlcyA6IDE7CisgICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOworICAgIHVuc2ln
bmVkIG1fZGVyaXZlZENvbnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0
VHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOworCisgICAgdW5zaWdu
ZWQgbV9saW5lQ291bnQ7CisgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CisKKyAgICBpbnQgbV9u
dW1WYXJzOworICAgIGludCBtX251bUNhbGxlZUxvY2FsczsKKyAgICBpbnQgbV9udW1QYXJhbWV0
ZXJzOworCisgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgU291cmNlUGFyc2VNb2Rl
IG1fcGFyc2VNb2RlOworICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CisKKyAgICBzdGQ6OmFycmF5
PHVuc2lnbmVkLCBMaW5rVGltZUNvbnN0YW50Q291bnQ+IG1fbGlua1RpbWVDb25zdGFudHM7Cisg
ICAgQ2FjaGVkTWV0YWRhdGFUYWJsZSBtX21ldGFkYXRhOworCisgICAgQ2FjaGVkT3B0aW9uYWw8
Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE+IG1fcmFyZURhdGE7CisKKyAgICBDYWNoZWRTdHJpbmcg
bV9zb3VyY2VVUkxEaXJlY3RpdmU7CisgICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlTWFwcGluZ1VS
TERpcmVjdGl2ZTsKKworICAgIENhY2hlZFB0cjxDYWNoZWRJbnN0cnVjdGlvblN0cmVhbT4gbV9p
bnN0cnVjdGlvbnM7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fanVtcFRhcmdldHM7CisgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZz
ZXQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hl
ZEpTVmFsdWU+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgQ2FjaGVkVmVjdG9yPFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247Cisg
ICAgQ2FjaGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87Cisg
ICAgQ2FjaGVkSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+IG1fb3V0T2ZM
aW5lSnVtcFRhcmdldHM7CisKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkQ29uc3RhbnRJZGVudGlm
aWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICBDYWNoZWRWZWN0b3I8
Q2FjaGVkSWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVk
Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFdyaXRlQmFy
cmllcjxDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRGVjbHM7CisgICAgQ2Fj
aGVkVmVjdG9yPENhY2hlZFdyaXRlQmFycmllcjxDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBt
X2Z1bmN0aW9uRXhwcnM7Cit9OworCitjbGFzcyBDYWNoZWRQcm9ncmFtQ29kZUJsb2NrIDogcHVi
bGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2lu
ZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz47CisKK3B1
YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2smIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2spOworICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucy5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fdmFyRGVjbGFyYXRpb25zKTsKKyAgICAgICAgbV9sZXhpY2FsRGVj
bGFyYXRpb25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9sZXhpY2FsRGVjbGFyYXRpb25z
KTsKKyAgICB9CisKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKGRl
Y29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVy
LnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAg
ICAgIG1fdmFyRGVjbGFyYXRpb25zLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFyRGVj
bGFyYXRpb25zKTsKKyAgICAgICAgbV9sZXhpY2FsRGVjbGFyYXRpb25zLmRlY29kZShkZWNvZGVy
LCBjb2RlQmxvY2stPm1fbGV4aWNhbERlY2xhcmF0aW9ucyk7CisgICAgICAgIHJldHVybiBjb2Rl
QmxvY2s7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFZhcmlhYmxlRW52aXJvbm1lbnQg
bV92YXJEZWNsYXJhdGlvbnM7CisgICAgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudCBtX2xleGlj
YWxEZWNsYXJhdGlvbnM7Cit9OworCitjbGFzcyBDYWNoZWRNb2R1bGVDb2RlQmxvY2sgOiBwdWJs
aWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4geworICAg
IHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAg
ICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgICAgIG1fbW9kdWxlRW52
aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBjb2RlQmxvY2subV9t
b2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKKyAgICB9
CisKKyAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAgICAgICAgY29kZUJsb2NrLT5maW5pc2hD
cmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2RlciwgKmNv
ZGVCbG9jayk7CisgICAgICAgIGNvZGVCbG9jay0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRh
YmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAg
fQorCitwcml2YXRlOgorICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25z
dGFudFJlZ2lzdGVyT2Zmc2V0OworfTsKKworY2xhc3MgQ2FjaGVkRXZhbENvZGVCbG9jayA6IHB1
YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrPiB7CisgICAgdXNpbmcg
QmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+OworCitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrKTsKKyAgICAgICAgbV92YXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9j
ay5tX3ZhcmlhYmxlcyk7CisgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMuZW5j
b2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzKTsKKyAg
ICB9CisKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KGRlY29k
ZXIudm0oKS5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKGRlY29kZXIsICp0aGlzKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworICAgICAgICBC
YXNlOjpkZWNvZGUoZGVjb2RlciwgKmNvZGVCbG9jayk7CisgICAgICAgIG1fdmFyaWFibGVzLmRl
Y29kZShkZWNvZGVyLCBjb2RlQmxvY2stPm1fdmFyaWFibGVzKTsKKyAgICAgICAgbV9mdW5jdGlv
bkhvaXN0aW5nQ2FuZGlkYXRlcy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2Z1bmN0aW9u
SG9pc3RpbmdDYW5kaWRhdGVzKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkSWRlbnRp
ZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0
ZXM7Cit9OworCitjbGFzcyBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRD
b2RlQmxvY2s8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBD
YWNoZWRDb2RlQmxvY2s8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz47CisKK3B1YmxpYzoKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBCYXNlOjplbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3Jl
YXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2Rl
QmxvY2spOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KK307CisKK0FMV0FZU19J
TkxJTkUgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jayYgY2FjaGVk
Q29kZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsOworCitl
bnVtIENhY2hlZENvZGVCbG9ja1RhZyB7CisgICAgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZywK
KyAgICBDYWNoZWRNb2R1bGVDb2RlQmxvY2tUYWcsCisgICAgQ2FjaGVkRXZhbENvZGVCbG9ja1Rh
ZywKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBlID0gQ2FjaGVkUHJvZ3JhbUNv
ZGVCbG9jazsKKyAgICBzdGF0aWMgY29uc3RleHByIENhY2hlZENvZGVCbG9ja1RhZyB0YWcgPSBD
YWNoZWRQcm9ncmFtQ29kZUJsb2NrVGFnOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IENhY2hl
ZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4geworICAg
IHVzaW5nIHR5cGUgPSBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBDYWNoZWRDb2RlQmxvY2tUYWcgdGFnID0gQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFnOworfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkRXZh
bENvZGVCbG9jaz4geworICAgIHVzaW5nIHR5cGUgPSBDYWNoZWRFdmFsQ29kZUJsb2NrOworICAg
IHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENhY2hlZEV2YWxDb2Rl
QmxvY2tUYWc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgQ2FjaGVkQ29kZUJs
b2NrVHlwZSA9IHR5cGVuYW1lIENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFQ+Ojp0eXBlOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorQUxXQVlTX0lOTElORSBVbmxpbmtlZENv
ZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPiYgY2FjaGVkQ29k
ZUJsb2NrKQorICAgIDogQmFzZShkZWNvZGVyLnZtKCksIHN0cnVjdHVyZSkKKyAgICAsIG1faW5z
dHJ1Y3Rpb25zKGNhY2hlZENvZGVCbG9jay5pbnN0cnVjdGlvbnMoZGVjb2RlcikpCisgICAgLCBt
X2xpdmVuZXNzKG51bGxwdHIpCisgICAgLCBtX3RoaXNSZWdpc3RlcihjYWNoZWRDb2RlQmxvY2su
dGhpc1JlZ2lzdGVyKCkpCisgICAgLCBtX3Njb3BlUmVnaXN0ZXIoY2FjaGVkQ29kZUJsb2NrLnNj
b3BlUmVnaXN0ZXIoKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoY2FjaGVkQ29kZUJs
b2NrLmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkpCisKKyAgICAsIG1fc291cmNlVVJMRGlyZWN0aXZl
KGNhY2hlZENvZGVCbG9jay5zb3VyY2VVUkxEaXJlY3RpdmUoZGVjb2RlcikpCisgICAgLCBtX3Nv
dXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoY2FjaGVkQ29kZUJsb2NrLnNvdXJjZU1hcHBpbmdVUkxE
aXJlY3RpdmUoZGVjb2RlcikpCisKKyAgICAsIG1fdXNlc0V2YWwoY2FjaGVkQ29kZUJsb2NrLnVz
ZXNFdmFsKCkpCisgICAgLCBtX2lzU3RyaWN0TW9kZShjYWNoZWRDb2RlQmxvY2suaXNTdHJpY3RN
b2RlKCkpCisgICAgLCBtX2lzQ29uc3RydWN0b3IoY2FjaGVkQ29kZUJsb2NrLmlzQ29uc3RydWN0
b3IoKSkKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoY2FjaGVkQ29kZUJsb2NrLmhhc0Nh
cHR1cmVkVmFyaWFibGVzKCkpCisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hlZENvZGVC
bG9jay5pc0J1aWx0aW5GdW5jdGlvbigpKQorICAgICwgbV9zdXBlckJpbmRpbmcoY2FjaGVkQ29k
ZUJsb2NrLnN1cGVyQmluZGluZygpKQorICAgICwgbV9zY3JpcHRNb2RlKGNhY2hlZENvZGVCbG9j
ay5zY3JpcHRNb2RlKCkpCisgICAgLCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQoY2FjaGVkQ29k
ZUJsb2NrLmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSkKKyAgICAsIG1faXNDbGFzc0NvbnRleHQo
Y2FjaGVkQ29kZUJsb2NrLmlzQ2xhc3NDb250ZXh0KCkpCisgICAgLCBtX3dhc0NvbXBpbGVkV2l0
aERlYnVnZ2luZ09wY29kZXMoY2FjaGVkQ29kZUJsb2NrLndhc0NvbXBpbGVkV2l0aERlYnVnZ2lu
Z09wY29kZXMoKSkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kKGNhY2hlZENvZGVCbG9jay5jb25z
dHJ1Y3RvcktpbmQoKSkKKyAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNhY2hlZENvZGVCbG9j
ay5kZXJpdmVkQ29udGV4dFR5cGUoKSkKKyAgICAsIG1fZXZhbENvbnRleHRUeXBlKGNhY2hlZENv
ZGVCbG9jay5ldmFsQ29udGV4dFR5cGUoKSkKKyAgICAsIG1faGFzVGFpbENhbGxzKGNhY2hlZENv
ZGVCbG9jay5oYXNUYWlsQ2FsbHMoKSkKKyAgICAsIG1fbGluZUNvdW50KGNhY2hlZENvZGVCbG9j
ay5saW5lQ291bnQoKSkKKyAgICAsIG1fZW5kQ29sdW1uKGNhY2hlZENvZGVCbG9jay5lbmRDb2x1
bW4oKSkKKyAgICAsIG1fbnVtVmFycyhjYWNoZWRDb2RlQmxvY2subnVtVmFycygpKQorICAgICwg
bV9udW1DYWxsZWVMb2NhbHMoY2FjaGVkQ29kZUJsb2NrLm51bUNhbGxlZUxvY2FscygpKQorICAg
ICwgbV9udW1QYXJhbWV0ZXJzKGNhY2hlZENvZGVCbG9jay5udW1QYXJhbWV0ZXJzKCkpCisgICAg
LCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0dXJlcygpKQorICAgICwgbV9wYXJzZU1v
ZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSgpKQorICAgICwgbV9jb2RlVHlwZShjYWNoZWRD
b2RlQmxvY2suY29kZVR5cGUoKSkKKyAgICAsIG1fcmFyZURhdGEoY2FjaGVkQ29kZUJsb2NrLnJh
cmVEYXRhKGRlY29kZXIpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFVubGlua2VkQ29kZUJsb2NrJiBjb2RlQmxvY2spIGNvbnN0
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVDb25zdGFudENvdW50OyBpLS07KQor
ICAgICAgICBjb2RlQmxvY2subV9saW5rVGltZUNvbnN0YW50c1tpXSA9IG1fbGlua1RpbWVDb25z
dGFudHNbaV07CisKKyAgICBtX21ldGFkYXRhLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9t
ZXRhZGF0YSk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5kZWNvZGUoZGVjb2Rl
ciwgY29kZUJsb2NrLm1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMpOworICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50UmVnaXN0ZXJz
LCAmY29kZUJsb2NrKTsKKyAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5k
ZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKTsKKyAgICBtX2V4cHJlc3Npb25JbmZvLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9l
eHByZXNzaW9uSW5mbyk7CisgICAgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5kZWNvZGUoZGVjb2Rl
ciwgY29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOworICAgIG1fanVtcFRhcmdldHMu
ZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBtX2NvbnN0YW50
SWRlbnRpZmllclNldHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50SWRlbnRp
ZmllclNldHMpOworICAgIG1faWRlbnRpZmllcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5t
X2lkZW50aWZpZXJzKTsKKyAgICBtX2JpdFZlY3RvcnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9j
ay5tX2JpdFZlY3RvcnMpOworICAgIG1fZnVuY3Rpb25EZWNscy5kZWNvZGUoZGVjb2RlciwgY29k
ZUJsb2NrLm1fZnVuY3Rpb25EZWNscywgJmNvZGVCbG9jayk7CisgICAgbV9mdW5jdGlvbkV4cHJz
LmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkV4cHJzLCAmY29kZUJsb2NrKTsK
K30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OlVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNoZWRQcm9ncmFtQ29kZUJs
b2NrJiBjYWNoZWRDb2RlQmxvY2spCisgICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykK
K3sKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OlVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBDYWNo
ZWRNb2R1bGVDb2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rlciwg
ZGVjb2Rlci52bSgpLnVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQo
KSwgY2FjaGVkQ29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRXZhbENv
ZGVCbG9jazo6VW5saW5rZWRFdmFsQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIGNvbnN0IENh
Y2hlZEV2YWxDb2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rlciwg
ZGVjb2Rlci52bSgpLnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY2FjaGVk
Q29kZUJsb2NrKQoreworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkRnVuY3Rpb25FeGVj
dXRhYmxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUmIGV4ZWN1dGFibGUpCit7CisgICAgbV9maXJzdExpbmVPZmZzZXQgPSBleGVjdXRh
YmxlLm1fZmlyc3RMaW5lT2Zmc2V0OworICAgIG1fbGluZUNvdW50ID0gZXhlY3V0YWJsZS5tX2xp
bmVDb3VudDsKKyAgICBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQgPSBleGVjdXRhYmxlLm1f
dW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKKyAgICBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1u
ID0gZXhlY3V0YWJsZS5tX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uOworICAgIG1fdW5saW5rZWRC
b2R5RW5kQ29sdW1uID0gZXhlY3V0YWJsZS5tX3VubGlua2VkQm9keUVuZENvbHVtbjsKKyAgICBt
X3N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3N0YXJ0T2Zmc2V0OworICAgIG1fc291cmNlTGVu
Z3RoID0gZXhlY3V0YWJsZS5tX3NvdXJjZUxlbmd0aDsKKyAgICBtX3BhcmFtZXRlcnNTdGFydE9m
ZnNldCA9IGV4ZWN1dGFibGUubV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgbV90eXBlUHJv
ZmlsaW5nU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0
OworICAgIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IGV4ZWN1dGFibGUubV90eXBlUHJvZmls
aW5nRW5kT2Zmc2V0OworICAgIG1fcGFyYW1ldGVyQ291bnQgPSBleGVjdXRhYmxlLm1fcGFyYW1l
dGVyQ291bnQ7CisKKyAgICBtX2ZlYXR1cmVzID0gZXhlY3V0YWJsZS5tX2ZlYXR1cmVzOworICAg
IG1fc291cmNlUGFyc2VNb2RlID0gZXhlY3V0YWJsZS5tX3NvdXJjZVBhcnNlTW9kZTsKKworICAg
IG1faXNJblN0cmljdENvbnRleHQgPSBleGVjdXRhYmxlLm1faXNJblN0cmljdENvbnRleHQ7Cisg
ICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGV4ZWN1dGFibGUubV9oYXNDYXB0dXJlZFZhcmlh
YmxlczsKKyAgICBtX2lzQnVpbHRpbkZ1bmN0aW9uID0gZXhlY3V0YWJsZS5tX2lzQnVpbHRpbkZ1
bmN0aW9uOworICAgIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgPSBleGVjdXRh
YmxlLm1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3I7CisgICAgbV9jb25zdHJ1Y3RB
YmlsaXR5ID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdEFiaWxpdHk7CisgICAgbV9jb25zdHJ1Y3Rv
cktpbmQgPSBleGVjdXRhYmxlLm1fY29uc3RydWN0b3JLaW5kOworICAgIG1fZnVuY3Rpb25Nb2Rl
ID0gZXhlY3V0YWJsZS5tX2Z1bmN0aW9uTW9kZTsKKyAgICBtX3NjcmlwdE1vZGUgPSBleGVjdXRh
YmxlLm1fc2NyaXB0TW9kZTsKKyAgICBtX3N1cGVyQmluZGluZyA9IGV4ZWN1dGFibGUubV9zdXBl
ckJpbmRpbmc7CisgICAgbV9kZXJpdmVkQ29udGV4dFR5cGUgPSBleGVjdXRhYmxlLm1fZGVyaXZl
ZENvbnRleHRUeXBlOworCisgICAgbV9jbGFzc1NvdXJjZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0
YWJsZS5tX2NsYXNzU291cmNlKTsKKworICAgIG1fbmFtZS5lbmNvZGUoZW5jb2RlciwgZXhlY3V0
YWJsZS5uYW1lKCkpOworICAgIG1fZWNtYU5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUu
ZWNtYU5hbWUoKSk7CisgICAgbV9pbmZlcnJlZE5hbWUuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFi
bGUuaW5mZXJyZWROYW1lKCkpOworCisgICAgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5lbmNv
ZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5wYXJlbnRTY29wZVREWlZhcmlhYmxlcygpKTsKKworICAg
IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1f
dW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29u
c3RydWN0LmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1fdW5saW5rZWRDb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25z
dAoreworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgZW52OworICAgIG1fcGFyZW50U2NvcGVURFpW
YXJpYWJsZXMuZGVjb2RlKGRlY29kZXIsIGVudik7CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKGRlY29kZXIsIGVudiwgKnRoaXMpOworICAgIGV4ZWN1dGFibGUtPmZpbmlzaENy
ZWF0aW9uKGRlY29kZXIudm0oKSk7CisKKyAgICBtX2NsYXNzU291cmNlLmRlY29kZShkZWNvZGVy
LCBleGVjdXRhYmxlLT5tX2NsYXNzU291cmNlKTsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9y
Q2FsbC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNh
bGwsIGV4ZWN1dGFibGUpOworICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZGVj
b2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Qs
IGV4ZWN1dGFibGUpOworCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK0FMV0FZU19JTkxJ
TkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KERlY29kZXImIGRlY29kZXIsIFZhcmlhYmxlRW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERaVmFy
aWFibGVzLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmIGNhY2hlZEV4ZWN1dGFibGUp
CisgICAgOiBCYXNlKGRlY29kZXIudm0oKSwgZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9maXJzdExpbmVPZmZzZXQoY2FjaGVk
RXhlY3V0YWJsZS5maXJzdExpbmVPZmZzZXQoKSkKKyAgICAsIG1fbGluZUNvdW50KGNhY2hlZEV4
ZWN1dGFibGUubGluZUNvdW50KCkpCisgICAgLCBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQo
Y2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KCkpCisgICAgLCBtX3Vu
bGlua2VkQm9keVN0YXJ0Q29sdW1uKGNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRCb2R5U3RhcnRD
b2x1bW4oKSkKKyAgICAsIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uKGNhY2hlZEV4ZWN1dGFibGUu
dW5saW5rZWRCb2R5RW5kQ29sdW1uKCkpCisgICAgLCBtX3N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1
dGFibGUuc3RhcnRPZmZzZXQoKSkKKyAgICAsIG1fc291cmNlTGVuZ3RoKGNhY2hlZEV4ZWN1dGFi
bGUuc291cmNlTGVuZ3RoKCkpCisgICAgLCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldChjYWNoZWRF
eGVjdXRhYmxlLnBhcmFtZXRlcnNTdGFydE9mZnNldCgpKQorICAgICwgbV90eXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSkK
KyAgICAsIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQoKSkKKyAgICAsIG1fcGFyYW1ldGVyQ291bnQoY2FjaGVkRXhlY3V0YWJs
ZS5wYXJhbWV0ZXJDb3VudCgpKQorICAgICwgbV9mZWF0dXJlcyhjYWNoZWRFeGVjdXRhYmxlLmZl
YXR1cmVzKCkpCisgICAgLCBtX3NvdXJjZVBhcnNlTW9kZShjYWNoZWRFeGVjdXRhYmxlLnNvdXJj
ZVBhcnNlTW9kZSgpKQorICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChjYWNoZWRFeGVjdXRhYmxl
LmlzSW5TdHJpY3RDb250ZXh0KCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGNhY2hl
ZEV4ZWN1dGFibGUuaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSkKKyAgICAsIG1faXNCdWlsdGluRnVu
Y3Rpb24oY2FjaGVkRXhlY3V0YWJsZS5pc0J1aWx0aW5GdW5jdGlvbigpKQorICAgICwgbV9pc0J1
aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcihjYWNoZWRFeGVjdXRhYmxlLmlzQnVpbHRpbkRl
ZmF1bHRDbGFzc0NvbnN0cnVjdG9yKCkpCisgICAgLCBtX2NvbnN0cnVjdEFiaWxpdHkoY2FjaGVk
RXhlY3V0YWJsZS5jb25zdHJ1Y3RBYmlsaXR5KCkpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZChj
YWNoZWRFeGVjdXRhYmxlLmNvbnN0cnVjdG9yS2luZCgpKQorICAgICwgbV9mdW5jdGlvbk1vZGUo
Y2FjaGVkRXhlY3V0YWJsZS5mdW5jdGlvbk1vZGUoKSkKKyAgICAsIG1fc2NyaXB0TW9kZShjYWNo
ZWRFeGVjdXRhYmxlLnNjcmlwdE1vZGUoKSkKKyAgICAsIG1fc3VwZXJCaW5kaW5nKGNhY2hlZEV4
ZWN1dGFibGUuc3VwZXJCaW5kaW5nKCkpCisgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShjYWNo
ZWRFeGVjdXRhYmxlLmRlcml2ZWRDb250ZXh0VHlwZSgpKQorCisgICAgLCBtX25hbWUoY2FjaGVk
RXhlY3V0YWJsZS5uYW1lKGRlY29kZXIpKQorICAgICwgbV9lY21hTmFtZShjYWNoZWRFeGVjdXRh
YmxlLmVjbWFOYW1lKGRlY29kZXIpKQorICAgICwgbV9pbmZlcnJlZE5hbWUoY2FjaGVkRXhlY3V0
YWJsZS5pbmZlcnJlZE5hbWUoZGVjb2RlcikpCisKKyAgICAsIG1fcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMoZGVjb2Rlci52bSgpLm1fY29tcGFjdFZhcmlhYmxlTWFwLT5nZXQocGFyZW50U2NvcGVU
RFpWYXJpYWJsZXMpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
QUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJiBjb2RlQmxvY2spCit7
CisgICAgbV90aGlzUmVnaXN0ZXIgPSBjb2RlQmxvY2subV90aGlzUmVnaXN0ZXI7CisgICAgbV9z
Y29wZVJlZ2lzdGVyID0gY29kZUJsb2NrLm1fc2NvcGVSZWdpc3RlcjsKKyAgICBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyID0gY29kZUJsb2NrLm1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisgICAgbV91
c2VzRXZhbCA9IGNvZGVCbG9jay5tX3VzZXNFdmFsOworICAgIG1faXNTdHJpY3RNb2RlID0gY29k
ZUJsb2NrLm1faXNTdHJpY3RNb2RlOworICAgIG1faXNDb25zdHJ1Y3RvciA9IGNvZGVCbG9jay5t
X2lzQ29uc3RydWN0b3I7CisgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGNvZGVCbG9jay5t
X2hhc0NhcHR1cmVkVmFyaWFibGVzOworICAgIG1faXNCdWlsdGluRnVuY3Rpb24gPSBjb2RlQmxv
Y2subV9pc0J1aWx0aW5GdW5jdGlvbjsKKyAgICBtX3N1cGVyQmluZGluZyA9IGNvZGVCbG9jay5t
X3N1cGVyQmluZGluZzsKKyAgICBtX3NjcmlwdE1vZGUgPSBjb2RlQmxvY2subV9zY3JpcHRNb2Rl
OworICAgIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNvZGVCbG9jay5tX2lzQXJyb3dGdW5j
dGlvbkNvbnRleHQ7CisgICAgbV9pc0NsYXNzQ29udGV4dCA9IGNvZGVCbG9jay5tX2lzQ2xhc3ND
b250ZXh0OworICAgIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyA9IGNvZGVCbG9j
ay5tX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXM7CisgICAgbV9jb25zdHJ1Y3Rvcktp
bmQgPSBjb2RlQmxvY2subV9jb25zdHJ1Y3RvcktpbmQ7CisgICAgbV9kZXJpdmVkQ29udGV4dFR5
cGUgPSBjb2RlQmxvY2subV9kZXJpdmVkQ29udGV4dFR5cGU7CisgICAgbV9ldmFsQ29udGV4dFR5
cGUgPSBjb2RlQmxvY2subV9ldmFsQ29udGV4dFR5cGU7CisgICAgbV9oYXNUYWlsQ2FsbHMgPSBj
b2RlQmxvY2subV9oYXNUYWlsQ2FsbHM7CisgICAgbV9saW5lQ291bnQgPSBjb2RlQmxvY2subV9s
aW5lQ291bnQ7CisgICAgbV9lbmRDb2x1bW4gPSBjb2RlQmxvY2subV9lbmRDb2x1bW47CisgICAg
bV9udW1WYXJzID0gY29kZUJsb2NrLm1fbnVtVmFyczsKKyAgICBtX251bUNhbGxlZUxvY2FscyA9
IGNvZGVCbG9jay5tX251bUNhbGxlZUxvY2FsczsKKyAgICBtX251bVBhcmFtZXRlcnMgPSBjb2Rl
QmxvY2subV9udW1QYXJhbWV0ZXJzOworICAgIG1fZmVhdHVyZXMgPSBjb2RlQmxvY2subV9mZWF0
dXJlczsKKyAgICBtX3BhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKKyAgICBtX2Nv
ZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5cGU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBM
aW5rVGltZUNvbnN0YW50Q291bnQ7IGktLTspCisgICAgICAgIG1fbGlua1RpbWVDb25zdGFudHNb
aV0gPSBjb2RlQmxvY2subV9saW5rVGltZUNvbnN0YW50c1tpXTsKKworICAgIG1fbWV0YWRhdGEu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhKTsKKyAgICBtX3JhcmVEYXRhLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YSk7CisKKyAgICBtX3NvdXJjZVVSTERp
cmVjdGl2ZS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fc291cmNlVVJMRGlyZWN0aXZlLmlt
cGwoKSk7CisgICAgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBj
b2RlQmxvY2subV9zb3VyY2VVUkxEaXJlY3RpdmUuaW1wbCgpKTsKKworICAgIG1faW5zdHJ1Y3Rp
b25zLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9pbnN0cnVjdGlvbnMuZ2V0KCkpOworICAg
IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTsKKyAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgbV9leHByZXNzaW9uSW5m
by5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lvbkluZm8pOworICAgIG1fanVt
cFRhcmdldHMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2p1bXBUYXJnZXRzKTsKKyAgICBt
X291dE9mTGluZUp1bXBUYXJnZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9vdXRPZkxp
bmVKdW1wVGFyZ2V0cyk7CisKKyAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50SWRlbnRpZmllclNldHMpOworICAgIG1faWRlbnRp
ZmllcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2lkZW50aWZpZXJzKTsKKyAgICBtX2Jp
dFZlY3RvcnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2JpdFZlY3RvcnMpOworICAgIG1f
ZnVuY3Rpb25EZWNscy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25EZWNscyk7
CisgICAgbV9mdW5jdGlvbkV4cHJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlv
bkV4cHJzKTsKK30KKworY2xhc3MgQ2FjaGVkU291cmNlQ29kZUtleSA6IHB1YmxpYyBDYWNoZWRP
YmplY3Q8U291cmNlQ29kZUtleT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKKyAgICB7CisgICAgICAgIG1fc291
cmNlQ29kZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fc291cmNlQ29kZSk7CisgICAgICAgIG1fbmFt
ZS5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fbmFtZSk7CisgICAgICAgIG1fZmxhZ3MgPSBrZXkubV9m
bGFncy5tX2ZsYWdzOworICAgICAgICBtX2hhc2ggPSBrZXkuaGFzaCgpOworICAgICAgICBtX2Z1
bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBrZXkubV9mdW5jdGlvbkNv
bnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAgIH0KKworICAgIHZvaWQgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGVLZXkmIGtleSkgY29uc3QKKyAgICB7CisgICAg
ICAgIG1fc291cmNlQ29kZS5kZWNvZGUoZGVjb2Rlciwga2V5Lm1fc291cmNlQ29kZSk7CisgICAg
ICAgIG1fbmFtZS5kZWNvZGUoZGVjb2Rlciwga2V5Lm1fbmFtZSk7CisgICAgICAgIGtleS5tX2Zs
YWdzLm1fZmxhZ3MgPSBtX2ZsYWdzOworICAgICAgICBrZXkubV9oYXNoID0gbV9oYXNoOworICAg
ICAgICBrZXkubV9mdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0gbV9m
dW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGUgbV9zb3VyY2VDb2RlOworICAgIENhY2hl
ZFN0cmluZyBtX25hbWU7CisgICAgdW5zaWduZWQgbV9mbGFnczsKKyAgICB1bnNpZ25lZCBtX2hh
c2g7CisgICAgaW50IG1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsK
K307CisKK2NsYXNzIEdlbmVyaWNDYWNoZUVudHJ5IHsKK3B1YmxpYzoKKyAgICBzdGQ6OnBhaXI8
U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgQ2FjaGVkQ29kZUJsb2NrVGFnIG1fdGFnOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorY2xhc3MgQ2FjaGVFbnRyeSA6
IHB1YmxpYyBHZW5lcmljQ2FjaGVFbnRyeSB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2Rlciwgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIGNvbnN0IFVubGlua2VkQ29k
ZUJsb2NrVHlwZSo+IHBhaXIpCisgICAgeworICAgICAgICBtX3RhZyA9IENhY2hlZENvZGVCbG9j
a1R5cGVJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnRhZzsKKyAgICAgICAgbV9rZXkuZW5j
b2RlKGVuY29kZXIsIHBhaXIuZmlyc3QpOworICAgICAgICBtX2NvZGVCbG9jay5lbmNvZGUoZW5j
b2RlciwgcGFpci5zZWNvbmQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgR2VuZXJp
Y0NhY2hlRW50cnk7CisKKyAgICBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV90YWcgPT0gQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlPjo6dGFnKTsKKyAgICAgICAgU291cmNlQ29kZUtleSBkZWNvZGVkS2V5OworICAgICAg
ICBtX2tleS5kZWNvZGUoZGVjb2RlciwgZGVjb2RlZEtleSk7CisgICAgICAgIHJldHVybiB7IFdU
Rk1vdmUoZGVjb2RlZEtleSksIG1fY29kZUJsb2NrLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0K
KworICAgIENhY2hlZFNvdXJjZUNvZGVLZXkgbV9rZXk7CisgICAgQ2FjaGVkUHRyPENhY2hlZENv
ZGVCbG9ja1R5cGU8VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4gbV9jb2RlQmxvY2s7Cit9OworCitz
dGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBHZW5lcmljQ2FjaGVF
bnRyeTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3Rh
ZykgeworICAgIGNhc2UgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzoKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2s+Kj4odGhpcyktPmRlY29kZShkZWNvZGVyKTsKKyAgICBjYXNlIENhY2hlZE1vZHVsZUNvZGVC
bG9ja1RhZzoKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FjaGVFbnRy
eTxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+Kj4odGhpcyktPmRlY29kZShkZWNvZGVy
KTsKKyAgICBjYXNlIENhY2hlZEV2YWxDb2RlQmxvY2tUYWc6CisgICAgICAgIC8vIFdlIGRvIG5v
dCBjYWNoZSBldmFsIGNvZGUgYmxvY2tzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjaWYgQ09N
UElMRVIoTVNWQykKKyAgICAvLyBXaXRob3V0IHRoaXMsIE1TVkMgd2lsbCBjb21wbGFpbiB0aGF0
IHRoaXMgcGF0aCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4KKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBDYWNoZUVudHJ5PFVubGlua2VkRXZhbENvZGVCbG9jaz4qPih0aGlzKS0+
ZGVjb2RlKGRlY29kZXIpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2Vk
Q29kZUJsb2NrVHlwZT4KK3ZvaWQgZW5jb2RlQ29kZUJsb2NrKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBhdXRvKiBlbnRyeSA9IGVuY29kZXIudGVtcGxhdGUgbWFsbG9jPENhY2hlRW50
cnk8VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4oKTsKKyAgICBlbnRyeS0+ZW5jb2RlKGVuY29kZXIs
ICB7IGtleSwganNDYXN0PGNvbnN0IFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGNvZGVCbG9jaykg
fSk7Cit9CisKK3N0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29k
ZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBVbmxpbmtlZENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0g
Y29kZUJsb2NrLT5jbGFzc0luZm8odm0pOworCisgICAgRW5jb2RlciBlbmNvZGVyKHZtKTsKKyAg
ICBpZiAoY2xhc3NJbmZvID09IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAg
ICAgICBlbmNvZGVDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBr
ZXksIGNvZGVCbG9jayk7CisgICAgZWxzZSBpZiAoY2xhc3NJbmZvID09IFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICBlbmNvZGVDb2RlQmxvY2s8VW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihlbmNvZGVyLCBrZXksIGNvZGVCbG9jayk7CisgICAg
ZWxzZQorICAgICAgICBBU1NFUlQoY2xhc3NJbmZvID09IFVubGlua2VkRXZhbENvZGVCbG9jazo6
aW5mbygpKTsKKworICAgIHJldHVybiBlbmNvZGVyLnJlbGVhc2UoKTsKK30KKworVW5saW5rZWRD
b2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5
JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgICAgY29uc3QgYXV0
byogY2FjaGVkRW50cnkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdlbmVyaWNDYWNoZUVudHJ5
Kj4oYnVmZmVyKTsKKyAgICBEZWNvZGVyIGRlY29kZXIodm0sIGJ1ZmZlciwgc2l6ZSk7CisgICAg
c3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZW50cnk7CisgICAg
eworICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgICAgIGVudHJ5ID0gY2Fj
aGVkRW50cnktPmRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKKyAgICBpZiAoZW50cnkuZmlyc3Qg
IT0ga2V5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZW50cnkuc2Vjb25k
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYjhhY2I2Y2U1NzBlOTcyNjM4OWMyNmQ3MGJj
YmEyMWRhOGQ0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ2Fz
dC5oIgorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIFNvdXJjZUNvZGVLZXk7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKKworc3RkOjpwYWly
PE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mLCBjb25zdCBT
b3VyY2VDb2RlS2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqKTsKK1VubGlua2VkQ29kZUJs
b2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0
IHZvaWQqLCBzaXplX3QpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KK1VubGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29kZUJsb2NrKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQor
eworICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZGVjb2RlQ29kZUJs
b2NrSW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAppbmRleCA0NjAx
NzkyMWE0NmVmYzY0MTcyNWQwYTIzNTI1MjkwMzVhZjVmM2FkLi5jMzJkMjA0YjZjZDg5NjgxODFj
YjBkMWRmMGVhYjgzZWMxMTgxOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5jcHAKQEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5l
U2xvd0Nhc2UoKQogCiAgICAgd2hpbGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgfHwgIWNhblBydW5l
UXVpY2tseSgpKSB7CiAgICAgICAgIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4o
KTsKKworICAgICAgICB3cml0ZUNvZGVCbG9jaygqaXQtPnZhbHVlLmNlbGwtPnZtKCksIGl0LT5r
ZXksIGl0LT52YWx1ZSk7CisKICAgICAgICAgbV9zaXplIC09IGl0LT5rZXkubGVuZ3RoKCk7CiAg
ICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CiAgICAgfQpAQCAtNTksOSArNjIsOCBAQCBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0m
IHZtLCBFeGVjdXRhYmxlVAogICAgICAgICB2bS50eXBlUHJvZmlsZXIoKSA/IFR5cGVQcm9maWxl
ckVuYWJsZWQ6OlllcyA6IFR5cGVQcm9maWxlckVuYWJsZWQ6Ok5vLCAKICAgICAgICAgdm0uY29u
dHJvbEZsb3dQcm9maWxlcigpID8gQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENv
bnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpObywKICAgICAgICAgV1RGOjpudWxsb3B0KTsKLSAg
ICBTb3VyY2VDb2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0
ZUFnZShrZXkpOwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewot
ICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0ganNDYXN0
PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNo
ZUFuZFVwZGF0ZUFnZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkpOworICAgIGlmICh1
bmxpbmtlZENvZGVCbG9jayAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewogICAgICAgICB1
bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bGluZUNvdW50KCk7CiAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRDb2RlQmxvY2stPnN0YXJ0Q29sdW1u
KCkgKyBzb3VyY2Uuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpOwogICAgICAgICBib29sIGVu
ZENvbHVtbklzT25TdGFydExpbmUgPSAhbGluZUNvdW50OwpAQCAtNzEsOSArNzMsOSBAQCBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxDb2RlQmxvY2so
Vk0mIHZtLCBFeGVjdXRhYmxlVAogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNl
TWFwcGluZ1VSTERpcmVjdGl2ZSh1bmxpbmtlZENvZGVCbG9jay0+c291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZSgpKTsKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogICAgIH0KLSAg
ICAKKwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7Ci0gICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRD
b2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1
dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJv
ciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIHVubGlua2VkQ29k
ZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUs
IEV4ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3Jp
cHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNV
bmRlclREWik7CiAKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0aW9uczo6dXNlQ29k
ZUNhY2hlKCkpCiAgICAgICAgIG1fc291cmNlQ29kZS5hZGRDYWNoZShrZXksIFNvdXJjZUNvZGVW
YWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fc291cmNlQ29kZS5hZ2UoKSkpOwpAQCAtMTEw
LDkgKzExMiw4IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldFVu
bGlua2VkR2xvYmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2CiAgICAgICAgIHZtLnR5cGVQcm9m
aWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6
Tm8sIAogICAgICAgICB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkgPyBDb250cm9sRmxvd1Byb2Zp
bGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6Ok5vLAogICAgICAg
ICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKLSAgICBTb3VyY2VD
b2RlVmFsdWUqIGNhY2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkp
OwotICAgIGlmIChjYWNoZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewotICAgICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsKKyAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fc291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRh
dGVBZ2U8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBrZXkpOworICAgIGlmIChleGVj
dXRhYmxlICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKSB7CiAgICAgICAgIHNvdXJjZS5wcm92
aWRlcigpLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291cmNlVVJMRGlyZWN0
aXZlKCkpOwogICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZShleGVjdXRhYmxlLT5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKCkpOwogICAgICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKQEAgLTE1NSw0ICsxNTYsMTAgQEAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFi
bGUoVk0mIHYKICAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxlOwogfQogCit2b2lkIENvZGVD
YWNoZTo6d3JpdGUoVk0mIHZtKQoreworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX3NvdXJj
ZUNvZGUpCisgICAgICAgIHdyaXRlQ29kZUJsb2NrKHZtLCBpdC5rZXksIGl0LnZhbHVlKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRleCA4YTQ0
MTlmOTZjYThmYTRhNjI5YmUwZTlhNzgyN2NiYWY2OGNmZjg2Li45OTM5NWYyY2QyODQxMTM5YTAz
NWM4YjE1ODliYjkzOWM2OWM1NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJC
eXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAjaW5jbHVkZSAi
RXhlY3V0YWJsZUluZm8uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUGFy
c2VyLmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC04OSwxMyArOTEsNzYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VD
b2RlVmFsdWUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkp
CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZl
dGNoRnJvbURpc2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsK
KyNpZiBPUyhEQVJXSU4pCisgICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6
OmRpc2tDYWNoZVBhdGgoKTsKKyAgICAgICAgaWYgKCFjYWNoZVBhdGgpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICB1bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKKyAg
ICAgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgICAgICBpbnQgY291bnQgPSBzbnByaW50Zihm
aWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOworICAgICAgICBp
ZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNTEyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworICAgICAgICBp
ZiAoZmQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbnQg
cmMgPSBmbG9jayhmZCwgTE9DS19TSCB8IExPQ0tfTkIpOworICAgICAgICBpZiAocmMpIHsKKyAg
ICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CisKKyAgICAgICAgc3RydWN0IHN0YXQgc2I7CisgICAgICAgIGludCByZXMgPSBmc3RhdChm
ZCwgJnNiKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0
X3NpemUpOworICAgICAgICBpZiAocmVzIHx8ICFzaXplKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgY29uc3Qgdm9pZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXpl
LCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgICAgICAgIFVubGlua2VkQ29kZUJs
b2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2Rl
QmxvY2tUeXBlPih2bSwga2V5LCBidWZmZXIsIHNpemUpOworCisgICAgICAgIGlmICghdW5saW5r
ZWRDb2RlQmxvY2spCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhZGRD
YWNoZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIG1fYWdlKSk7
CisgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKKyNlbHNlCisgICAgICAgIFVOVVNF
RF9QQVJBTSh2bSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyNlbmRpZgorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2Vk
Q29kZUJsb2NrVHlwZT4KKyAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxVbmxp
bmtlZENvZGVCbG9jaywgVW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNf
c2FtZTxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVl
LCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPgorICAgIGZldGNoRnJvbURpc2soVk0mIHZtLCBjb25z
dCBTb3VyY2VDb2RlS2V5JiBrZXkpCisgICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5
cGUqIGNvZGVCbG9jayA9IGZldGNoRnJvbURpc2tJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT4o
dm0sIGtleSk7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgp
KSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVy
biBjb2RlQmxvY2s7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Jhc2Vfb2Y8VW5saW5rZWRDb2RlQmxvY2ssIFQ+Ojp2YWx1
ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFQqPgor
ICAgIGZldGNoRnJvbURpc2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JikgeyByZXR1cm4gbnVs
bHB0cjsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgor
ICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKFZNJiB2bSwg
Y29uc3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsKICAgICAgICAgcHJ1bmUoKTsKIAogICAg
ICAgICBpdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAo
ZmluZFJlc3VsdCA9PSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIGZldGNoRnJvbURpc2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2
bSwga2V5KTsKIAogICAgICAgICBpbnQ2NF90IGFnZSA9IG1fYWdlIC0gZmluZFJlc3VsdC0+dmFs
dWUuYWdlOwogICAgICAgICBpZiAoYWdlID4gbV9jYXBhY2l0eSkgewpAQCAtMTE1LDcgKzE4MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgZmluZFJlc3VsdC0+dmFsdWUuYWdlID0gbV9hZ2U7CiAgICAg
ICAgIG1fYWdlICs9IGtleS5sZW5ndGgoKTsKIAotICAgICAgICByZXR1cm4gJmZpbmRSZXN1bHQt
PnZhbHVlOworICAgICAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGZp
bmRSZXN1bHQtPnZhbHVlLmNlbGwuZ2V0KCkpOwogICAgIH0KIAogICAgIEFkZFJlc3VsdCBhZGRD
YWNoZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYgdmFs
dWUpCkBAIC0xOTcsNiArMjYyLDcgQEAgcHVibGljOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBTb3VyY2VDb2RlJiwgRGVidWdnZXJNb2RlLCBPcHRpb25hbDxpbnQ+
IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIFBhcnNlckVycm9yJik7
CiAKICAgICB2b2lkIGNsZWFyKCkgeyBtX3NvdXJjZUNvZGUuY2xlYXIoKTsgfQorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgd3JpdGUoVk0mKTsKIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4gCkBAIC0y
NTYsNCArMzIyLDM2IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENv
ZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhCiAgICAgcmV0dXJuIHVubGlu
a2VkQ29kZUJsb2NrOwogfQogCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29kZUJs
b2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFs
dWUmIHZhbHVlKQoreworI2lmIE9TKERBUldJTikKKyAgICBjb25zdCBjaGFyKiBjYWNoZVBhdGgg
PSBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7CisgICAgaWYgKExJS0VMWSghY2FjaGVQYXRoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpz
RHluYW1pY0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5nZXQoKSk7Cisg
ICAgaWYgKCFjb2RlQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGhhc2gg
PSBrZXkuaGFzaCgpOworICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICBpbnQgY291bnQgPSBz
bnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOwor
ICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCisgICAgICAgIHJldHVybjsKKworICAg
IHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2RlQ29k
ZUJsb2NrKHZtLCBrZXksIGNvZGVCbG9jayk7CisKKyAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1l
LCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOworICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NL
X0VYIHwgTE9DS19OQik7CisgICAgaWYgKCFyYykKKyAgICAgICAgOjp3cml0ZShmZCwgcmVzdWx0
LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKKyAgICBjbG9zZShmZCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyNlbmRpZgorfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IGNhNTMxNjM2Yjc4MWU4Njll
YTc4Zjc2ZDI1YjVlNGFlYWQ0MTYxODUuLjJiY2FhOWI2NzYyZDI1MmYwYjMxZWUxYTg5NDljZGQ4
Mzc0NjgwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmln
SW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
QEAgLTE2ODgsMTEgKzE2ODgsNiBAQCBib29sIEpTQmlnSW50OjpnZXRQcmltaXRpdmVOdW1iZXIo
RXhlY1N0YXRlKiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdQogICAgIHJldHVy
biB0cnVlOwogfQogCi1pbmxpbmUgc2l6ZV90IEpTQmlnSW50OjpvZmZzZXRPZkRhdGEoKQotewot
ICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9m
KEpTQmlnSW50KSk7Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEpTQmlnSW50
KiBKU0JpZ0ludDo6cGFyc2VJbnQoRXhlY1N0YXRlKiBleGVjLCBDaGFyVHlwZSogIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUpCiB7CkBAIC0xNzk1
LDExICsxNzkwLDYgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4
ZWMsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGwKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotaW5saW5lIEpTQmlnSW50OjpEaWdpdCogSlNCaWdJbnQ6OmRhdGFTdG9yYWdlKCkK
LXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOwotfQotCiBpbmxpbmUgSlNCaWdJbnQ6OkRp
Z2l0IEpTQmlnSW50OjpkaWdpdCh1bnNpZ25lZCBuKQogewogICAgIEFTU0VSVChuIDwgbGVuZ3Ro
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5kZXggMmIzYmY5
MzA3ZDhkYmJiMTEwNzUzM2VkODMwMzQ3YmNkZDRhNjEwYi4uZGJiZjYzZGVkMWM4Y2JkNDhlYTdi
OWZjYjViMGU4NTE1YjVmZWE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNCaWdJbnQg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1RvVGhpczsKKyAgICBmcmllbmQgY2xh
c3MgQ2FjaGVkQmlnSW50OwogCiBwdWJsaWM6CiAKQEAgLTIyOCw4ICsyMjksMTUgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoSlNCaWdJbnQqIHgp
OwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCk7Ci0gICAgRGlnaXQqIGRhdGFTdG9yYWdl
KCk7CisgICAgaW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKERpZ2l0KT4oc2l6ZW9m
KEpTQmlnSW50KSk7CisgICAgfQorCisgICAgaW5saW5lIERpZ2l0KiBkYXRhU3RvcmFnZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZEYXRhKCkpOworICAgIH0KIAogICAgIERpZ2l0
IGRpZ2l0KHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDlmYzM0ZmI5ZmFi
YzNkMDBkYjFmZDk5NzFhYTA5OTZkZmMzZDQ1ZDQuLjhiMDVjYTgyMzAwYmM3OWEyMjlhYzYwZjg2
YmI0NTY2N2VlZmRhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCkBAIC01MjQsNiArNTI0LDEyIEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9w
dGlvbnMoKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwogI2VuZGlmCisK
KyAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQorICAgICAgICBPcHRpb25zOjpkaXNr
Q2FjaGVQYXRoKCkgPSBudWxscHRyOworCisgICAgaWYgKCFPcHRpb25zOjpkaXNrQ2FjaGVQYXRo
KCkpCisgICAgICAgIE9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKIH0KIAogdm9p
ZCBPcHRpb25zOjppbml0aWFsaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAppbmRleCA0YzlmNmI2YjRlMTY5YWRjY2E4MTI0OTM0OTczMDIxMmYxMzgyMTM3Li5hZDcz
YmZkZjE4MWEyOWU0NmFjZmI3YzY4Nzc4MjQxZWIyZmZjYzU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC01MDksNiArNTA5LDggQEAgY29uc3RleHByIGJvb2wg
ZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxzZTsKICAgICB2KGJvb2wsIHRyYWNl
TExJbnRTbG93UGF0aCwgZmFsc2UsIENvbmZpZ3VyYWJsZSwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgdHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYodW5zaWduZWQsIHRocmVzaG9sZEZvckdsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIFVJ
TlRfTUFYLCBOb3JtYWwsICJUaHJlc2hvbGQgZm9yIGdsb2JhbCBsZXhpY2FsIGJpbmRpbmcgZXBv
Y2guIElmIHRoZSBlcG9jaCByZWFjaGVzIHRvIHRoaXMgdmFsdWUsIENvZGVCbG9jayBtZXRhZGF0
YSBmb3Igc2NvcGUgb3BlcmF0aW9ucyB3aWxsIGJlIHJldmlzZWQgZ2xvYmFsbHkuIEl0IG5lZWRz
IHRvIGJlIGdyZWF0ZXIgdGhhbiAxLiIpIFwKKyAgICB2KG9wdGlvblN0cmluZywgZGlza0NhY2hl
UGF0aCwgbnVsbHB0ciwgUmVzdHJpY3RlZCwgIiIpIFwKKyAgICB2KGJvb2wsIGZvcmNlRGlza0Nh
Y2hlLCBmYWxzZSwgUmVzdHJpY3RlZCwgIiIpIFwKIAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNl
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKaW5kZXggODNhYWQzNTYwMzhl
YjJlYzc2ZTZiOGJkMzdjNzQ3NmNlYzkxMzUyZS4uMDNhZGQ0NWZiNTU3MDRjZmEwMmQ2ZTVhMjNj
YjAyYzgwNDdiYmU1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKQEAg
LTQxLDYgKzQxLDggQEAgY2xhc3MgVk07CiBKU19FWFBPUlRfUFJJVkFURSBSZWdFeHBGbGFncyBy
ZWdFeHBGbGFncyhjb25zdCBTdHJpbmcmKTsKIAogY2xhc3MgUmVnRXhwIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlZ0V4cDsKKwogcHVibGljOgogICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxl
LmgKaW5kZXggNDBlN2M3ZWMyZmQ2MGI1ODQyYTU3Mjg1YWM5N2IwZjZhOTU5Mzk1ZC4uZTgxMjM0
Mjk3YjBiYjhhMDI1ODAyZjM3YTg5ODQ3MDg4YTVhZTEzNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCkBAIC0zOSw2ICsz
OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlm
aWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6
eSBsaWtlCiAvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRlZmlu
ZU93blByb3BlcnR5LgogY2xhc3MgU2NvcGVkQXJndW1lbnRzVGFibGUgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU2NvcGVkQXJndW1lbnRzVGFibGU7CisK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJ
bW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNr
RnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAppbmRl
eCBlZDk4MmUzMWY1NWJiYmM5MTYyOGQyMzQxNzgxMmJiNGY2YzY4NzExLi41ZWVkZWU2ZjgxODZk
YWVhMzA0MDk4MTNkNDUzNDZhYzA3NWVmZDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RhY2tGcmFtZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgogI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDM4MjY0NDI3MDE1NDkx
YTM0NzYzOTIzNTFlNWY1NjU2ZjZjMTAzZGUuLjRhMzBmMzdkZDc1YTYzMTUwMzc1Yjg5MWY5ZGU4
MjEwZDQ0MzNmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNo
YWluLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaApp
bmRleCA5MTU3ZDViODI5MjAwZmI2YTk2NWVhM2JjNzg2OTZlNTMyYTkyYjk1Li41OTY5MWIyZWM0
MWVjN2FlOTdhZDQwYzk4NDkwMTU2NGNmZmQ0MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD4KIC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0t
LV4KIAogc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgeworICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRT
eW1ib2xUYWJsZUVudHJ5OworCiBwcml2YXRlOgogICAgIHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zm
c2V0RnJvbUJpdHMoaW50cHRyX3QgYml0cykKICAgICB7CkBAIC00MzYsNiArNDM4LDggQEAgc3Ry
dWN0IFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxTeW1ib2xUYWJsZUVu
dHJ5PiB7CiB9OwogCiBjbGFzcyBTeW1ib2xUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewor
ICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRTeW1ib2xUYWJsZTsKKwogcHVibGljOgogICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
aAppbmRleCA3NTVjZDdhOWFhNTc2YzZmN2E0ZGIxNGMwZDllMzAyYzc4ZGI1MTc4Li5iOGJiMzY1
YjU5ZDdlYmFjNzlhYzY4OWE0NDRkYTU5MjcyM2M1MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9CaXRWZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaApAQCAtMzMs
NiArMzMsMTAgQEAKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgQ2FjaGVkQml0VmVjdG9y
OworfQorCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gVGhpcyBpcyBhIHNwYWNlLWVmZmljaWVudCwg
cmVzaXplYWJsZSBiaXR2ZWN0b3IgY2xhc3MuIEluIHRoZSBjb21tb24gY2FzZSBpdApAQCAtMzM4
LDYgKzM0Miw4IEBAIHB1YmxpYzoKICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQogICAgICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEpTQzo6Q2FjaGVkQml0VmVjdG9yOworCiAgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJ
blBvaW50ZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5NjI4YzU2
MDhjYzUyNWUzYWY2OWI4YjgyY2RlMzI1ZmIyZjgxNzViLi4yNzVmMWMxMWFiODkxZWI5NjdlYzdl
NzBiZjE3YjdiODk4NjhkMWJkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTktMDEtMjEgIFRhZGV1IFphZ2FsbG8g
IDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzawor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdCBoZWxwZXIgdG8gZXhlY3V0ZSBieXRl
Y29kZS1jYWNoZSB0ZXN0czogaXQgZXhlY3V0ZXMgZWFjaCB0ZXN0CisgICAgICAgIHR3aWNlLCB0
aGUgZmlyc3Qgd2l0aCBKU0NfZGlza0NhY2hlUGF0aCBzZXQgdG8gYSB0ZW1wb3JhcnkgZGlyZWN0
b3J5CisgICAgICAgIGFuZCBzZWNvbmQgd2l0aCBKU0NfZm9yY2VEaXNrQ2FjaGU9dHJ1ZSAoaW4g
YWRkaXRpb24gdG8gdGhlIGNhY2hlIHBhdGgpCisgICAgICAgIHRvIGd1YXJhbnRlZSB0aGF0IG9u
bHkgdGhlIGRpc2sgY2FjaGUgaXMgYmVpbmcgdXNlZCBhbmQgbm8gbmV3CisgICAgICAgIFVubGlu
a2VkQ29kZUJsb2NrcyBhcmUgYmVpbmcgY3JlYXRlZC4KKworICAgICAgICAqIFNjcmlwdHMvanNj
LXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2g6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDEtMjAg
IFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbG91dCByMjQw
MjEwOiBJdCBicm9rZSB0ZXN0cyBvbiBpT1MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvanNj
LXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2ggYi9Ub29s
cy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVs
cGVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgzZTJkNTkzMzE2MWY0N2JjYWJhZTY1MDg4ODBmYzVmN2E1YmRi
ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxw
ZXJzL2J5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworc2V0IC1lCisKK215c3lzKCkgeworICAgIHNldCAr
ZQorICAgIGV2YWwgIiQqIgorICAgIGV4aXRDb2RlPSQ/CisgICAgaWYgWyAkZXhpdENvZGUgIT0g
MCBdOyB0aGVuCisgICAgICAgIGVjaG8gIkNvbW1hbmQgJyQqJyBmYWlsZWQiCisgICAgICAgIHJl
dHVybiAkZXhpdENvZGUKKyAgICBmaQorfQorCitwYXRoVG9WTT0kMQorc2hpZnQKK2lucHV0Rmls
ZT0kMQorc2hpZnQKK2V4dHJhT3B0aW9ucz0oICIkQCIgKQorZGlza0NhY2hlUGF0aD0kKG1rdGVt
cCAtZCAtdCAiYnl0ZWNvZGUtY2FjaGUiKQorCitfdHJhcF9leGl0KCkgeyBybSAtcmYgIiRkaXNr
Q2FjaGVQYXRoIjsgfQordHJhcCBfdHJhcF9leGl0IEVYSVQKKworZXhwb3J0IEpTQ19kaXNrQ2Fj
aGVQYXRoPSRkaXNrQ2FjaGVQYXRoCitteXN5cyAiJHBhdGhUb1ZNIiAiJGlucHV0RmlsZSIgIiR7
ZXh0cmFPcHRpb25zW0BdfSIKK2V4cG9ydCBKU0NfZm9yY2VEaXNrQ2FjaGU9dHJ1ZQorbXlzeXMg
IiRwYXRoVG9WTSIgIiRpbnB1dEZpbGUiICIke2V4dHJhT3B0aW9uc1tAXX0iCisKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IDk0OWUzZjViNTUyMDExYjUxYWQyMmRmM2VhMGI1YWJl
MzZiMzBhZDkuLjEwYjc2ZTFjZTNiNmM2ODM1OTg1YTU3OTgwMGI5MmUwM2I3MmNkMDEgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNjU1LDYgKzY1NSwxNSBAQCBkZWYgcnVuRGVm
YXVsdCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIHJ1bigiZGVmYXVsdCIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKK2RlZiBy
dW5CeXRlY29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCisgICAgdW5sZXNz
ICRob3N0T1MgPT0gImRhcndpbiIKKyAgICAgICAgc2tpcAorICAgICAgICByZXR1cm4KKyAgICBl
bmQKKyAgICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0
aW9ucyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zCisgICAgYWRk
UnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0
ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBwYXRoVG9WTS50b19zLCAkYmVuY2ht
YXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5k
bGVyKQorZW5kCisKIGRlZiBydW5CaWdJbnRFbmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpCiAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQwMzMxMTIxPgogICAgIGlmICRy
ZW1vdGUgb3IgKCRhcmNoaXRlY3R1cmUgIX4gL3g4Ni9pIGFuZCAkaG9zdE9TID09ICJkYXJ3aW4i
KQpAQCAtNzUxLDYgKzc2MCw3IEBAIGRlZiBkZWZhdWx0UnVuCiAgICAgICAgIGRlZmF1bHRRdWlj
a1J1bgogICAgIGVsc2UKICAgICAgICAgcnVuRGVmYXVsdAorICAgICAgICBydW5CeXRlY29kZUNh
Y2hlCiAgICAgICAgIGlmICRqaXRUZXN0cwogICAgICAgICAgICAgcnVuTm9MTEludAogICAgICAg
ICAgICAgcnVuTm9DSklUVmFsaWRhdGVQaGFzZXMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359741</attachid>
            <date>2019-01-22 09:30:16 -0800</date>
            <delta_ts>2019-01-22 10:00:21 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-192782-20190122182957.patch</filename>
            <type>text/plain</type>
            <size>136622</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YTc5ZGY0MThhMmViNWZmZmJjYzRhMGU0ZDBmNTRiMDU0MzhlMDdjLi4xZjMxYzQyNmJmNGViZjU4
ZjlmNTBkYTNlNjc2NWUwNTcyNDdlYjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNTkgQEAKKzIwMTktMDEtMjEgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ2FjaGUgYnl0ZWNvZGUgdG8gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNzgyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS80NjA4NDkzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIuCisKKyAg
ICAgICAgQWRkIHRoZSBsb2dpYyB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIHRoZSBuZXcg
SlNDIGJ5dGVjb2RlLiBGb3Igbm93LAorICAgICAgICB0aGUgY2FjaGUgaXMgb25seSB1c2VkIGZv
ciB0ZXN0cy4KKworICAgICAgICBFYWNoIGNsYXNzIHRoYXQgY2FuIGJlIHNlcmlhbGl6ZWQgaGFz
IGEgY291bnRlcnBhcnQgaW4gQ2FjaGVkVHlwZXMsIHdoaWNoCisgICAgICAgIGhhbmRsZXMgdGhl
IGRlY29kaW5nIGFuZCBlbmNvZGluZy4gV2hlbiBkZWNvZGluZywgdGhlIGNhY2hlZCBvYmplY3Rz
IGFyZQorICAgICAgICBtbWFwJ2QgZnJvbSBkaXNrLCBidXQgb25seSB1c2VkIGZvciBjcmVhdGlu
ZyBpbnN0YW5jZXMgb2YgdGhlIHJlc3BlY3RpdmUKKyAgICAgICAgaW4tbWVtb3J5IHZlcnNpb24g
b2YgZWFjaCBvYmplY3QuIElkZWFsbHksIHRoZSBtbWFwJ2Qgb2JqZWN0cyBzaG91bGQgYmUKKyAg
ICAgICAgdXNlZCBhdCBydW50aW1lIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5O
YW1lcy5jcHA6CisgICAgICAgIChKU0M6OkJ1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKToKKyAg
ICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmll
clNldFJlZ2lzdGVycyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRIYW5kbGVy
SW5mbzo6VW5saW5rZWRIYW5kbGVySW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b25TdHJlYW0uaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU2V0Q29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlmaWVyU2V0cyk6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxD
b2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRHbG9iYWxDb2RlQmxvY2s6OlVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRh
VGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICoganNjLmNwcDoK
KyAgICAgICAgKGZ1bmN0aW9uUXVpdCk6CisgICAgICAgIChydW5KU0MpOgorICAgICAgICAqIHBh
cnNlci9Tb3VyY2VDb2RlLmg6CisgICAgICAgICogcGFyc2VyL1NvdXJjZUNvZGVLZXkuaDoKKyAg
ICAgICAgKEpTQzo6U291cmNlQ29kZUtleTo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICog
cGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oOgorICAgICAgICAqIHBhcnNlci9WYXJpYWJsZUVu
dmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpFbmNvZGVyOjpBbGxvY2F0aW9uOjpidWZmZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpFbmNvZGVyOjpBbGxvY2F0aW9uOjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlND
OjpFbmNvZGVyOjpBbGxvY2F0aW9uOjpBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6RW5jb2Rl
cjo6RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnZtKToKKyAgICAgICAgKEpTQzo6
RW5jb2Rlcjo6bWFsbG9jKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6b2Zmc2V0T2YpOgorICAg
ICAgICAoSlNDOjpFbmNvZGVyOjpjYWNoZVB0cik6CisgICAgICAgIChKU0M6OkVuY29kZXI6Om9m
ZnNldEZvclB0cik6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnJlbGVhc2UpOgorICAgICAgICAo
SlNDOjpFbmNvZGVyOjpQYWdlOjpQYWdlKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6UGFnZTo6
bWFsbG9jKToKKyAgICAgICAgKEpTQzo6RW5jb2Rlcjo6UGFnZTo6YnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6RW5jb2Rlcjo6UGFnZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkVu
Y29kZXI6OlBhZ2U6OmdldE9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkVuY29kZXI6OmFs
bG9jYXRlTmV3UGFnZSk6CisgICAgICAgIChKU0M6OkRlY29kZXI6OkRlY29kZXIpOgorICAgICAg
ICAoSlNDOjpEZWNvZGVyOjp+RGVjb2Rlcik6CisgICAgICAgIChKU0M6OkRlY29kZXI6OnZtKToK
KyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpEZWNvZGVy
OjpjYWNoZU9mZnNldCk6CisgICAgICAgIChKU0M6OkRlY29kZXI6OmFkZEZpbmFsaXplcik6Cisg
ICAgICAgIChKU0M6OmVuY29kZSk6CisgICAgICAgIChKU0M6OmRlY29kZSk6CisgICAgICAgIChK
U0M6OlZhcmlhYmxlTGVuZ3RoT2JqZWN0OjpidWZmZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpW
YXJpYWJsZUxlbmd0aE9iamVjdDo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQdHI6
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFB0cjo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkUHRyOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkUHRyOjpnZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWZQdHI6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZFJlZlB0cjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkV3JpdGVCYXJyaWVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRXcml0
ZUJhcnJpZXI6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFZlY3Rvcjo6ZW5j
b2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRQYWlyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRQYWlyOjpk
ZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRIYXNoTWFwOjplbmNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRIYXNoTWFwOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRVbmlxdWVkU3RyaW5nSW1wbDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5p
cXVlZFN0cmluZ0ltcGw6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmlu
Z0ltcGw6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0ltcGw6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZzo6ZW5jb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkU3RyaW5nOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRJZGVu
dGlmaWVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRJZGVudGlmaWVyOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRPcHRpb25hbDo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkT3B0aW9uYWw6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZE9wdGlvbmFsOjpkZWNvZGVBc1B0ciBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNpbXBs
ZUp1bXBUYWJsZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2ltcGxlSnVtcFRhYmxl
OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJpbmdKdW1wVGFibGU6OmVu
Y29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFN0cmluZ0p1bXBUYWJsZTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrUmFyZURhdGE6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvZGVCbG9ja1JhcmVEYXRhOjpkZWNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRCaXRWZWN0b3I6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEJp
dFZlY3Rvcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaFNldDo6ZW5j
b2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSGFzaFNldDo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5OjpkZWNvZGUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50OjplbmNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50OjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRBcnJheTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQXJy
YXk6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFyZ3VtZW50c1Rh
YmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZTo6
ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3ltYm9sVGFibGVFbnRyeTo6ZW5j
b2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3ltYm9sVGFibGVFbnRyeTo6ZGVjb2RlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkU3ltYm9sVGFibGU6OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlZFN5bWJvbFRhYmxlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRJbW11dGFibGVCdXR0ZXJmbHk6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEltbXV0
YWJsZUJ1dHRlcmZseTo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVnRXhw
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWdFeHA6OmRlY29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6ZW5jb2RlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpkZWNvZGUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNh
Y2hlZEJpZ0ludDo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSlNWYWx1ZTo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkSlNWYWx1ZTo6ZGVjb2RlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW06OmVuY29kZSk6CisgICAgICAgIChK
U0M6OkNhY2hlZEluc3RydWN0aW9uU3RyZWFtOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRNZXRhZGF0YVRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRNZXRh
ZGF0YVRhYmxlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VPcmln
aW46OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZU9yaWdpbjo6ZGVjb2RlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVGV4dFBvc2l0aW9uOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRUZXh0UG9zaXRpb246OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFNvdXJjZVByb3ZpZGVyU2hhcGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFN0cmluZ1NvdXJjZVByb3ZpZGVyOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTdHJp
bmdTb3VyY2VQcm92aWRlcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkV2Vi
QXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkV2Vi
QXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkU291cmNlUHJvdmlkZXI6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZVBy
b3ZpZGVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmxpbmtlZFNvdXJj
ZUNvZGVTaGFwZTo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5saW5rZWRTb3VyY2VD
b2RlU2hhcGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGU6
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNvdXJjZUNvZGU6OmRlY29kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Zmlyc3RMaW5lT2Zmc2V0
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5lQ291
bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlu
a2VkRnVuY3Rpb25OYW1lU3RhcnQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OnVubGlua2VkQm9keVN0YXJ0Q29sdW1uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZEJvZHlFbmRDb2x1bW4gY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnN0YXJ0T2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpzb3VyY2VMZW5n
dGggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFt
ZXRlcnNTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjp0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbWV0ZXJDb3VudCBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmVhdHVyZXMg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNvdXJjZVBh
cnNlTW9kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
aXNJblN0cmljdENvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4
ZWN1dGFibGU6Omhhc0NhcHR1cmVkVmFyaWFibGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkRnVuY3Rpb25FeGVjdXRhYmxlOjppc0J1aWx0aW5GdW5jdGlvbiBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNCdWlsdGluRGVmYXVsdENsYXNzQ29u
c3RydWN0b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbnN0cnVjdEFiaWxpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbnN0cnVjdG9yS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZnVuY3Rpb25Nb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpzY3JpcHRNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpzdXBlckJpbmRpbmcgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlcml2ZWRDb250ZXh0VHlwZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bmFtZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZWNtYU5hbWUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmluZmVycmVkTmFtZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjp0aGlzUmVnaXN0ZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNjb3BlUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6Omdsb2JhbE9iamVjdFJlZ2lzdGVyIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpzb3VyY2VVUkxEaXJlY3RpdmUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OnVzZXNFdmFsIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc1N0cmljdE1vZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmlzQ29uc3RydWN0b3IgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6Omhhc0NhcHR1cmVkVmFyaWFibGVzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc0J1aWx0aW5GdW5jdGlvbiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6c3VwZXJCaW5kaW5nIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpzY3JpcHRNb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkQ29kZUJsb2NrOjppc0Fycm93RnVuY3Rpb25Db250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjppc0NsYXNzQ29udGV4dCBjb25zdCk6CisgICAgICAg
IChKU0M6OkNhY2hlZENvZGVCbG9jazo6d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6Y29uc3RydWN0b3JLaW5kIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpkZXJpdmVkQ29udGV4dFR5cGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmV2YWxDb250ZXh0VHlwZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzVGFpbENhbGxzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpsaW5lQ291bnQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6OmVuZENvbHVtbiBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVmFycyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hl
ZENvZGVCbG9jazo6bnVtQ2FsbGVlTG9jYWxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Q29kZUJsb2NrOjpudW1QYXJhbWV0ZXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29k
ZUJsb2NrOjpmZWF0dXJlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6
cGFyc2VNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpjb2RlVHlw
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6cmFyZURhdGEgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOjplbmNvZGUpOgorICAgICAg
ICAoSlNDOjpDYWNoZWRQcm9ncmFtQ29kZUJsb2NrOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRNb2R1bGVDb2RlQmxvY2s6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hl
ZE1vZHVsZUNvZGVCbG9jazo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRXZh
bENvZGVCbG9jazo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRXZhbENvZGVCbG9jazo6
ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s6OmVu
Y29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOjpkZWNvZGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5
cGU+OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2s6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jazo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+Ojpl
bmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlS2V5OjplbmNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRTb3VyY2VDb2RlS2V5OjpkZWNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZUVudHJ5OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpDYWNoZUVudHJ5OjogY29u
c3QpOgorICAgICAgICAoSlNDOjogY29uc3QpOgorICAgICAgICAoSlNDOjplbmNvZGVDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpkZWNvZGVDb2RlQmxvY2tJbXBsKToKKyAgICAgICAgKiBydW50
aW1lL0NhY2hlZFR5cGVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oLgorICAgICAgICAoSlNDOjpkZWNvZGVDb2Rl
QmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUNhY2hlTWFwOjpwcnVuZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpn
ZXRVbmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0
VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQ2Fj
aGU6OndyaXRlKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5oOgorICAgICAgICAoSlND
OjpDb2RlQ2FjaGVNYXA6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlTWFwOjplbmQp
OgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmZldGNoRnJvbURpc2tJbXBsKToKKyAgICAg
ICAgKEpTQzo6Q29kZUNhY2hlTWFwOjpmaW5kQ2FjaGVBbmRVcGRhdGVBZ2UpOgorICAgICAgICAo
SlNDOjp3cml0ZUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9KU0JpZ0ludC5jcHA6Cisg
ICAgICAgICogcnVudGltZS9KU0JpZ0ludC5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAq
IHJ1bnRpbWUvUmVnRXhwLmg6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5oOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKwog
MjAxOS0wMS0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGwgb3V0IHIyNDAyMjAgZHVlIHRvIGRhdGUtZm9ybWF0LXhwYXJiIHJl
Z3Jlc3Npb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKaW5kZXggNTc3MTRlMTMxYjVkMzUwMzcxOTBhZDAwOGU2MjhmYWY2ZDE4OGUxZS4u
YTNmMjNjYWM1ZTBjYWI2OTFmZDk4YTg0NGI0NjQzY2ZhMGExMzQyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAxOS0wMS0yMSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDYWNoZSBieXRlY29kZSB0byBkaXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2
MDg0OTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICBC
aXRWZWN0b3JzIGhhdmUgdG8gYmUgZnJpZW5kcyB3aXRoIEpTQzo6Q2FjaGVCaXRWZWN0b3IgdG8g
YWxsb3cKKyAgICAgICAgc2VyaWFsaXppbmcgaXRzIGJ1ZmZlciBhcyBwYXJ0IG9mIHRoZSBieXRl
Y29kZSBjYWNoZSBlbmNvZGluZy4KKworICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKwogMjAx
OS0wMS0yMSAgQ2xhdWRpbyBTYWF2ZWRyYSAgPGNzYWF2ZWRyYUBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtHVEtdIFNwZWN1bGF0aXZlIGJ1aWxkIGZpeCBmb3IgVWJ1bnR1IExUUwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDZhY2RmYjEzNDI2NDY1YmM0OGJmMWQ3YTVkYjc3
NzVmMzg0OWE1OWQuLmVhODU4YjE2ODI0OWExYzEyZDNiMTFjNjAzNTFkYTI4N2RkMGM0NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTgzMyw2ICs4MzMsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAog
ICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmgKKyAgICBydW50aW1lL0pTSW1tdXRh
YmxlQnV0dGVyZmx5LmgKICAgICBydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmgKICAgICBydW50
aW1lL0pTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaAogICAgIHJ1bnRpbWUvSlNNaWNyb3Rhc2su
aApAQCAtODQ4LDYgKzg0OSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgcnVudGltZS9KU1Byb21pc2UuaAogICAgIHJ1bnRpbWUvSlNQcm9taXNl
Q29uc3RydWN0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAorICAgIHJ1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKICAgICBydW50aW1lL0pTUHJveHkuaAogICAg
IHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuaAogICAgIHJ1bnRpbWUvSlNTY29wZS5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNlNzQ0ZGJlODQ1Zjg4ZDEwZWM0ODk4ZDI4NmYyNDBm
YWNmMzI5MGMuLjg1MmNjMDRlOTQwM2Q5NTA2NTMwZTYxOWM3ZjYxODcxMTlhZGRhY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04MjYsNyArODI2LDcgQEAKIAkJMjYyRDg1Qjcx
QzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYyRDg1QjUxQzBENjUwRjAw
NkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovOyB9OwogCQkyNjg0RDQz
ODFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJM
aXZlbmVzcy5oICovOyB9OwogCQkyNjlENjM2RTFCRkJFNUQxMDAxMDFCMUQgLyogRlRMT3V0cHV0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjlENjM2
RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggKi87IH07Ci0JCTJBMDVBQkQ2MTk2MURG
MjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAv
KiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLzsgfTsKKwkJMkEwNUFCRDYxOTYxREYyNDAw
MzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0
ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBMTExMjQ0MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTQ4RDE5MTE3NzIz
NjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1NzQxNzZBMjI0RDAwMEUyQTIzIC8qIEFQ
SUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKIAkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBNEJCN0YyMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1
ZUludGVybmFsLmggKi87IH07CkBAIC0xMDYyLDcgKzEwNjIsNyBAQAogCQk1M0VBRkUyRjIwOERG
QUI0MDA3RDUyNEIgLyogdGVzdGFwaS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzFENEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFwaS5jcHAg
Ki87IH07CiAJCTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRTAxQjUyMThGNjkwRjAw
QUQxRjhEIC8qIEpTU2NyaXB0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTNFRTAxQjgyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUUw
MUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggKi87IH07Ci0JCTUzRjEx
RjQxMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGMTFGNDAyMDkxMzhENzAwRTQx
MUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi87IH07CisJCTUzRjExRjQxMjA5MTM4RDcw
MEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1t
dXRhYmxlQnV0dGVyZmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFODQxRDU4
Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovOyB9OwogCQk1M0Y0MEU4QjFENTkwMUJC
MDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1
bmN0aW9uUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNt
UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovOyB9OwpAQCAtMzEyOCw2
ICszMTI4LDcgQEAKIAkJMTQzODZBNzMxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVj
dXRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdEV2YWxFeGVj
dXRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Mzg2QTc2MURENjk4OUMw
MDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDM4NkE3NzFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RF
dmFsRXhlY3V0YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRpcmVj
dEV2YWxFeGVjdXRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0M0JFMjY1
MjFDODU3NzcwMDIwQ0QxNyAvKiBDYWNoZWRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYWNoZWRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDQwMDUxRjBBNTMxRDNCMDAwNUYwNjEgLyogTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBOb2RlLmg7IHBhdGggPSB0ZXN0cy9Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0NDAwNTIwMEE1MzFEM0IwMDA1RjA2MSAvKiBOb2RlLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IE5vZGUuYzsgcGF0aCA9IHRlc3RzL05vZGUuYzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MDA3NDgwQTUzNkNDMjAwMDVGMDYxIC8qIE5v
ZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5vZGVMaXN0Lmg7IHBh
dGggPSB0ZXN0cy9Ob2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI0
Miw2ICszMjQzLDcgQEAKIAkJMTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSB0ZXN0YXBpLmpzOyBwYXRo
ID0gQVBJL3Rlc3RzL3Rlc3RhcGkuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0xleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
NERBRkE0NTIxRTNCODcxMDA0QjY4RjcgLyogQ2FjaGVkVHlwZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNERFMEQ2ODBEMDI0MzE0MDBBQUNDQTIgLyogSlNHbG9iYWxPYmplY3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9
IEpTR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNw
ZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5jcHA7IH07CiAJCTE0REYwNEQ5MTZC
Mzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY1Byb3BlcnR5QW5hbHlzaXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTRFODRGOTkxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrQmxvY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjYwMCw2ICs2NjAyLDggQEAKIAkJCQk5RTcy
OTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5tbSAqLywKIAkJCQkwRkI3RjM4QjE1
RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCiAJCQkJMEZCN0YzOEMxNUVEOEUzODAw
RjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCAqLywKKwkJCQkxNERBRkE0NTIxRTNCODcxMDA0
QjY4RjcgLyogQ2FjaGVkVHlwZXMuY3BwICovLAorCQkJCTE0M0JFMjY1MjFDODU3NzcwMDIwQ0Qx
NyAvKiBDYWNoZWRUeXBlcy5oICovLAogCQkJCTBGRUMzQzVGMUYzNzlGNTMwMEY1OUI2QyAvKiBD
YWdlZEJhcnJpZXJQdHIuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2Fs
bERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5o
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDk0OWVkY2FhNWI1MzhiODU4YWRj
MzRjMTEyNGRjNmMxZWRkNjIyNTUuLjI1OGQ0OWNlZDFlMmQ1OWRkYmRmMTQ3ZjRhY2IxODk0OTM4
ZGJhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTcxMyw2ICs3MTMsNyBAQCBy
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAK
IHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvQ2FsbERhdGEuY3BwCitydW50
aW1lL0NhY2hlZFR5cGVzLmNwcAogcnVudGltZS9DYXRjaFNjb3BlLmNwcAogcnVudGltZS9DbGFz
c0luZm8uY3BwCiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKaW5kZXggNDVkZTgyZTdjYjU4YTI4
M2IyMGZjYWU1OTgyYmJiNWMwNGRhOTE3NS4uYTBmODUzYTZlMDVkYzQ2MThmZjA0ZGU1OTAxOWIx
ZWExM2Q2YjM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1
aWx0aW5OYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5jcHAKQEAgLTYzLDYgKzYzLDcgQEAgQnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMo
Vk0qIHZtLCBDb21tb25JZGVudGlmaWVycyogY29tbW9uSWRlbnRpZmllcnMpCiAgICAgSlNDX0NP
TU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX1BS
SVZBVEVfVE9fUFVCTElDX0VOVFJZKQogICAgIEpTQ19GT1JFQUNIX0JVSUxUSU5fRlVOQ1RJT05f
TkFNRShJTklUSUFMSVpFX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKQogICAgIEpTQ19DT01NT05f
UFJJVkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUoSU5JVElBTElaRV9QVUJMSUNf
VE9fUFJJVkFURV9FTlRSWSkKKyAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFD
SF9XRUxMX0tOT1dOX1NZTUJPTChJTklUSUFMSVpFX1NZTUJPTF9QUklWQVRFX1RPX1BVQkxJQ19F
TlRSWSkKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9XRUxMX0tOT1dO
X1NZTUJPTChJTklUSUFMSVpFX1NZTUJPTF9QVUJMSUNfVE9fUFJJVkFURV9FTlRSWSkKICAgICBt
X3ByaXZhdGVUb1B1YmxpY01hcC5hZGQobV9kb2xsYXJWTVByaXZhdGVOYW1lLmltcGwoKSwgJm1f
ZG9sbGFyVk1OYW1lKTsKICAgICBtX3B1YmxpY1RvUHJpdmF0ZU1hcC5hZGQobV9kb2xsYXJWTU5h
bWUuaW1wbCgpLCAmbV9kb2xsYXJWTVByaXZhdGVOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAppbmRleCBmNjZiOGNiNTFlYjQwMmQ4NzM2ZmQ3
ZGQwZDJkMGU3YTI5MmY0NTEyLi44NTMxZGIyNjBiZDA3MDFiMzcxOTAxYjY3NGJmZjVkZjBiZmJk
ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5h
bWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5o
CkBAIC0yMTMsNiArMjEzLDcgQEAgZXh0ZXJuIFN5bWJvbEltcGw6OlN0YXRpY1N5bWJvbEltcGwg
cG9seVByb3RvUHJpdmF0ZU5hbWU7CiAvLyBXZSBjb21tYW5kZWVyIHRoZSBwdWJsaWNUb1ByaXZh
dGVNYXAgdG8gYWxsb3cgdXMgdG8gY29udmVydCBwcml2YXRlIHN5bWJvbCBuYW1lcyBpbnRvIHRo
ZSBhcHByb3ByaWF0ZSBzeW1ib2wuCiAvLyBlLmcuIEBpdGVyYXRvclN5bWJvbCBwb2ludHMgdG8g
U3ltYm9sLml0ZXJhdG9yIGluIHRoaXMgbWFwIHJhdGhlciB0aGFuIHRvIGEgYW4gYWN0dWFsIHBy
aXZhdGUgbmFtZS4KIC8vIEZJWE1FOiBUaGlzIGlzIGEgd2VpcmQgaGFjayBhbmQgd2Ugc2hvdWxk
bid0IG5lZWQgdG8gZG8gdGhpcy4KKyNkZWZpbmUgSU5JVElBTElaRV9TWU1CT0xfUFJJVkFURV9U
T19QVUJMSUNfRU5UUlkobmFtZSkgbV9wcml2YXRlVG9QdWJsaWNNYXAuYWRkKG1fIyNuYW1lIyNT
eW1ib2wuaW1wbCgpLCAmbV8jI25hbWUjI1N5bWJvbFByaXZhdGVJZGVudGlmaWVyKTsKICNkZWZp
bmUgSU5JVElBTElaRV9TWU1CT0xfUFVCTElDX1RPX1BSSVZBVEVfRU5UUlkobmFtZSkgbV9wdWJs
aWNUb1ByaXZhdGVNYXAuYWRkKG1fIyNuYW1lIyNTeW1ib2xQcml2YXRlSWRlbnRpZmllci5pbXBs
KCksICZtXyMjbmFtZSMjU3ltYm9sKTsKIAogY2xhc3MgQnVpbHRpbk5hbWVzIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggMGM2MzQ1Njg2ZmEx
ZTUzZDUzYzQ5MzM4NTk3ZTdjMWUzNTU1ZTIxYy4uMWI1ZDIyMmVmZDUwNTI4NzliMzE2YzFkMGVh
ZDUzOTA3MjIxNDQzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKQEAgLTg2OSw3ICs4NjksNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50
aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJbmRlbnRpZmll
clNldEVudHJ5PiYgY29uc3RhbnRzKQordm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRp
ZmllclNldFJlZ2lzdGVycyhWTSYgdm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJT
ZXRFbnRyeT4mIGNvbnN0YW50cykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmlu
ZGV4IGE2OTI2ZmRmOTdlYjRlNmM2ZmNkMGViMjc2ZjgwNTMxOWJhMGJmZTQuLmM3NDhmYzA3YzI3
MTEzODlmMjcwMzQ1NGMyMjZlNWM3Y2I4MWMwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTg5MCw3ICs4OTAsNyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJl
ck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMpOwogCi0gICAgdm9pZCBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3Rl
cnMoVk0mLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5PiYgY29uc3Rh
bnRzKTsKKyAgICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNv
bnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7CiAKICAg
ICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+
JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCmluZGV4IDY2YzNiNzY4Nzc1NjIwNzc2ZDI2
M2ZmMDk4ZGU2ZjQ2YjY2ZTc3ODMuLjdmNDY1ZDJhZTkzNzk5YjkxZGY3ODcxNDE5NGZjYTM0YmQy
YTFhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVy
SW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
CkBAIC04OSw2ICs4OSwxMCBAQCBzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKIH07CiAKIHN0cnVj
dCBVbmxpbmtlZEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJbmZvQmFzZSB7CisgICAgVW5s
aW5rZWRIYW5kbGVySW5mbygpCisgICAgeworICAgIH0KKwogICAgIFVubGlua2VkSGFuZGxlcklu
Zm8odWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwgdWludDMyX3QgdGFyZ2V0LCBIYW5kbGVy
VHlwZSBoYW5kbGVyVHlwZSkKICAgICB7CiAgICAgICAgIHRoaXMtPnN0YXJ0ID0gc3RhcnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJl
YW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5o
CmluZGV4IDcwZWRlM2U0MWM1ZDVjNDg5ZDc5NmZjZmMwYzFjY2Q5OThkMjllZDUuLmI0MDQ4MGE1
ZTc5NThkZjBhNDE3ZmYxMjIwMGNkOTU1ZWQwMDJhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCkBAIC0zOSw2ICszOSw3IEBA
IGNsYXNzIEluc3RydWN0aW9uU3RyZWFtIHsKICAgICB1c2luZyBJbnN0cnVjdGlvbkJ1ZmZlciA9
IFZlY3Rvcjx1aW50OF90LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz47CiAKICAgICBmcmllbmQg
Y2xhc3MgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXI7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZElu
c3RydWN0aW9uU3RyZWFtOwogcHVibGljOgogICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCmluZGV4IGYwZTlkNjRjODU0YTNmNTM2NzUyZDQ4NzQ2OTJkMjc4NzdkNjcwNDkuLjE0
OGE1MzUyMWZhNzYyYzI1N2E2NTJiYmUzZDNjMTI4NGI2Njg2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC02NSwxMiAr
NjUsMTUgQEAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOworCiB0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtl
ZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Q
cm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcgQ29u
c3RhbnRJbmRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2ln
bmVkPjsKK3VzaW5nIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5ID0gc3RkOjpwYWlyPElkZW50
aWZpZXJTZXQsIHVuc2lnbmVkPjsKIAogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsK
ICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAg
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigp
KTsKICAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBtX2NvbnN0YW50SWRlbnRp
ZmllclNldHMuYXBwZW5kKENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkp
OworICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRp
ZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWRkQ29u
c3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJl
c2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKQEAgLTIwMiw3ICsy
MDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4
XTsKICAgICB9CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0
IFZlY3RvcjxDb25zdGFudEluZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJT
ZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CisgICAgY29uc3QgVmVj
dG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygp
IHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQogICAgIGNvbnN0IFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07
IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsg
fQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleF0uZ2V0KCk7IH0KQEAgLTM2Nyw2ICszNzAsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0
ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3RydWN0
dXJlKiwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+Jik7CisKICAgICB+VW5s
aW5rZWRDb2RlQmxvY2soKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAt
Mzc4LDYgKzM4NSw5IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0
ZXI7CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yOwogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQ29kZUJsb2Nr
OworCiAgICAgdm9pZCBhcHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiwgSW5zdHJ1
Y3Rpb25TdHJlYW1Xcml0ZXImKTsKIAogICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpCkBAIC00NDQsNyArNDU0LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8SWRlbnRpZmllcj4g
bV9pZGVudGlmaWVyczsKICAgICBWZWN0b3I8Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7CiAgICAg
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKLSAgICBW
ZWN0b3I8Q29uc3RhbnRJbmRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNl
dHM7CisgICAgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRl
bnRpZmllclNldHM7CiAgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CiAgICAgdHlwZWRlZiBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPj4gRnVuY3Rpb25FeHByZXNzaW9uVmVj
dG9yOwogICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRGVjbHM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmgKaW5kZXggOTk4N2I0MzEzMzQzYjZjYjc1MmE0MjBiMzU4ZDlhMzYwMzE3MmYyNi4uMmYz
MjM3OWEwMWY0MzVjM2QwMThkZjY1MTkzNWEyZTJiMDNjZDAxZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaApAQCAt
MjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FjaGVkRXZhbENvZGVC
bG9jazsKKwogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrIEJhc2U7CkBAIC01OSwxMSArNjEsMTUgQEAgcHVibGljOgogICAgICAgICBtX2Z1
bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGVzID0gV1RGTW92ZShmdW5jdGlvbkhvaXN0aW5nQ2FuZGlk
YXRlcyk7CiAgICAgfQogcHJpdmF0ZToKKyAgICBmcmllbmQgQ2FjaGVkRXZhbENvZGVCbG9jazsK
KwogICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkK
ICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1v
ZGUpCiAgICAgewogICAgIH0KIAorICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhEZWNvZGVyJiwg
Y29uc3QgQ2FjaGVkRXZhbENvZGVCbG9jayYpOworCiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8SWRlbnRpZmll
ciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGI1NDgyYjY1YzhiOGVmYjNhYTMwNmE0MTNiZDU0
NjAzNDkxYTkwMTMuLjY1YWFmYzg4ZTU5N2NiMjBmNDlmZDMyNzJiZGUxNWExMGRjYmRkNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorY2xhc3MgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewogcHVibGljOgog
ICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKQEAgLTQ0LDEwICs0NiwxNCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKKyAg
ICBmcmllbmQgQ2FjaGVkRnVuY3Rpb25Db2RlQmxvY2s7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBl
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkK
ICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1v
ZGUpCiAgICAgewogICAgIH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2Rl
ciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrJik7CiAgICAgCiBwdWJsaWM6CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXgg
NTI2ODk4Yzk1MWQ4MjE3NTk3OTg4MTEwMmY5ZGM3ZDYxNWIwMTUyMi4uNjUyNmNkOTBjYmJhYTY5
ZTI2Y2MwYTFjMGFjNzdiNjhjMTk1ZmI1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTM5
LDExICszOSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVjb2RlcjsKIGNsYXNz
IEZ1bmN0aW9uTWV0YWRhdGFOb2RlOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3Mg
UGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s7CitjbGFzcyBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAKIGVudW0gVW5s
aW5rZWRGdW5jdGlvbktpbmQgewogICAgIFVubGlua2VkTm9ybWFsRnVuY3Rpb24sCkBAIC01NCw2
ICs1Niw3IEBAIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKICAgICBmcmll
bmQgY2xhc3MgVk07CisgICAgZnJpZW5kIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIAogICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwpAQCAt
MTQ3LDYgKzE1MCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZShWTSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1l
dGFkYXRhTm9kZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1Bh
cnNlclNjcmlwdE1vZGUsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCAgSlNDOjpEZXJpdmVkQ29udGV4
dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOworICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBWYXJpYWJsZUVudmlyb25tZW50JiwgY29u
c3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGlu
ZU9mZnNldDsKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKaW5kZXgg
MzQzODYyZTY0NzBmZTFiMWE0MjQ4NWQ4NzY5ZTI3N2Q3MmMxNTA4ZS4uM2QwNDJlZjQ4NmM3ZDEy
Y2FmMGQzMmQ2MDJlMTZmYjIxMmY2ZTA3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKQEAgLTM4LDYgKzM4
LDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBl
LCBpbmZvLCBkZWJ1Z2dlck1vZGUpCiAgICAgewogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CisgICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soRGVjb2RlciYg
ZGVjb2RlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2Rl
QmxvY2tUeXBlPiYgY2FjaGVkQ29kZUJsb2NrKQorICAgICAgICA6IEJhc2UoZGVjb2Rlciwgc3Ry
dWN0dXJlLCBjYWNoZWRDb2RlQmxvY2spCisgICAgeworICAgIH0KIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUu
aAppbmRleCAzZTNlOGRmYjRkNWJiYzQ2NGY1ZTZhMjM0NGNhYWNhOTk0OTQ5ZWYxLi5mOTQ3MDdl
M2IxODVkNzcxNmI0MTZhNDkzM2VjYTZjOTUxYTRkNWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCkBAIC0zNSw2
ICszNSw3IEBAIGNsYXNzIE1ldGFkYXRhVGFibGU7CiBjbGFzcyBVbmxpbmtlZE1ldGFkYXRhVGFi
bGUgewogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5k
IGNsYXNzIE1ldGFkYXRhVGFibGU7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZE1ldGFkYXRhVGFi
bGU7CiAKIHB1YmxpYzoKICAgICBzdHJ1Y3QgTGlua2luZ0RhdGEgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oCmluZGV4IDBlOWM1ZjViZGRlNmM3NTYyYjY2YTAzYmMwYTk4Yzg3YWRiZDkz
MDIuLjM5MzNiZmQzZTNhZTI0ZTZmNjRmNWUwYTlkOWQxMTkwMjEzMDA2ZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmgKQEAgLTI5LDYgKzI5LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIERlY29kZXI7CitjbGFzcyBDYWNoZWRNb2R1bGVDb2RlQmxvY2s7CisKIGNsYXNz
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEds
b2JhbENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVC
bG9jayBCYXNlOwpAQCAtNzQsMTEgKzc3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6
CisgICAgZnJpZW5kIENhY2hlZE1vZHVsZUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUsIE1vZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7
CiAgICAgfQogCisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBj
b25zdCBDYWNoZWRNb2R1bGVDb2RlQmxvY2smKTsKKwogICAgIGludCBtX21vZHVsZUVudmlyb25t
ZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwogCiBwdWJsaWM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrLmgKaW5kZXggYWZlMjZhZWQxYTUwM2FiMjNmZDhmNDQ3ZjlkZWMyZGMwNmNh
NTgyNi4uNzY4NDRhMzdhNDExOTUyZWVkYWJhNDVjNzgyZGRmNTU1M2IwY2RmZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2suaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jazsKKwogY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
IGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0
eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CkBAIC01MCwxMSArNTIsMTUgQEAg
cHVibGljOgogICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxEZWNsYXJhdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX2xleGljYWxEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToK
KyAgICBmcmllbmQgQ2FjaGVkUHJvZ3JhbUNvZGVCbG9jazsKKwogICAgIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKICAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKICAgICB7CiAgICAg
fQogCisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKERlY29kZXImLCBjb25zdCBDYWNoZWRQ
cm9ncmFtQ29kZUJsb2NrJik7CisKICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFy
YXRpb25zOwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAppbmRleCBhZDY1MzYxOGI0MjhmY2EwNmJlMDRkZGI2NmMwZjNkMzFkMmIyNjRjLi44ZTgyNTYw
MjhiMTAzN2RiMmIzMDdhY2QxN2QwNWI3ZjM1OGY0N2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUg
IkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJEZWJ1Z2dl
ci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBiNWQ0N2RkM2RiOWFkOGJhNmY4NDViYjMyMTE0
ZmIwZGFmOGQ4ZjY1Li5kZWJhNjM3ZjEyMTNkOTQzYjI0MDIxZjI1NDAyY2QyZmQ5ODVhOTFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkJ1dHRlcmZs
eUlubGluZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2lu
Y2x1ZGUgIkNvbmZpZ0ZpbGUuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKQEAgLTE5ODgs
OCArMTk4OSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFpbE5l
eHROZXdDb2RlQmxvY2soRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25RdWl0KEV4ZWNTdGF0ZSopCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUXVpdChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICB2bS5jb2RlQ2FjaGUoKS0+d3JpdGUodm0pOworCiAgICAganNjRXhpdChFWElUX1NVQ0NFU1Mp
OwogCiAjaWYgQ09NUElMRVIoTVNWQykKQEAgLTI4NzYsNiArMjg4MCw4IEBAIGludCBydW5KU0Mo
Y29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGJvb2wgaXNXb3JrZXIsIGNvbnN0IEZ1bmMmIGZ1
bmMpCiAjZW5kaWYKICAgICB9CiAKKyAgICB2bS5jb2RlQ2FjaGUoKS0+d3JpdGUodm0pOworCiAg
ICAgaWYgKGlzV29ya2VyKSB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAg
ICAgICAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIHdvcmtlcidz
IG1haW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgKaW5kZXggYzNj
MGY3MzQ2YjA1NTM2YjVjMDk5ZDQzMzcxNTg2NDM2ZmQzZDljMi4uZmJlNGM5YTBkZjFjYzFhZjAw
YjI1Mjg1N2VlOWM3ODRmYTI3YWY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Tb3VyY2VDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VDb2RlLmgKQEAgLTMzLDYgKzMzLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgU291cmNlQ29kZSA6IHB1YmxpYyBVbmxpbmtlZFNvdXJjZUNvZGUgeworICAgICAgICBmcmll
bmQgY2xhc3MgQ2FjaGVkU291cmNlQ29kZTsKKwogICAgIHB1YmxpYzoKICAgICAgICAgU291cmNl
Q29kZSgpCiAgICAgICAgICAgICA6IFVubGlua2VkU291cmNlQ29kZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCmluZGV4IGE4ZTYwM2MyNmEwYjYwMzYy
YTAyZGVhYzA1MTYxNjlkNTc1NTgwMjEuLmNjM2FiZTIxZmFmNTcxNGJmOTk4MDFkZmI5ZWVkNDI4
MzQ4MWYxODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
Q29kZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtl
eS5oCkBAIC0zNyw2ICszNyw4IEBAIGVudW0gY2xhc3MgVHlwZVByb2ZpbGVyRW5hYmxlZCB7IE5v
LCBZZXMgfTsKIGVudW0gY2xhc3MgQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQgeyBObywgWWVz
IH07CiAKIGNsYXNzIFNvdXJjZUNvZGVGbGFncyB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFNv
dXJjZUNvZGVLZXk7CisKIHB1YmxpYzoKICAgICBTb3VyY2VDb2RlRmxhZ3MoKSA9IGRlZmF1bHQ7
CiAKQEAgLTcwLDYgKzcyLDggQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIFNvdXJjZUNvZGVLZXkg
eworICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRTb3VyY2VDb2RlS2V5OworCiBwdWJsaWM6CiAgICAg
U291cmNlQ29kZUtleSgpCiAgICAgewpAQCAtMTE0LDYgKzExOCwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAmJiBzdHJpbmcoKSA9PSBvdGhlci5zdHJpbmcoKTsKICAgICB9CiAKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgU291cmNlQ29kZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCiAgICAgc3RydWN0IEhhc2gg
ewogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkp
IHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
U291cmNlQ29kZUtleSYgYSwgY29uc3QgU291cmNlQ29kZUtleSYgYikgeyByZXR1cm4gYSA9PSBi
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291
cmNlQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNv
ZGUuaAppbmRleCA2ZWM1OTBiNTNlNmM5YzMyN2U0MjQ0ZDBiMTE5YjM2ZDA5NmZjODFlLi5hYWFh
ZDNmNDEyZjhmM2ZhNWJjMWYyZmViZmIxNGNjNzRkZTIyNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKQEAgLTM1LDYgKzM1LDkg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgVW5saW5rZWRTb3VyY2VDb2RlIHsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU291cmNlVHlwZT4KKyAgICAgICAgZnJpZW5kIGNsYXNz
IENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlOworCiAgICAgcHVibGljOgogICAgICAgICBV
bmxpbmtlZFNvdXJjZUNvZGUoKQogICAgICAgICAgICAgOiBtX3Byb3ZpZGVyKDApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCmluZGV4
IDEyOWI1ZWE2YmQ5YjcyNmExZDlhNDAxMWVmOTY5MGY4Y2M2YjBkZDMuLmQ4NGIyZTFmYjIxOGVj
NDljZDk1ZTViZDg1ZGM3NjUwY2ZhNjA5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCkBAIC0xMTYsNiArMTE2LDggQEAgcHVi
bGljOgogICAgIGJvb2wgaXNFdmVyeXRoaW5nQ2FwdHVyZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
RXZlcnl0aGluZ0NhcHR1cmVkOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENhY2hl
ZFZhcmlhYmxlRW52aXJvbm1lbnQ7CisKICAgICBNYXAgbV9tYXA7CiAgICAgYm9vbCBtX2lzRXZl
cnl0aGluZ0NhcHR1cmVkIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ5NTU0YzVhNzg0ZTYyY2FiNWQw
ZDEzMmEwM2ZjOWQyNTAzOWIzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMCwwICsxLDIwMjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgorI2luY2x1ZGUgIkpTQ2FzdC5oIgorI2luY2x1ZGUgIkpTSW1tdXRhYmxlQnV0
dGVyZmx5LmgiCisjaW5jbHVkZSAiSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCIKKyNpbmNs
dWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgorI2luY2x1ZGUgIlNvdXJjZUNvZGVLZXkuaCIK
KyNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5l
cy5oIgorI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPgorc3RydWN0IFNvdXJj
ZVR5cGVJbXBsIHsKKyAgICB1c2luZyB0eXBlID0gVDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgU291cmNlVHlwZUltcGw8VCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19m
dW5kYW1lbnRhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjpTb3VyY2VU
eXBlXywgdm9pZD46OnZhbHVlPj4geworICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBUOjpTb3Vy
Y2VUeXBlXzsKKworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VzaW5nIFNvdXJjZVR5cGUg
PSB0eXBlbmFtZSBTb3VyY2VUeXBlSW1wbDxUPjo6dHlwZTsKKworY2xhc3MgRW5jb2RlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW5jb2Rlcik7CisgICAgV1RGX0ZPUkJJRF9IRUFQX0FM
TE9DQVRJT047CisKK3B1YmxpYzoKKyAgICBjbGFzcyBBbGxvY2F0aW9uIHsKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIEVuY29kZXI7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHVpbnQ4X3QqIGJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQWxs
b2NhdGlvbih1aW50OF90KiBidWZmZXIsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgICAgICA6
IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAgICAgICAgcHRy
ZGlmZl90IG1fb2Zmc2V0OworICAgIH07CisKKyAgICBFbmNvZGVyKFZNJiB2bSkKKyAgICAgICAg
OiBtX3ZtKHZtKQorICAgICAgICAsIG1fYmFzZU9mZnNldCgwKQorICAgICAgICAsIG1fY3VycmVu
dFBhZ2UobnVsbHB0cikKKyAgICB7CisgICAgICAgIGFsbG9jYXRlTmV3UGFnZSgpOworICAgIH0K
KworICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KKworICAgIEFsbG9jYXRpb24gbWFsbG9j
KHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZSk7CisgICAgICAgIHB0
cmRpZmZfdCBvZmZzZXQ7CisgICAgICAgIGlmIChtX2N1cnJlbnRQYWdlLT5tYWxsb2Moc2l6ZSwg
b2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBBbGxvY2F0aW9uIHsgbV9jdXJyZW50UGFnZS0+
YnVmZmVyKCkgKyBvZmZzZXQsIG1fYmFzZU9mZnNldCArIG9mZnNldCB9OworICAgICAgICBhbGxv
Y2F0ZU5ld1BhZ2Uoc2l6ZSk7CisgICAgICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBtYWxsb2MoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1hbGxvYyhzaXplb2YoVCkpLmJ1ZmZlcigp
KTsKKyAgICB9CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29uc3Qgdm9pZCogYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQ7CisgICAgICAgIHB0cmRpZmZfdCBiYXNl
T2Zmc2V0ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWdlIDogbV9wYWdlcykgewor
ICAgICAgICAgICAgaWYgKHBhZ2UuZ2V0T2Zmc2V0KGFkZHJlc3MsIG9mZnNldCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJhc2VPZmZzZXQgKyBvZmZzZXQ7CisgICAgICAgICAgICBiYXNlT2Zm
c2V0ICs9IHBhZ2Uuc2l6ZSgpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgY2FjaGVQ
dHIoY29uc3Qgdm9pZCogcHRyLCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9w
dHJUb09mZnNldE1hcC5hZGQocHRyLCBvZmZzZXQpOworICAgIH0KKworICAgIFdURjo6T3B0aW9u
YWw8cHRyZGlmZl90PiBvZmZzZXRGb3JQdHIoY29uc3Qgdm9pZCogcHRyKQorICAgIHsKKyAgICAg
ICAgYXV0byBpdCA9IG1fcHRyVG9PZmZzZXRNYXAuZmluZChwdHIpOworICAgICAgICBpZiAoaXQg
PT0gbV9wdHJUb09mZnNldE1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OworICAgIH0KKworICAgIHN0ZDo6cGFp
cjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVsZWFzZSgpCisgICAgeworICAgICAgICBz
aXplX3Qgc2l6ZSA9IG1fYmFzZU9mZnNldCArIG1fY3VycmVudFBhZ2UtPnNpemUoKTsKKyAgICAg
ICAgTWFsbG9jUHRyPHVpbnQ4X3Q+IGJ1ZmZlciA9IE1hbGxvY1B0cjx1aW50OF90Pjo6bWFsbG9j
KHNpemUpOworICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKSB7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLmdldCgp
ICsgb2Zmc2V0LCBwYWdlLmJ1ZmZlcigpLCBwYWdlLnNpemUoKSk7CisgICAgICAgICAgICBvZmZz
ZXQgKz0gcGFnZS5zaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zm
c2V0ID09IHNpemUpOworICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZlciksIHNpemUgfTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgY2xhc3MgUGFnZSB7CisgICAgcHVibGljOgorICAgICAg
ICBQYWdlKHNpemVfdCBzaXplKQorICAgICAgICAgICAgOiBtX29mZnNldCgwKQorICAgICAgICAg
ICAgLCBtX2NhcGFjaXR5KHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVyID0g
TWFsbG9jUHRyPHVpbnQ4X3Q+OjptYWxsb2Moc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG1hbGxvYyhzaXplX3Qgc2l6ZSwgcHRyZGlmZl90JiByZXN1bHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHNpemVfdCBhbGlnbm1lbnQgPSBzdGQ6Om1pbihhbGlnbm9mKHN0ZDo6bWF4X2Fs
aWduX3QpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhzaXpl
KSkpOworICAgICAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihhbGlnbm1lbnQsIG1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHNpemUgPSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplKTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxzaXplX3Q+KG9mZnNldCArIHNpemUpID4gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldDsKKyAgICAgICAg
ICAgIG1fb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXIuZ2V0KCk7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fb2Zmc2V0KTsgfQorCisgICAgICAgIGJvb2wgZ2V0T2Zmc2V0KGNv
bnN0IHZvaWQqIGFkZHJlc3MsIHB0cmRpZmZfdCYgcmVzdWx0KSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGFkZHJlc3MpOworICAgICAgICAgICAgaWYgKGFkZHIgPj0gbV9idWZmZXIuZ2V0KCkgJiYg
YWRkciA8IG1fYnVmZmVyLmdldCgpICsgbV9vZmZzZXQpIHsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBhZGRyIC0gbV9idWZmZXIuZ2V0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIE1hbGxvY1B0cjx1aW50OF90PiBtX2J1ZmZlcjsKKyAgICAg
ICAgcHRyZGlmZl90IG1fb2Zmc2V0OworICAgICAgICBzaXplX3QgbV9jYXBhY2l0eTsKKyAgICB9
OworCisgICAgdm9pZCBhbGxvY2F0ZU5ld1BhZ2Uoc2l6ZV90IHNpemUgPSAwKQorICAgIHsKKyAg
ICAgICAgc3RhdGljIHNpemVfdCBtaW5QYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUoKTsKKyAgICAg
ICAgaWYgKG1fY3VycmVudFBhZ2UpCisgICAgICAgICAgICBtX2Jhc2VPZmZzZXQgKz0gbV9jdXJy
ZW50UGFnZS0+c2l6ZSgpOworICAgICAgICBpZiAoc2l6ZSA8IG1pblBhZ2VTaXplKQorICAgICAg
ICAgICAgc2l6ZSA9IG1pblBhZ2VTaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzaXpl
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKG1pblBhZ2VTaXplLCBzaXplKTsKKyAgICAgICAg
bV9wYWdlcy5hcHBlbmQoUGFnZSB7IHNpemUgfSk7CisgICAgICAgIG1fY3VycmVudFBhZ2UgPSAm
bV9wYWdlcy5sYXN0KCk7CisgICAgfQorCisgICAgVk0mIG1fdm07CisgICAgcHRyZGlmZl90IG1f
YmFzZU9mZnNldDsKKyAgICBQYWdlKiBtX2N1cnJlbnRQYWdlOworICAgIFZlY3RvcjxQYWdlPiBt
X3BhZ2VzOworICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIHB0cmRpZmZfdD4gbV9wdHJUb09mZnNl
dE1hcDsKK307CisKK2NsYXNzIERlY29kZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERl
Y29kZXIpOworICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOworCitwdWJsaWM6CisgICAg
RGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXplX3Qgc2l6ZSkKKyAg
ICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oYmFzZUFkZHJlc3MpKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
LCBtX3NpemUoc2l6ZSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNpemUp
OworICAgIH0KKworICAgIH5EZWNvZGVyKCkKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgcGFp
ciA6IG1fZmluYWxpemVycykKKyAgICAgICAgICAgIHBhaXIudmFsdWUoKTsKKyAgICB9CisKKyAg
ICBWTSYgdm0oKSB7IHJldHVybiBtX3ZtOyB9CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29u
c3Qgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogYWRkciA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdHIpOworICAgICAgICBBU1NFUlQoYWRkciA+PSBtX2Jh
c2VBZGRyZXNzICYmIGFkZHIgPCBtX2Jhc2VBZGRyZXNzICsgbV9zaXplKTsKKyAgICAgICAgcmV0
dXJuIGFkZHIgLSBtX2Jhc2VBZGRyZXNzOworICAgIH0KKworICAgIHZvaWQgY2FjaGVPZmZzZXQo
cHRyZGlmZl90IG9mZnNldCwgdm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRUb1B0
ck1hcC5hZGQob2Zmc2V0LCBwdHIpOworICAgIH0KKworICAgIFdURjo6T3B0aW9uYWw8dm9pZCo+
IHB0ckZvck9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgYXV0byBpdCA9
IG1fb2Zmc2V0VG9QdHJNYXAuZmluZChvZmZzZXQpOworICAgICAgICBpZiAoaXQgPT0gbV9vZmZz
ZXRUb1B0ck1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBhZGRGaW5hbGl6ZXIocHRyZGlmZl90IG9mZnNldCwgY29uc3Qg
RnVuY3RvciYgZm4pCisgICAgeworICAgICAgICBtX2ZpbmFsaXplcnMuYWRkKG9mZnNldCwgZm4p
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBWTSYgbV92bTsKKyAgICBjb25zdCB1aW50OF90KiBt
X2Jhc2VBZGRyZXNzOworI2lmbmRlZiBOREVCVUcKKyAgICBzaXplX3QgbV9zaXplOworI2VuZGlm
CisgICAgSGFzaE1hcDxwdHJkaWZmX3QsIHZvaWQqPiBtX29mZnNldFRvUHRyTWFwOworICAgIEhh
c2hNYXA8cHRyZGlmZl90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fZmluYWxpemVyczsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYsIFQmIGRzdCwg
Y29uc3QgU291cmNlVHlwZTxUPiYgc3JjKQoreworICAgIGRzdCA9IHNyYzsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwg
U291cmNlVHlwZTxUPj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCYgZHN0LCBj
b25zdCBTb3VyY2VUeXBlPFQ+JiBzcmMpCit7CisgICAgZHN0LmVuY29kZShlbmNvZGVyLCBzcmMp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorc3RhdGljIHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZT4gZGVj
b2RlKERlY29kZXImLCBjb25zdCBUJiBzcmMsIFNvdXJjZVR5cGU8VD4mIGRzdCwgQXJncy4uLikK
K3sKKyAgICBkc3QgPSBzcmM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4u
IEFyZ3M+CitzdGF0aWMgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIFNvdXJjZVR5
cGU8VD4+Ojp2YWx1ZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIsIGNvbnN0IFQmIHNyYywgU291
cmNlVHlwZTxUPiYgZHN0LCBBcmdzLi4uIGFyZ3MpCit7CisgICAgc3JjLmRlY29kZShkZWNvZGVy
LCBkc3QsIGFyZ3MuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFNvdXJjZVR5cGU8VD4+Ojp2YWx1ZSwgVD4gZGVj
b2RlKERlY29kZXImLCBUIHNyYykKK3sKKyAgICByZXR1cm4gc3JjOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RhdGljIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBTb3Vy
Y2VUeXBlPFQ+Pjo6dmFsdWUsIFNvdXJjZVR5cGU8VD4+JiYgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIGNvbnN0IFQmIHNyYykKK3sKKyAgICByZXR1cm4gc3JjLmRlY29kZShkZWNvZGVyKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlPgorY2xhc3MgQ2FjaGVkT2JqZWN0IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDYWNoZWRPYmplY3Q8U291cmNlPik7CisgICAgV1RGX0ZPUkJJ
RF9IRUFQX0FMTE9DQVRJT047CisKK3B1YmxpYzoKKyAgICB1c2luZyBTb3VyY2VUeXBlXyA9IFNv
dXJjZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZT4KK2NsYXNzIFZhcmlhYmxlTGVu
Z3RoT2JqZWN0IDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2U+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRQdHI7CisKK3Byb3Rl
Y3RlZDoKKyAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fb2Zmc2V0ICE9IHNfaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih0aGlzKSArIG1fb2Zmc2V0OworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYnVmZmVyKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihidWZmZXIoKSk7
CisgICAgfQorCisgICAgdWludDhfdCogYWxsb2NhdGUoRW5jb2RlciYgZW5jb2Rlciwgc2l6ZV90
IHNpemUpCisgICAgeworICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0T2Zmc2V0ID0gZW5jb2Rlci5vZmZzZXRP
ZigmbV9vZmZzZXQpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGVuY29kZXIubWFsbG9jKHNpemUp
OworICAgICAgICBtX29mZnNldCA9IHJlc3VsdC5vZmZzZXQoKSAtIG9mZnNldE9mZnNldDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5idWZmZXIoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIFQqIGFsbG9jYXRlKEVuY29kZXImIGVuY29kZXIsIHVuc2lnbmVkIHNpemUg
PSAxKQorICAgIHsKKyAgICAgICAgdWludDhfdCogcmVzdWx0ID0gYWxsb2NhdGUoZW5jb2Rlciwg
c2l6ZW9mKFQpICogc2l6ZSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihy
ZXN1bHQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdGV4cHIgc3RhdGljIHB0cmRpZmZf
dCBzX2ludmFsaWRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHB0cmRpZmZfdD46Om1heCgp
OworCisgICAgcHRyZGlmZl90IG1fb2Zmc2V0IHsgc19pbnZhbGlkT2Zmc2V0IH07CisKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNvdXJjZSA9IFNvdXJjZVR5cGU8VD4+Citj
bGFzcyBDYWNoZWRQdHIgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U291cmNlKj4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KKyAgICBmcmllbmQgc3RydWN0IENhY2hl
ZFJlZlB0cjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNvdXJjZSogc3JjKQorICAgIHsKKyAgICAgICAgbV9pc0VtcHR5ID0gIXNyYzsKKyAgICAg
ICAgaWYgKG1faXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoV1RG
OjpPcHRpb25hbDxwdHJkaWZmX3Q+IG9mZnNldCA9IGVuY29kZXIub2Zmc2V0Rm9yUHRyKHNyYykp
IHsKKyAgICAgICAgICAgIHRoaXMtPm1fb2Zmc2V0ID0gKm9mZnNldCAtIGVuY29kZXIub2Zmc2V0
T2YoJnRoaXMtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIFQqIGNhY2hlZE9iamVjdCA9IHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29k
ZXIpOworICAgICAgICBjYWNoZWRPYmplY3QtPmVuY29kZShlbmNvZGVyLCAqc3JjKTsKKyAgICAg
ICAgZW5jb2Rlci5jYWNoZVB0cihzcmMsIGVuY29kZXIub2Zmc2V0T2YoY2FjaGVkT2JqZWN0KSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBTb3VyY2UqIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAobV9pc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
cHRyZGlmZl90IGJ1ZmZlck9mZnNldCA9IGRlY29kZXIub2Zmc2V0T2YodGhpcy0+YnVmZmVyKCkp
OworICAgICAgICBpZiAoV1RGOjpPcHRpb25hbDx2b2lkKj4gcHRyID0gZGVjb2Rlci5wdHJGb3JP
ZmZzZXQoYnVmZmVyT2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFNvdXJjZSo+KCpwdHIpOworCisgICAgICAgIFNvdXJjZSogcHRyID0gZ2V0KCktPmRlY29kZShk
ZWNvZGVyLCBhcmdzLi4uKTsKKyAgICAgICAgZGVjb2Rlci5jYWNoZU9mZnNldChidWZmZXJPZmZz
ZXQsIHB0cik7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgY29uc3QgVCogb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3Qg
VCogZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzRW1wdHkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxU
PigpOworICAgIH0KKworICAgIGJvb2wgbV9pc0VtcHR5OworCit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBTb3VyY2UgPSBTb3VyY2VUeXBlPFQ+PgorY2xhc3MgQ2FjaGVkUmVm
UHRyIDogcHVibGljIENhY2hlZE9iamVjdDxSZWZQdHI8U291cmNlPj4geworcHVibGljOgorICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNvdXJjZSogc3JjKQorICAgIHsK
KyAgICAgICAgbV9wdHIuZW5jb2RlKGVuY29kZXIsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmUHRyPFNvdXJjZT4gc3JjKQorICAgIHsK
KyAgICAgICAgZW5jb2RlKGVuY29kZXIsIHNyYy5nZXQoKSk7CisgICAgfQorCisgICAgUmVmUHRy
PFNvdXJjZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBT
b3VyY2UqIGRlY29kZWRQdHIgPSBtX3B0ci5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmICgh
ZGVjb2RlZFB0cikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBkZWNvZGVy
LmFkZEZpbmFsaXplcihkZWNvZGVyLm9mZnNldE9mKG1fcHRyLmJ1ZmZlcigpKSwgWz1dIHsgZGVy
ZWZJZk5vdE51bGwoZGVjb2RlZFB0cik7IH0pOworICAgICAgICByZWZJZk5vdE51bGwoZGVjb2Rl
ZFB0cik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihkZWNvZGVkUHRyKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWZQdHI8U291cmNlPiYgc3JjKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3JjID0gZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBDYWNoZWRQdHI8VCwgU291cmNlPiBtX3B0cjsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFNvdXJjZSA9IFNvdXJjZVR5cGU8VD4+CitjbGFzcyBDYWNoZWRXcml0
ZUJhcnJpZXIgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFdyaXRlQmFycmllcjxTb3VyY2U+PiB7Citw
dWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV3JpdGVCYXJy
aWVyPFNvdXJjZT4gc3JjKQorICAgIHsKKyAgICAgICAgbV9wdHIuZW5jb2RlKGVuY29kZXIsIHNy
Yy5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV3Jp
dGVCYXJyaWVyPFNvdXJjZT4mIHNyYywgY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKKyAgICB7
CisgICAgICAgIFNvdXJjZSogZGVjb2RlZFB0ciA9IG1fcHRyLmRlY29kZShkZWNvZGVyKTsKKyAg
ICAgICAgaWYgKGRlY29kZWRQdHIpCisgICAgICAgICAgICBzcmMuc2V0KGRlY29kZXIudm0oKSwg
b3duZXIsIGRlY29kZWRQdHIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRQdHI8VCwg
U291cmNlPiBtX3B0cjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBJbmxpbmVD
YXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYXNoT25PdmVyZmxvdz4K
K2NsYXNzIENhY2hlZFZlY3RvciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxWZWN0b3I8
U291cmNlVHlwZTxUPiwgSW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4+IHsKK3B1Ymxp
YzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8U291cmNl
VHlwZTxUPiwgSW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIHZlY3RvcikKKyAgICB7
CisgICAgICAgIG1fc2l6ZSA9IHZlY3Rvci5zaXplKCk7CisgICAgICAgIFQqIGJ1ZmZlciA9IHRo
aXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIsIG1fc2l6ZSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKKyAgICAgICAgICAgIDo6SlNDOjplbmNv
ZGUoZW5jb2RlciwgYnVmZmVyW2ldLCB2ZWN0b3JbaV0pOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVj
dG9yPFNvdXJjZVR5cGU8VD4sIElubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiB2ZWN0
b3IsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHZlY3Rvci5yZXNpemVUb0Zp
dChtX3NpemUpOworICAgICAgICBjb25zdCBUKiBidWZmZXIgPSB0aGlzLT50ZW1wbGF0ZSBidWZm
ZXI8VD4oKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQor
ICAgICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBidWZmZXJbaV0sIHZlY3RvcltpXSwg
YXJncy4uLik7CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc2l6ZTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZpcnN0LCB0eXBlbmFtZSBTZWNvbmQ+CitjbGFzcyBDYWNoZWRQ
YWlyIDogcHVibGljIENhY2hlZE9iamVjdDxzdGQ6OnBhaXI8U291cmNlVHlwZTxGaXJzdD4sIFNv
dXJjZVR5cGU8U2Vjb25kPj4+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBzdGQ6OnBhaXI8U291cmNlVHlwZTxGaXJzdD4sIFNvdXJjZVR5cGU8U2Vj
b25kPj4mIHBhaXIpCisgICAgeworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIG1fZmly
c3QsIHBhaXIuZmlyc3QpOworICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIG1fc2Vjb25k
LCBwYWlyLnNlY29uZCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjpwYWlyPFNvdXJjZVR5cGU8Rmlyc3Q+LCBTb3VyY2VUeXBlPFNlY29uZD4+JiBwYWly
KSBjb25zdAorICAgIHsKKyAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBtX2ZpcnN0LCBw
YWlyLmZpcnN0KTsKKyAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBtX3NlY29uZCwgcGFp
ci5zZWNvbmQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGaXJzdCBtX2ZpcnN0OworICAgIFNl
Y29uZCBtX3NlY29uZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxTb3VyY2VUeXBlPEtl
eT4+OjpIYXNoLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFNvdXJjZVR5cGU8
S2V5Pj4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8U291cmNlVHlwZTxW
YWx1ZT4+PgorY2xhc3MgQ2FjaGVkSGFzaE1hcCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVj
dDxIYXNoTWFwPFNvdXJjZVR5cGU8S2V5PiwgU291cmNlVHlwZTxWYWx1ZT4sIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEss
IHR5cGVuYW1lIFY+CisgICAgdXNpbmcgTWFwID0gSGFzaE1hcDxLLCBWLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz47CisKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZh
bHVlPj4mIG1hcCkKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUobV9lbnRyaWVz
KT4gZW50cmllc1ZlY3RvcihtYXAuc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7Cisg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtYXApCisgICAgICAgICAgICBlbnRyaWVzVmVj
dG9yW2krK10gPSB7IGl0LmtleSwgaXQudmFsdWUgfTsKKyAgICAgICAgbV9lbnRyaWVzLmVuY29k
ZShlbmNvZGVyLCBlbnRyaWVzVmVjdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBNYXA8U291cmNlVHlwZTxLZXk+LCBTb3VyY2VUeXBlPFZhbHVlPj4mIG1h
cCkgY29uc3QKKyAgICB7CisgICAgICAgIFNvdXJjZVR5cGU8ZGVjbHR5cGUobV9lbnRyaWVzKT4g
ZGVjb2RlZEVudHJpZXM7CisgICAgICAgIG1fZW50cmllcy5kZWNvZGUoZGVjb2RlciwgZGVjb2Rl
ZEVudHJpZXMpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBkZWNvZGVkRW50cmll
cykKKyAgICAgICAgICAgIG1hcC5zZXQocGFpci5maXJzdCwgcGFpci5zZWNvbmQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkUGFpcjxLZXksIFZhbHVlPj4gbV9l
bnRyaWVzOworfTsKKworY2xhc3MgQ2FjaGVkVW5pcXVlZFN0cmluZ0ltcGwgOiBwdWJsaWMgVmFy
aWFibGVMZW5ndGhPYmplY3Q8VW5pcXVlZFN0cmluZ0ltcGw+IHsKK3B1YmxpYzoKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCisgICAg
eworICAgICAgICBtX2lzQXRvbWljID0gc3RyaW5nLmlzQXRvbWljKCk7CisgICAgICAgIG1faXNT
eW1ib2wgPSBzdHJpbmcuaXNTeW1ib2woKTsKKyAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IGNv
bnN0X2Nhc3Q8U3RyaW5nSW1wbCo+KCZzdHJpbmcpOworICAgICAgICBpZiAobV9pc1N5bWJvbCkg
eworICAgICAgICAgICAgU3ltYm9sSW1wbCogc3ltYm9sID0gc3RhdGljX2Nhc3Q8U3ltYm9sSW1w
bCo+KGltcGwpOworICAgICAgICAgICAgaWYgKCFzeW1ib2wtPmlzTnVsbFN5bWJvbCgpKSB7Cisg
ICAgICAgICAgICAgICAgSWRlbnRpZmllciB1aWQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZlbmNv
ZGVyLnZtKCksIHN5bWJvbCk7CisgICAgICAgICAgICAgICAgaW1wbCA9IGVuY29kZXIudm0oKS5w
cm9wZXJ0eU5hbWVzLT5sb29rVXBQdWJsaWNOYW1lKHVpZCkuc3RyaW5nKCkuaW1wbCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pczhCaXQgPSBpbXBsLT5pczhCaXQo
KTsKKyAgICAgICAgbV9sZW5ndGggPSBpbXBsLT5sZW5ndGgoKTsKKworICAgICAgICBpZiAoIW1f
bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBt
X2xlbmd0aDsKKyAgICAgICAgY29uc3Qgdm9pZCogcGF5bG9hZDsKKyAgICAgICAgaWYgKG1faXM4
Qml0KQorICAgICAgICAgICAgcGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnM4KCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgcGF5bG9hZCA9IGltcGwtPmNoYXJhY3RlcnMxNigpOworICAg
ICAgICAgICAgc2l6ZSAqPSAyOworICAgICAgICB9CisKKyAgICAgICAgdWludDhfdCogYnVmZmVy
ID0gdGhpcy0+YWxsb2NhdGUoZW5jb2Rlciwgc2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIs
IHBheWxvYWQsIHNpemUpOworICAgIH0KKworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gY3JlYXRlID0gWyZd
KGNvbnN0IGF1dG8qIGJ1ZmZlcikgLT4gVW5pcXVlZFN0cmluZ0ltcGwqIHsKKyAgICAgICAgICAg
IGlmICghbV9pc1N5bWJvbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nSW1w
bDo6YWRkKGJ1ZmZlciwgbV9sZW5ndGgpLmxlYWtSZWYoKTsKKworICAgICAgICAgICAgaWYgKCFt
X2xlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gJlN5bWJvbEltcGw6OmNyZWF0ZU51bGxT
eW1ib2woKS5sZWFrUmVmKCk7CisKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZkZWNvZGVyLnZtKCksIGJ1ZmZlciwgbV9sZW5ndGgpOworICAg
ICAgICAgICAgU3RyaW5nIHN0ciA9IGRlY29kZXIudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQ
cml2YXRlTmFtZShpZGVudCktPnN0cmluZygpOworICAgICAgICAgICAgU3RyaW5nSW1wbCogaW1w
bCA9IHN0ci5yZWxlYXNlSW1wbCgpLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKGltcGwtPmlz
U3ltYm9sKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVuaXF1ZWRTdHJpbmdJ
bXBsKj4oaW1wbCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG1faXM4Qml0KQorICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZSh0aGlzLT5idWZmZXI8TENoYXI+KCkpOworICAgICAgICByZXR1
cm4gY3JlYXRlKHRoaXMtPmJ1ZmZlcjxVQ2hhcj4oKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IGJvb2wgbV9pczhCaXQgOiAxOworICAgIGJvb2wgbV9pc1N5bWJvbCA6IDE7CisgICAgYm9vbCBt
X2lzQXRvbWljIDogMTsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK2NsYXNzIENhY2hl
ZFN0cmluZ0ltcGwgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U3RyaW5nSW1wbD4gewor
cHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ0lt
cGwmIGltcGwpCisgICAgeworICAgICAgICBtX3VuaXF1ZWRTdHJpbmdJbXBsLmVuY29kZShlbmNv
ZGVyLCBpbXBsKTsKKyAgICB9CisKKyAgICBTdHJpbmdJbXBsKiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3VuaXF1ZWRTdHJpbmdJbXBsLmRl
Y29kZShkZWNvZGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkVW5pcXVlZFN0cmlu
Z0ltcGwgbV91bmlxdWVkU3RyaW5nSW1wbDsKK307CisKK2NsYXNzIENhY2hlZFN0cmluZyA6IHB1
YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTdHJpbmc+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAg
ICAgIG1faW1wbC5lbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwq
PihzdHJpbmcuaW1wbCgpKSk7CisgICAgfQorCisgICAgU3RyaW5nIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhzdGF0aWNfY2FzdDxS
ZWZQdHI8U3RyaW5nSW1wbD4+KG1faW1wbC5kZWNvZGUoZGVjb2RlcikpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTdHJpbmcmIGRzdCkgY29uc3QKKyAgICB7
CisgICAgICAgIGRzdCA9IGRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiBtX2ltcGw7Cit9OworCitjbGFz
cyBDYWNoZWRJZGVudGlmaWVyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PElkZW50aWZp
ZXI+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgbV9zdHJpbmcuZW5jb2RlKGVu
Y29kZXIsIGlkZW50aWZpZXIuc3RyaW5nKCkpOworICAgIH0KKworICAgIElkZW50aWZpZXIgZGVj
b2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmcgc3RyID0g
bV9zdHJpbmcuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoc3RyLmlzTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoKTsKKworICAgICAgICByZXR1cm4gSWRlbnRpZmll
cjo6ZnJvbVVpZCgmZGVjb2Rlci52bSgpLCAoVW5pcXVlZFN0cmluZ0ltcGwqKXN0ci5pbXBsKCkp
OworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElkZW50aWZpZXIm
IGlkZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgaWRlbnQgPSBkZWNvZGUoZGVjb2Rlcik7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFN0cmluZyBtX3N0cmluZzsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDYWNoZWRPcHRpb25hbCA6IHB1YmxpYyBWYXJpYWJsZUxl
bmd0aE9iamVjdDxXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+PiB7CitwdWJsaWM6CisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpPcHRpb25hbDxTb3VyY2VU
eXBlPFQ+PiYgc291cmNlKQorICAgIHsKKyAgICAgICAgbV9pc0VtcHR5ID0gIXNvdXJjZTsKKwor
ICAgICAgICBpZiAobV9pc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRo
aXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgKnNvdXJj
ZSk7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDxTb3VyY2VUeXBlPFQ+PiBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzRW1wdHkpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7IHRoaXMtPnRl
bXBsYXRlIGJ1ZmZlcjxUPigpLT5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICB9CisKKyAgICB2b2lk
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXVEY6Ok9wdGlvbmFsPFNvdXJjZVR5cGU8VD4+JiBk
c3QpIGNvbnN0CisgICAgeworICAgICAgICBkc3QgPSBkZWNvZGUoZGVjb2Rlcik7CisgICAgfQor
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjp1bmlxdWVfcHRy
PFNvdXJjZVR5cGU8VD4+JiBzb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIXNvdXJjZSkKKyAg
ICAgICAgICAgIGVuY29kZShlbmNvZGVyLCBXVEY6Om51bGxvcHQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbmNvZGUoZW5jb2RlciwgeyAqc291cmNlIH0pOworICAgIH0KKworICAgIFNv
dXJjZVR5cGU8VD4qIGRlY29kZUFzUHRyKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9pc0VtcHR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMtPnRlbXBsYXRlIGJ1ZmZlcjxUPigpLT5kZWNvZGUoZGVjb2Rlcik7
CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9pc0VtcHR5OworfTsKKworY2xhc3MgQ2Fj
aGVkU2ltcGxlSnVtcFRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxpbmtlZFNpbXBsZUp1
bXBUYWJsZT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUpCisgICAgeworICAgICAgICBt
X21pbiA9IGp1bXBUYWJsZS5taW47CisgICAgICAgIG1fYnJhbmNoT2Zmc2V0cy5lbmNvZGUoZW5j
b2RlciwganVtcFRhYmxlLmJyYW5jaE9mZnNldHMpOworICAgIH0KKworICAgIHZvaWQgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUpIGNv
bnN0CisgICAgeworICAgICAgICBqdW1wVGFibGUubWluID0gbV9taW47CisgICAgICAgIG1fYnJh
bmNoT2Zmc2V0cy5kZWNvZGUoZGVjb2RlciwganVtcFRhYmxlLmJyYW5jaE9mZnNldHMpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBpbnQzMl90IG1fbWluOworICAgIENhY2hlZFZlY3RvcjxpbnQz
Ml90PiBtX2JyYW5jaE9mZnNldHM7Cit9OworCitjbGFzcyBDYWNoZWRTdHJpbmdKdW1wVGFibGUg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkU3RyaW5nSnVtcFRhYmxlPiB7CitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIGp1bXBUYWJsZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0VGFibGUuZW5jb2Rl
KGVuY29kZXIsIGp1bXBUYWJsZS5vZmZzZXRUYWJsZSk7CisgICAgfQorCisgICAgdm9pZCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGp1bXBUYWJsZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0VGFibGUuZGVjb2RlKGRlY29kZXIsIGp1bXBU
YWJsZS5vZmZzZXRUYWJsZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZEhhc2hNYXA8
Q2FjaGVkUmVmUHRyPENhY2hlZFN0cmluZ0ltcGw+LCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6
IE9mZnNldExvY2F0aW9uPiBtX29mZnNldFRhYmxlOworfTsKKworY2xhc3MgQ2FjaGVkQ29kZUJs
b2NrUmFyZURhdGEgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJsb2NrOjpSYXJl
RGF0YT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSYgcmFyZURhdGEpCisgICAgeworICAgICAgICBt
X2V4Y2VwdGlvbkhhbmRsZXJzLmVuY29kZShlbmNvZGVyLCByYXJlRGF0YS5tX2V4Y2VwdGlvbkhh
bmRsZXJzKTsKKyAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzLmVuY29kZShlbmNvZGVyLCByYXJl
RGF0YS5tX3N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Cisg
ICAgICAgIG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuZW5jb2RlKGVuY29kZXIsIHJhcmVE
YXRhLm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMpOworICAgICAgICBtX3R5cGVQcm9maWxl
ckluZm9NYXAuZW5jb2RlKGVuY29kZXIsIHJhcmVEYXRhLm1fdHlwZVByb2ZpbGVySW5mb01hcCk7
CisgICAgICAgIG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuZW5jb2RlKGVu
Y29kZXIsIHJhcmVEYXRhLm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOwor
ICAgIH0KKworICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSogZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURh
dGEqIHJhcmVEYXRhID0gbmV3IFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSB7IH07CisgICAg
ICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX2V4Y2Vw
dGlvbkhhbmRsZXJzKTsKKyAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzLmRlY29kZShkZWNvZGVy
LCByYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgbV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKTsKKyAgICAgICAgbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5kZWNvZGUoZGVjb2Rl
ciwgcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMpOworICAgICAgICBtX3R5
cGVQcm9maWxlckluZm9NYXAuZGVjb2RlKGRlY29kZXIsIHJhcmVEYXRhLT5tX3R5cGVQcm9maWxl
ckluZm9NYXApOworICAgICAgICBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRz
LmRlY29kZShkZWNvZGVyLCByYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2Rl
T2Zmc2V0cyk7CisgICAgICAgIHJldHVybiByYXJlRGF0YTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQ2FjaGVkVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7
CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFi
bGVzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlczsKKyAgICBDYWNoZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0
UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisgICAgQ2FjaGVkSGFzaE1h
cDx1bnNpZ25lZCwgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHBy
ZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICBDYWNoZWRWZWN0b3I8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0czsKK307CisKK2NsYXNzIENhY2hlZEJpdFZlY3RvciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0
aE9iamVjdDxCaXRWZWN0b3I+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBCaXRWZWN0b3ImIGJpdFZlY3RvcikKKyAgICB7CisgICAgICAgIG1fc2l6
ZSA9IGJpdFZlY3Rvci5zaXplKCk7CisgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHRoaXMtPmFs
bG9jYXRlKGVuY29kZXIsIG1fc2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIGJpdFZlY3Rv
ci5iaXRzKCksIG1fc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYsIEJp
dFZlY3RvciYgYml0VmVjdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgYml0VmVjdG9yLmVuc3Vy
ZVNpemUobV9zaXplKTsKKyAgICAgICAgbWVtY3B5KGJpdFZlY3Rvci5iaXRzKCksIHRoaXMtPmJ1
ZmZlcigpLCBtX3NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3NpemU7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUg
RGVmYXVsdEhhc2g8VD46Okhhc2g+CitjbGFzcyBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hl
ZE9iamVjdDxIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+PiB7CitwdWJsaWM6CisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldDxTb3VyY2VUeXBlPFQ+
LCBIYXNoQXJnPiYgc2V0KQorICAgIHsKKyAgICAgICAgU291cmNlVHlwZTxkZWNsdHlwZShtX2Vu
dHJpZXMpPiBlbnRyaWVzVmVjdG9yKHNldC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpID0g
MDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogc2V0KQorICAgICAgICAgICAgZW50
cmllc1ZlY3RvcltpKytdID0gaXRlbTsKKyAgICAgICAgbV9lbnRyaWVzLmVuY29kZShlbmNvZGVy
LCBlbnRyaWVzVmVjdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBIYXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+JiBzZXQpIGNvbnN0CisgICAgewor
ICAgICAgICBTb3VyY2VUeXBlPGRlY2x0eXBlKG1fZW50cmllcyk+IGVudHJpZXNWZWN0b3I7Cisg
ICAgICAgIG1fZW50cmllcy5kZWNvZGUoZGVjb2RlciwgZW50cmllc1ZlY3Rvcik7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGVudHJpZXNWZWN0b3IpCisgICAgICAgICAgICBzZXQu
YWRkKGl0ZW0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0b3I8VD4gbV9lbnRy
aWVzOworfTsKKworY2xhc3MgQ2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkgOiBwdWJs
aWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IHsKK3B1
YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpCisgICAgeworICAgICAgICBtX2NvbnN0YW50ID0gZW50
cnkuc2Vjb25kOworICAgICAgICBtX3NldC5lbmNvZGUoZW5jb2RlciwgZW50cnkuZmlyc3QpOwor
ICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENvbnN0YW50SWRlbnRp
ZmllclNldEVudHJ5JiBlbnRyeSkgY29uc3QKKyAgICB7CisgICAgICAgIGVudHJ5LnNlY29uZCA9
IG1fY29uc3RhbnQ7CisgICAgICAgIG1fc2V0LmRlY29kZShkZWNvZGVyLCBlbnRyeS5maXJzdCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fY29uc3RhbnQ7CisgICAgQ2FjaGVk
SGFzaFNldDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+LCBJZGVudGlmaWVy
UmVwSGFzaD4gbV9zZXQ7Cit9OworCitjbGFzcyBDYWNoZWRWYXJpYWJsZUVudmlyb25tZW50IDog
cHVibGljIENhY2hlZE9iamVjdDxWYXJpYWJsZUVudmlyb25tZW50PiB7CitwdWJsaWM6CisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYg
ZW52KQorICAgIHsKKyAgICAgICAgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IGVudi5tX2lzRXZl
cnl0aGluZ0NhcHR1cmVkOworICAgICAgICBtX21hcC5lbmNvZGUoZW5jb2RlciwgZW52Lm1fbWFw
KTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVu
dmlyb25tZW50JiBlbnYpIGNvbnN0CisgICAgeworICAgICAgICBlbnYubV9pc0V2ZXJ5dGhpbmdD
YXB0dXJlZCA9IG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7CisgICAgICAgIG1fbWFwLmRlY29kZShk
ZWNvZGVyLCBlbnYubV9tYXApOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faXNFdmVy
eXRoaW5nQ2FwdHVyZWQ7CisgICAgQ2FjaGVkSGFzaE1hcDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5p
cXVlZFN0cmluZ0ltcGw+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnksIElkZW50aWZpZXJSZXBI
YXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+LCBWYXJpYWJsZUVudmly
b25tZW50RW50cnlIYXNoVHJhaXRzPiBtX21hcDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFNvdXJjZSA9IFNvdXJjZVR5cGU8VD4+CitjbGFzcyBDYWNoZWRBcnJheSA6IHB1
YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqPiB7CitwdWJsaWM6CisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBhcnJheSwgdW5zaWduZWQgc2l6
ZSkKKyAgICB7CisgICAgICAgIFQqIGRzdCA9IHRoaXMtPnRlbXBsYXRlIGFsbG9jYXRlPFQ+KGVu
Y29kZXIsIHNpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBkc3RbaV0sIGFycmF5W2ldKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZvaWQgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFNvdXJjZSogYXJyYXksIHVuc2lnbmVkIHNpemUsIEFyZ3MuLi4g
YXJncykgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IFQqIGJ1ZmZlciA9IHRoaXMtPnRlbXBs
YXRlIGJ1ZmZlcjxUPigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBidWZmZXJbaV0sIGFycmF5
W2ldLCBhcmdzLi4uKTsKKyAgICB9Cit9OworCitjbGFzcyBDYWNoZWRTY29wZWRBcmd1bWVudHNU
YWJsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U2NvcGVkQXJndW1lbnRzVGFibGU+IHsKK3B1Ymxp
YzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTY29wZWRBcmd1bWVu
dHNUYWJsZSYgc2NvcGVkQXJndW1lbnRzVGFibGUpCisgICAgeworICAgICAgICBtX2xlbmd0aCA9
IHNjb3BlZEFyZ3VtZW50c1RhYmxlLm1fbGVuZ3RoOworICAgICAgICBtX2FyZ3VtZW50cy5lbmNv
ZGUoZW5jb2Rlciwgc2NvcGVkQXJndW1lbnRzVGFibGUubV9hcmd1bWVudHMuZ2V0KCksIG1fbGVu
Z3RoKTsKKyAgICB9CisKKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2Nv
cGVkQXJndW1lbnRzVGFibGUgPSBTY29wZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRlKGRlY29kZXIu
dm0oKSwgbV9sZW5ndGgpOworICAgICAgICBtX2FyZ3VtZW50cy5kZWNvZGUoZGVjb2Rlciwgc2Nv
cGVkQXJndW1lbnRzVGFibGUtPm1fYXJndW1lbnRzLmdldCgpLCBtX2xlbmd0aCk7CisgICAgICAg
IHJldHVybiBzY29wZWRBcmd1bWVudHNUYWJsZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWlu
dDMyX3QgbV9sZW5ndGg7CisgICAgQ2FjaGVkQXJyYXk8U2NvcGVPZmZzZXQ+IG1fYXJndW1lbnRz
OworfTsKKworY2xhc3MgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8U3ltYm9sVGFibGVFbnRyeT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBzeW1ib2xUYWJsZUVudHJ5KQorICAgIHsKKyAgICAg
ICAgbV9iaXRzID0gc3ltYm9sVGFibGVFbnRyeS5tX2JpdHMgfCBTeW1ib2xUYWJsZUVudHJ5OjpT
bGltRmxhZzsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwgU3ltYm9sVGFibGVF
bnRyeSYgc3ltYm9sVGFibGVFbnRyeSkgY29uc3QKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxl
RW50cnkubV9iaXRzID0gbV9iaXRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnRwdHJfdCBt
X2JpdHM7Cit9OworCitjbGFzcyBDYWNoZWRTeW1ib2xUYWJsZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3Q8U3ltYm9sVGFibGU+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAgeworICAgICAgICBBU1NF
UlQoIXN5bWJvbFRhYmxlLm1fcmFyZURhdGEpOworICAgICAgICBtX21hcC5lbmNvZGUoZW5jb2Rl
ciwgc3ltYm9sVGFibGUubV9tYXApOworICAgICAgICBtX21heFNjb3BlT2Zmc2V0ID0gc3ltYm9s
VGFibGUubV9tYXhTY29wZU9mZnNldDsKKyAgICAgICAgbV91c2VzTm9uU3RyaWN0RXZhbCA9IHN5
bWJvbFRhYmxlLm1fdXNlc05vblN0cmljdEV2YWw7CisgICAgICAgIG1fbmVzdGVkTGV4aWNhbFNj
b3BlID0gc3ltYm9sVGFibGUubV9uZXN0ZWRMZXhpY2FsU2NvcGU7CisgICAgICAgIG1fc2NvcGVU
eXBlID0gc3ltYm9sVGFibGUubV9zY29wZVR5cGU7CisgICAgICAgIG1fYXJndW1lbnRzLmVuY29k
ZShlbmNvZGVyLCBzeW1ib2xUYWJsZS5tX2FyZ3VtZW50cy5nZXQoKSk7CisgICAgfQorCisgICAg
U3ltYm9sVGFibGUqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZShkZWNvZGVy
LnZtKCkpOworICAgICAgICBtX21hcC5kZWNvZGUoZGVjb2Rlciwgc3ltYm9sVGFibGUtPm1fbWFw
KTsKKyAgICAgICAgc3ltYm9sVGFibGUtPm1fbWF4U2NvcGVPZmZzZXQgPSBtX21heFNjb3BlT2Zm
c2V0OworICAgICAgICBzeW1ib2xUYWJsZS0+bV91c2VzTm9uU3RyaWN0RXZhbCA9IG1fdXNlc05v
blN0cmljdEV2YWw7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX25lc3RlZExleGljYWxTY29wZSA9
IG1fbmVzdGVkTGV4aWNhbFNjb3BlOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9zY29wZVR5cGUg
PSBtX3Njb3BlVHlwZTsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNjb3BlZEFyZ3Vt
ZW50c1RhYmxlID0gbV9hcmd1bWVudHMuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoc2Nv
cGVkQXJndW1lbnRzVGFibGUpCisgICAgICAgICAgICBzeW1ib2xUYWJsZS0+bV9hcmd1bWVudHMu
c2V0KGRlY29kZXIudm0oKSwgc3ltYm9sVGFibGUsIHNjb3BlZEFyZ3VtZW50c1RhYmxlKTsKKyAg
ICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRI
YXNoTWFwPENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIENhY2hlZFN5bWJv
bFRhYmxlRW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxVbmlxdWVk
U3RyaW5nSW1wbD4+LCBTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0cz4gbV9tYXA7CisgICAgU2Nv
cGVPZmZzZXQgbV9tYXhTY29wZU9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3VzZXNOb25TdHJpY3RF
dmFsIDogMTsKKyAgICB1bnNpZ25lZCBtX25lc3RlZExleGljYWxTY29wZSA6IDE7CisgICAgdW5z
aWduZWQgbV9zY29wZVR5cGUgOiAzOworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGNhY2hl
ZCB0aGlzIGV2ZW50dWFsbHk/CisgICAgLy8gQ2FjaGVkUHRyPFN5bWJvbFRhYmxlUmFyZURhdGE+
IHJhcmVEYXRhOworICAgIENhY2hlZFB0cjxDYWNoZWRTY29wZWRBcmd1bWVudHNUYWJsZT4gbV9h
cmd1bWVudHM7Cit9OworCitjbGFzcyBDYWNoZWRKU1ZhbHVlOworY2xhc3MgQ2FjaGVkSW1tdXRh
YmxlQnV0dGVyZmx5IDogcHVibGljIENhY2hlZE9iamVjdDxKU0ltbXV0YWJsZUJ1dHRlcmZseT4g
eworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIEpTSW1tdXRhYmxl
QnV0dGVyZmx5JiBpbW11dGFibGVCdXR0ZXJmbHkpCisgICAgeworICAgICAgICBtX2xlbmd0aCA9
IGltbXV0YWJsZUJ1dHRlcmZseS5sZW5ndGgoKTsKKyAgICAgICAgbV9pbmRleGluZ1R5cGUgPSBp
bW11dGFibGVCdXR0ZXJmbHkuaW5kZXhpbmdUeXBlQW5kTWlzYygpOworICAgICAgICBpZiAoaGFz
RG91YmxlKG1faW5kZXhpbmdUeXBlKSkKKyAgICAgICAgICAgIG1fY2FjaGVkRG91Ymxlcy5lbmNv
ZGUoZW5jb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LnRvQnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNE
b3VibGUoKS5kYXRhKCksIG1fbGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9j
YWNoZWRWYWx1ZXMuZW5jb2RlKGVuY29kZXIsIGltbXV0YWJsZUJ1dHRlcmZseS50b0J1dHRlcmZs
eSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2xlbmd0aCk7CisgICAgfQorCisgICAgSlNJbW11
dGFibGVCdXR0ZXJmbHkqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IEpTSW1tdXRh
YmxlQnV0dGVyZmx5OjpjcmVhdGUoZGVjb2Rlci52bSgpLCBtX2luZGV4aW5nVHlwZSwgbV9sZW5n
dGgpOworICAgICAgICBpZiAoaGFzRG91YmxlKG1faW5kZXhpbmdUeXBlKSkKKyAgICAgICAgICAg
IG1fY2FjaGVkRG91Ymxlcy5kZWNvZGUoZGVjb2RlciwgaW1tdXRhYmxlQnV0dGVyZmx5LT50b0J1
dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBtX2xlbmd0aCwgaW1tdXRhYmxl
QnV0dGVyZmx5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYWNoZWRWYWx1ZXMuZGVj
b2RlKGRlY29kZXIsIGltbXV0YWJsZUJ1dHRlcmZseS0+dG9CdXR0ZXJmbHkoKS0+Y29udGlndW91
cygpLmRhdGEoKSwgbV9sZW5ndGgsIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgIHJldHVy
biBpbW11dGFibGVCdXR0ZXJmbHk7CisgICAgfQorCitwcml2YXRlOgorICAgIEluZGV4aW5nVHlw
ZSBtX2luZGV4aW5nVHlwZTsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB1bmlvbiB7Cisg
ICAgICAgIENhY2hlZEFycmF5PGRvdWJsZT4gbV9jYWNoZWREb3VibGVzOworICAgICAgICBDYWNo
ZWRBcnJheTxDYWNoZWRKU1ZhbHVlLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY2FjaGVkVmFs
dWVzOworICAgIH07Cit9OworCitjbGFzcyBDYWNoZWRSZWdFeHAgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFJlZ0V4cD4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFJlZ0V4cCYgcmVnRXhwKQorICAgIHsKKyAgICAgICAgbV9wYXR0ZXJuU3RyaW5nLmVu
Y29kZShlbmNvZGVyLCByZWdFeHAubV9wYXR0ZXJuU3RyaW5nKTsKKyAgICAgICAgbV9mbGFncyA9
IHJlZ0V4cC5tX2ZsYWdzOworICAgIH0KKworICAgIFJlZ0V4cCogZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmcgcGF0dGVybiB7IG1fcGF0dGVyblN0
cmluZy5kZWNvZGUoZGVjb2RlcikgfTsKKyAgICAgICAgcmV0dXJuIFJlZ0V4cDo6Y3JlYXRlKGRl
Y29kZXIudm0oKSwgcGF0dGVybiwgbV9mbGFncyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENh
Y2hlZFN0cmluZyBtX3BhdHRlcm5TdHJpbmc7CisgICAgUmVnRXhwRmxhZ3MgbV9mbGFnczsKK307
CisKK2NsYXNzIENhY2hlZFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvciA6IHB1YmxpYyBDYWNoZWRP
YmplY3Q8VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yJiB0ZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3IpCisgICAgeworICAgICAgICBtX3Jhd1N0cmluZ3MuZW5jb2Rl
KGVuY29kZXIsIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5yYXdTdHJpbmdzKCkpOworICAgICAg
ICBtX2Nvb2tlZFN0cmluZ3MuZW5jb2RlKGVuY29kZXIsIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
ci5jb29rZWRTdHJpbmdzKCkpOworICAgIH0KKworICAgIFJlZjxUZW1wbGF0ZU9iamVjdERlc2Ny
aXB0b3I+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yOjpTdHJpbmdWZWN0b3IgZGVjb2RlZFJhd1N0cmluZ3M7Cisg
ICAgICAgIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6T3B0aW9uYWxTdHJpbmdWZWN0b3IgZGVj
b2RlZENvb2tlZFN0cmluZ3M7CisgICAgICAgIG1fcmF3U3RyaW5ncy5kZWNvZGUoZGVjb2Rlciwg
ZGVjb2RlZFJhd1N0cmluZ3MpOworICAgICAgICBtX2Nvb2tlZFN0cmluZ3MuZGVjb2RlKGRlY29k
ZXIsIGRlY29kZWRDb29rZWRTdHJpbmdzKTsKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvcjo6Y3JlYXRlKFdURk1vdmUoZGVjb2RlZFJhd1N0cmluZ3MpLCBXVEZNb3ZlKGRl
Y29kZWRDb29rZWRTdHJpbmdzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFZlY3Rv
cjxDYWNoZWRTdHJpbmcsIDQ+IG1fcmF3U3RyaW5nczsKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVk
T3B0aW9uYWw8Q2FjaGVkU3RyaW5nPiwgND4gbV9jb29rZWRTdHJpbmdzOworfTsKKworY2xhc3Mg
Q2FjaGVkQmlnSW50IDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PEpTQmlnSW50PiB7Citw
dWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgSlNCaWdJbnQmIGJpZ0lu
dCkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gYmlnSW50Lmxlbmd0aCgpOworICAgICAgICBt
X3NpZ24gPSBiaWdJbnQuc2lnbigpOworCisgICAgICAgIGlmICghbV9sZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHNpemVvZihKU0JpZ0ludDo6
RGlnaXQpICogbV9sZW5ndGg7CisgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHRoaXMtPmFsbG9j
YXRlKGVuY29kZXIsIHNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBiaWdJbnQuZGF0YVN0
b3JhZ2UoKSwgc2l6ZSk7CisgICAgfQorCisgICAgSlNCaWdJbnQqIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50
OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKGRlY29kZXIudm0oKSwgbV9sZW5ndGgpOworICAg
ICAgICBiaWdJbnQtPnNldFNpZ24obV9zaWduKTsKKyAgICAgICAgbWVtY3B5KGJpZ0ludC0+ZGF0
YVN0b3JhZ2UoKSwgdGhpcy0+YnVmZmVyKCksIHNpemVvZihKU0JpZ0ludDo6RGlnaXQpICogbV9s
ZW5ndGgpOworICAgICAgICByZXR1cm4gYmlnSW50OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1
bnNpZ25lZCBtX2xlbmd0aDsKKyAgICBib29sIG1fc2lnbjsKK307CisKK2NsYXNzIENhY2hlZEpT
VmFsdWUgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8V3JpdGVCYXJyaWVyPFVua25vd24+
PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV3Jp
dGVCYXJyaWVyPFVua25vd24+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gdmFs
dWUuZ2V0KCk7CisKKyAgICAgICAgaWYgKCF2LmlzQ2VsbCgpIHx8IHYuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6SlNWYWx1ZTsKKyAgICAgICAgICAgICp0
aGlzLT5hbGxvY2F0ZTxFbmNvZGVkSlNWYWx1ZT4oZW5jb2RlcikgPSBKU1ZhbHVlOjplbmNvZGUo
dik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBKU0NlbGwqIGNl
bGwgPSB2LmFzQ2VsbCgpOworICAgICAgICBWTSYgdm0gPSBlbmNvZGVyLnZtKCk7CisKKyAgICAg
ICAgaWYgKGF1dG8qIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KHZt
LCBjZWxsKSkgeworICAgICAgICAgICAgbV90eXBlID0gRW5jb2RlZFR5cGU6OlN5bWJvbFRhYmxl
OworICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkU3ltYm9sVGFibGU+KGVuY29kZXIp
LT5lbmNvZGUoZW5jb2RlciwgKnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBzdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpTU3Ry
aW5nKj4odm0sIGNlbGwpKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6U3Ry
aW5nOworICAgICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy0+dHJ5R2V0VmFsdWUo
KS5pbXBsKCk7CisgICAgICAgICAgICB0aGlzLT5hbGxvY2F0ZTxDYWNoZWRVbmlxdWVkU3RyaW5n
SW1wbD4oZW5jb2RlciktPmVuY29kZShlbmNvZGVyLCAqaW1wbCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byogaW1tdXRhYmxlQnV0dGVyZmx5ID0g
anNEeW5hbWljQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KHZtLCBjZWxsKSkgeworICAgICAg
ICAgICAgbV90eXBlID0gRW5jb2RlZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseTsKKyAgICAgICAg
ICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZEltbXV0YWJsZUJ1dHRlcmZseT4oZW5jb2RlciktPmVu
Y29kZShlbmNvZGVyLCAqaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiByZWdleHAgPSBqc0R5bmFtaWNDYXN0PFJl
Z0V4cCo+KHZtLCBjZWxsKSkgeworICAgICAgICAgICAgbV90eXBlID0gRW5jb2RlZFR5cGU6OlJl
Z0V4cDsKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFJlZ0V4cD4oZW5jb2Rlcikt
PmVuY29kZShlbmNvZGVyLCAqcmVnZXhwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhdXRvKiB0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IgPSBqc0R5bmFt
aWNDYXN0PEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yKj4odm0sIGNlbGwpKSB7CisgICAgICAg
ICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOworICAg
ICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPihl
bmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsIHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci0+ZGVzY3Jp
cHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChh
dXRvKiBiaWdJbnQgPSBqc0R5bmFtaWNDYXN0PEpTQmlnSW50Kj4odm0sIGNlbGwpKSB7CisgICAg
ICAgICAgICBtX3R5cGUgPSBFbmNvZGVkVHlwZTo6QmlnSW50OworICAgICAgICAgICAgdGhpcy0+
YWxsb2NhdGU8Q2FjaGVkQmlnSW50PihlbmNvZGVyKS0+ZW5jb2RlKGVuY29kZXIsICpiaWdJbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlLCBjb25zdCBKU0NlbGwqIG93bmVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgSlNWYWx1ZSB2OworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkg
eworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpKU1ZhbHVlOgorICAgICAgICAgICAgdiA9IEpT
VmFsdWU6OmRlY29kZSgqdGhpcy0+YnVmZmVyPEVuY29kZWRKU1ZhbHVlPigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpTeW1ib2xUYWJsZToKKyAgICAg
ICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkU3ltYm9sVGFibGU+KCktPmRlY29kZShkZWNv
ZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpTdHJp
bmc6IHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsID0gdGhpcy0+YnVmZmVy
PENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAg
ICB2ID0gSlNTdHJpbmc6OmNyZWF0ZShkZWNvZGVyLnZtKCksIGFkb3B0UmVmKCppbXBsKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVuY29kZWRUeXBlOjpJ
bW11dGFibGVCdXR0ZXJmbHk6CisgICAgICAgICAgICB2ID0gdGhpcy0+YnVmZmVyPENhY2hlZElt
bXV0YWJsZUJ1dHRlcmZseT4oKS0+ZGVjb2RlKGRlY29kZXIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlJlZ0V4cDoKKyAgICAgICAgICAgIHYgPSB0aGlz
LT5idWZmZXI8Q2FjaGVkUmVnRXhwPigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFbmNvZGVkVHlwZTo6VGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
OgorICAgICAgICAgICAgdiA9IEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUoZGVj
b2Rlci52bSgpLCB0aGlzLT5idWZmZXI8Q2FjaGVkVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yPigp
LT5kZWNvZGUoZGVjb2RlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5j
b2RlZFR5cGU6OkJpZ0ludDoKKyAgICAgICAgICAgIHYgPSB0aGlzLT5idWZmZXI8Q2FjaGVkQmln
SW50PigpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICAgICAgdmFsdWUuc2V0KGRlY29kZXIudm0oKSwgb3duZXIsIHYpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEVuY29kZWRUeXBlIDogdWludDhfdCB7CisgICAgICAg
IEpTVmFsdWUsCisgICAgICAgIFN5bWJvbFRhYmxlLAorICAgICAgICBTdHJpbmcsCisgICAgICAg
IEltbXV0YWJsZUJ1dHRlcmZseSwKKyAgICAgICAgUmVnRXhwLAorICAgICAgICBUZW1wbGF0ZU9i
amVjdERlc2NyaXB0b3IsCisgICAgICAgIEJpZ0ludCwKKyAgICB9OworCisgICAgRW5jb2RlZFR5
cGUgbV90eXBlOworfTsKKworY2xhc3MgQ2FjaGVkSW5zdHJ1Y3Rpb25TdHJlYW0gOiBwdWJsaWMg
Q2FjaGVkT2JqZWN0PEluc3RydWN0aW9uU3RyZWFtPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIHN0cmVhbSkKKyAg
ICB7CisgICAgICAgIG1faW5zdHJ1Y3Rpb25zLmVuY29kZShlbmNvZGVyLCBzdHJlYW0ubV9pbnN0
cnVjdGlvbnMpOworICAgIH0KKworICAgIEluc3RydWN0aW9uU3RyZWFtKiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90LCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gaW5zdHJ1Y3Rpb25zVmVjdG9yOworICAgICAgICBtX2luc3RydWN0
aW9ucy5kZWNvZGUoZGVjb2RlciwgaW5zdHJ1Y3Rpb25zVmVjdG9yKTsKKyAgICAgICAgcmV0dXJu
IG5ldyBJbnN0cnVjdGlvblN0cmVhbShXVEZNb3ZlKGluc3RydWN0aW9uc1ZlY3RvcikpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0b3I8dWludDhfdCwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IG1faW5zdHJ1Y3Rpb25zOworfTsKKworY2xhc3MgQ2FjaGVkTWV0YWRhdGFUYWJs
ZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRNZXRhZGF0YVRhYmxlPiB7CitwdWJsaWM6
CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkTWV0YWRhdGFUYWJsZSYg
bWV0YWRhdGFUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YVRhYmxlLm1faXNG
aW5hbGl6ZWQpOworICAgICAgICBtX2hhc01ldGFkYXRhID0gbWV0YWRhdGFUYWJsZS5tX2hhc01l
dGFkYXRhOworICAgICAgICBpZiAoIW1faGFzTWV0YWRhdGEpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IFVubGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZz
ZXRUYWJsZUVudHJpZXM7IGktLTspCisgICAgICAgICAgICBtX21ldGFkYXRhW2ldID0gbWV0YWRh
dGFUYWJsZS5idWZmZXIoKVtpXTsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiwg
VW5saW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YVRhYmxlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgbWV0YWRhdGFUYWJsZS5tX2lzRmluYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgbWV0YWRhdGFU
YWJsZS5tX2lzTGlua2VkID0gZmFsc2U7CisgICAgICAgIG1ldGFkYXRhVGFibGUubV9oYXNNZXRh
ZGF0YSA9IG1faGFzTWV0YWRhdGE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IFVubGlua2Vk
TWV0YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM7IGktLTspCisgICAgICAgICAgICBt
ZXRhZGF0YVRhYmxlLmJ1ZmZlcigpW2ldID0gbV9tZXRhZGF0YVtpXTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgYm9vbCBtX2hhc01ldGFkYXRhOworICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIFVu
bGlua2VkTWV0YWRhdGFUYWJsZTo6c19vZmZzZXRUYWJsZUVudHJpZXM+IG1fbWV0YWRhdGE7Cit9
OworCitjbGFzcyBDYWNoZWRTb3VyY2VPcmlnaW4gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJj
ZU9yaWdpbj4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFNvdXJjZU9yaWdpbiYgc291cmNlT3JpZ2luKQorICAgIHsKKyAgICAgICAgbV9zdHJpbmcu
ZW5jb2RlKGVuY29kZXIsIHNvdXJjZU9yaWdpbi5zdHJpbmcoKSk7CisgICAgfQorCisgICAgU291
cmNlT3JpZ2luIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFNvdXJjZU9yaWdpbiB7IG1fc3RyaW5nLmRlY29kZShkZWNvZGVyKSB9OworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDYWNoZWRTdHJpbmcgbV9zdHJpbmc7Cit9OworCitjbGFzcyBDYWNo
ZWRUZXh0UG9zaXRpb24gOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFRleHRQb3NpdGlvbj4geworcHVi
bGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImLCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9u
KQorICAgIHsKKyAgICAgICAgbV9saW5lID0gdGV4dFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJ
bnQoKTsKKyAgICAgICAgbV9jb2x1bW4gPSB0ZXh0UG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2Vk
SW50KCk7CisgICAgfQorCisgICAgVGV4dFBvc2l0aW9uIGRlY29kZShEZWNvZGVyJikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24geyBPcmRpbmFsTnVtYmVyOjpmcm9t
WmVyb0Jhc2VkSW50KG1fbGluZSksIE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9j
b2x1bW4pIH07CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX2xpbmU7CisgICAgaW50IG1f
Y29sdW1uOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgQ2FjaGVk
VHlwZT4KK2NsYXNzIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGUgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFNvdXJjZT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIG1f
c291cmNlT3JpZ2luLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zb3VyY2VPcmlnaW4o
KSk7CisgICAgICAgIG1fdXJsLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci51cmwoKSk7
CisgICAgICAgIG1fc291cmNlVVJMRGlyZWN0aXZlLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92
aWRlci5zb3VyY2VVUkwoKSk7CisgICAgICAgIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5l
bmNvZGUoZW5jb2Rlciwgc291cmNlUHJvdmlkZXIuc291cmNlTWFwcGluZ1VSTCgpKTsKKyAgICAg
ICAgbV9zdGFydFBvc2l0aW9uLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5zdGFydFBv
c2l0aW9uKCkpOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNv
dXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcikgY29uc3QKKyAgICB7CisgICAgICAgIHNvdXJj
ZVByb3ZpZGVyLnNldFNvdXJjZVVSTERpcmVjdGl2ZShtX3NvdXJjZVVSTERpcmVjdGl2ZS5kZWNv
ZGUoZGVjb2RlcikpOworICAgICAgICBzb3VyY2VQcm92aWRlci5zZXRTb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZS5kZWNvZGUoZGVjb2RlcikpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIENhY2hlZFNvdXJjZU9yaWdpbiBtX3NvdXJjZU9yaWdp
bjsKKyAgICBDYWNoZWRTdHJpbmcgbV91cmw7CisgICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlVVJM
RGlyZWN0aXZlOworICAgIENhY2hlZFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7
CisgICAgQ2FjaGVkVGV4dFBvc2l0aW9uIG1fc3RhcnRQb3NpdGlvbjsKK307CisKK2NsYXNzIENh
Y2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyIDogcHVibGljIENhY2hlZFNvdXJjZVByb3ZpZGVyU2hh
cGU8U3RyaW5nU291cmNlUHJvdmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPiB7Cisg
ICAgdXNpbmcgQmFzZSA9IENhY2hlZFNvdXJjZVByb3ZpZGVyU2hhcGU8U3RyaW5nU291cmNlUHJv
dmlkZXIsIENhY2hlZFN0cmluZ1NvdXJjZVByb3ZpZGVyPjsKKworcHVibGljOgorICAgIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZ1NvdXJjZVByb3ZpZGVyJiBzb3Vy
Y2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBzb3VyY2VQ
cm92aWRlcik7CisgICAgICAgIG1fc291cmNlLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRl
ci5zb3VyY2UoKS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICBTdHJpbmdTb3VyY2VQcm92aWRl
ciogZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3Vy
Y2VUeXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nIGRlY29kZWRTb3VyY2UgPSBtX3Nv
dXJjZS5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFNvdXJjZU9yaWdpbiBkZWNvZGVkU291cmNl
T3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOworICAgICAgICBTdHJpbmcg
ZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgVGV4dFBvc2l0aW9u
IGRlY29kZWRTdGFydFBvc2l0aW9uID0gbV9zdGFydFBvc2l0aW9uLmRlY29kZShkZWNvZGVyKTsK
KworICAgICAgICBSZWY8U3RyaW5nU291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gU3Ry
aW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShkZWNvZGVkU291cmNlLCBkZWNvZGVkU291cmNlT3Jp
Z2luLCBVUkwoVVJMKCksIGRlY29kZWRVUkwpLCBkZWNvZGVkU3RhcnRQb3NpdGlvbiwgc291cmNl
VHlwZSk7CisgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VQcm92aWRlci5nZXQo
KSk7CisgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIubGVha1JlZigpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBDYWNoZWRTdHJpbmcgbV9zb3VyY2U7Cit9OworCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorY2xhc3MgQ2FjaGVkV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciA6IHB1Ymxp
YyBDYWNoZWRTb3VyY2VQcm92aWRlclNoYXBlPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIsIENh
Y2hlZFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVk
U291cmNlUHJvdmlkZXJTaGFwZTxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyLCBDYWNoZWRXZWJB
c3NlbWJseVNvdXJjZVByb3ZpZGVyPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXImIHNvdXJjZVByb3Zp
ZGVyKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZW5jb2RlKGVuY29kZXIsIHNvdXJjZVByb3ZpZGVy
KTsKKyAgICAgICAgbV9kYXRhLmVuY29kZShlbmNvZGVyLCBzb3VyY2VQcm92aWRlci5kYXRhKCkp
OworICAgIH0KKworICAgIFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZWRE
YXRhOworICAgICAgICBTb3VyY2VPcmlnaW4gZGVjb2RlZFNvdXJjZU9yaWdpbiA9IG1fc291cmNl
T3JpZ2luLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgU3RyaW5nIGRlY29kZWRVUkwgPSBtX3Vy
bC5kZWNvZGUoZGVjb2Rlcik7CisKKyAgICAgICAgbV9kYXRhLmRlY29kZShkZWNvZGVyLCBkZWNv
ZGVkRGF0YSk7CisKKyAgICAgICAgUmVmPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKFdURk1vdmUoZGVj
b2RlZERhdGEpLCBkZWNvZGVkU291cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRVUkwpKTsK
KyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKwor
ICAgICAgICByZXR1cm4gJnNvdXJjZVByb3ZpZGVyLmxlYWtSZWYoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQ2FjaGVkVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKK307CisjZW5kaWYKKworY2xh
c3MgQ2FjaGVkU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8U291
cmNlUHJvdmlkZXI+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAgICBt
X3NvdXJjZVR5cGUgPSBzb3VyY2VQcm92aWRlci5zb3VyY2VUeXBlKCk7CisgICAgICAgIHN3aXRj
aCAobV9zb3VyY2VUeXBlKSB7CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBl
OjpQcm9ncmFtOgorICAgICAgICBjYXNlIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxl
OgorICAgICAgICAgICAgdGhpcy0+YWxsb2NhdGU8Q2FjaGVkU3RyaW5nU291cmNlUHJvdmlkZXI+
KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmdT
b3VyY2VQcm92aWRlciY+KHNvdXJjZVByb3ZpZGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VU
eXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAgICAgIHRoaXMtPmFsbG9jYXRlPENhY2hlZFdlYkFz
c2VtYmx5U291cmNlUHJvdmlkZXI+KGVuY29kZXIpLT5lbmNvZGUoZW5jb2RlciwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyJj4oc291cmNlUHJvdmlkZXIp
KTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgU291cmNlUHJvdmlkZXIqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgc3dpdGNoIChtX3NvdXJjZVR5cGUpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VQcm92
aWRlclNvdXJjZVR5cGU6OlByb2dyYW06CisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3Vy
Y2VUeXBlOjpNb2R1bGU6CisgICAgICAgICAgICByZXR1cm4gdGhpcy0+YnVmZmVyPENhY2hlZFN0
cmluZ1NvdXJjZVByb3ZpZGVyPigpLT5kZWNvZGUoZGVjb2RlciwgbV9zb3VyY2VUeXBlKTsKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGNhc2UgU291cmNlUHJvdmlkZXJTb3VyY2VU
eXBlOjpXZWJBc3NlbWJseToKKyAgICAgICAgICAgIHJldHVybiB0aGlzLT5idWZmZXI8Q2FjaGVk
V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4oKS0+ZGVjb2RlKGRlY29kZXIpOworI2VuZGlmCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIFNvdXJjZVByb3ZpZGVyU291cmNl
VHlwZSBtX3NvdXJjZVR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2U+CitjbGFz
cyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8U291
cmNlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAgbV9wcm92aWRl
ci5lbmNvZGUoZW5jb2Rlciwgc291cmNlQ29kZS5tX3Byb3ZpZGVyLmdldCgpKTsKKyAgICAgICAg
bV9zdGFydE9mZnNldCA9IHNvdXJjZUNvZGUuc3RhcnRPZmZzZXQoKTsKKyAgICAgICAgbV9lbmRP
ZmZzZXQgPSBzb3VyY2VDb2RlLmVuZE9mZnNldCgpOworICAgIH0KKworICAgIHZvaWQgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFVubGlua2VkU291cmNlQ29kZSYgc291cmNlQ29kZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHNvdXJjZUNvZGUubV9wcm92aWRlciA9IG1fcHJvdmlkZXIuZGVjb2Rl
KGRlY29kZXIpOworICAgICAgICBzb3VyY2VDb2RlLm1fc3RhcnRPZmZzZXQgPSBtX3N0YXJ0T2Zm
c2V0OworICAgICAgICBzb3VyY2VDb2RlLm1fZW5kT2Zmc2V0ID0gbV9lbmRPZmZzZXQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIENhY2hlZFB0cjxDYWNoZWRTb3VyY2VQcm92aWRlcj4gbV9wcm92
aWRlcjsKKyAgICBpbnQgbV9zdGFydE9mZnNldDsKKyAgICBpbnQgbV9lbmRPZmZzZXQ7Cit9Owor
CisKK2NsYXNzIENhY2hlZFVubGlua2VkU291cmNlQ29kZSA6IHB1YmxpYyBDYWNoZWRVbmxpbmtl
ZFNvdXJjZUNvZGVTaGFwZTxVbmxpbmtlZFNvdXJjZUNvZGU+IHsgfTsKKworY2xhc3MgQ2FjaGVk
U291cmNlQ29kZSA6IHB1YmxpYyBDYWNoZWRVbmxpbmtlZFNvdXJjZUNvZGVTaGFwZTxTb3VyY2VD
b2RlPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZFVubGlua2VkU291cmNlQ29kZVNoYXBlPFNv
dXJjZUNvZGU+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29k
ZShlbmNvZGVyLCBzb3VyY2VDb2RlKTsKKyAgICAgICAgbV9maXJzdExpbmUgPSBzb3VyY2VDb2Rl
LmZpcnN0TGluZSgpLnplcm9CYXNlZEludCgpOworICAgICAgICBtX3N0YXJ0Q29sdW1uID0gc291
cmNlQ29kZS5zdGFydENvbHVtbigpLnplcm9CYXNlZEludCgpOworICAgIH0KKworICAgIHZvaWQg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIGNvbnN0Cisg
ICAgeworICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlQ29kZSk7CisgICAgICAg
IHNvdXJjZUNvZGUubV9maXJzdExpbmUgPSBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50
KG1fZmlyc3RMaW5lKTsKKyAgICAgICAgc291cmNlQ29kZS5tX3N0YXJ0Q29sdW1uID0gT3JkaW5h
bE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX3N0YXJ0Q29sdW1uKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgaW50IG1fZmlyc3RMaW5lOworICAgIGludCBtX3N0YXJ0Q29sdW1uOworfTsKKwor
Y2xhc3MgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29k
ZXImLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOworICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBkZWNvZGUoRGVjb2RlciYpIGNvbnN0OworCisgICAgdW5zaWduZWQg
Zmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVPZmZzZXQ7IH0KKyAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQorICAg
IHVuc2lnbmVkIHVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3Vu
bGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7IH0KKyAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlTdGFy
dENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47IH0KKyAg
ICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkQm9keUVuZENvbHVtbjsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CisgICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7IH0KKyAgICB1
bnNpZ25lZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQ
cm9maWxpbmdTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdFbmRPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KKyAgICB1bnNp
Z25lZCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH0K
KworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7
IH0KKyAgICBTb3VyY2VQYXJzZU1vZGUgc291cmNlUGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VQYXJzZU1vZGU7IH0KKworICAgIHVuc2lnbmVkIGlzSW5TdHJpY3RDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsgfQorICAgIHVuc2lnbmVkIGhhc0Nh
cHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsg
fQorICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1
aWx0aW5GdW5jdGlvbjsgfQorICAgIHVuc2lnbmVkIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0
cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rv
cjsgfQorICAgIHVuc2lnbmVkIGNvbnN0cnVjdEFiaWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0cnVjdEFiaWxpdHk7IH0KKyAgICB1bnNpZ25lZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZDsgfQorICAgIHVuc2lnbmVkIGZ1bmN0aW9uTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25Nb2RlOyB9CisgICAgdW5zaWduZWQgc2NyaXB0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0TW9kZTsgfQorICAgIHVuc2lnbmVkIHN1cGVyQmlu
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3VwZXJCaW5kaW5nOyB9CisgICAgdW5zaWduZWQgZGVy
aXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVkQ29udGV4dFR5cGU7IH0K
KworICAgIElkZW50aWZpZXIgbmFtZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdCB7IHJldHVybiBt
X25hbWUuZGVjb2RlKGRlY29kZXIpOyB9CisgICAgSWRlbnRpZmllciBlY21hTmFtZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdCB7IHJldHVybiBtX2VjbWFOYW1lLmRlY29kZShkZWNvZGVyKTsgfQor
ICAgIElkZW50aWZpZXIgaW5mZXJyZWROYW1lKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0
dXJuIG1faW5mZXJyZWROYW1lLmRlY29kZShkZWNvZGVyKTsgfQorCitwcml2YXRlOgorICAgIHVu
c2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OworICAg
IHVuc2lnbmVkIG1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKKyAgICB1bnNpZ25lZCBtX3Vu
bGlua2VkQm9keVN0YXJ0Q29sdW1uOworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5RW5kQ29s
dW1uOworICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9zb3VyY2VM
ZW5ndGg7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgdW5zaWdu
ZWQgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbV90eXBlUHJvZmls
aW5nRW5kT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyQ291bnQ7CisgICAgQ29kZUZl
YXR1cmVzIG1fZmVhdHVyZXM7CisgICAgU291cmNlUGFyc2VNb2RlIG1fc291cmNlUGFyc2VNb2Rl
OworICAgIHVuc2lnbmVkIG1faXNJblN0cmljdENvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOworICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRnVuY3Rp
b24gOiAxOworICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3Ig
OiAxOworICAgIHVuc2lnbmVkIG1fY29uc3RydWN0QWJpbGl0eTogMTsKKyAgICB1bnNpZ25lZCBt
X2NvbnN0cnVjdG9yS2luZCA6IDI7CisgICAgdW5zaWduZWQgbV9mdW5jdGlvbk1vZGUgOiAyOyAv
LyBGdW5jdGlvbk1vZGUKKyAgICB1bnNpZ25lZCBtX3NjcmlwdE1vZGU6IDE7IC8vIEpTUGFyc2Vy
U2NyaXB0TW9kZQorICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKKyAgICB1bnNpZ25l
ZCBtX2Rlcml2ZWRDb250ZXh0VHlwZTogMjsKKworICAgIENhY2hlZFNvdXJjZUNvZGUgbV9jbGFz
c1NvdXJjZTsKKworICAgIENhY2hlZElkZW50aWZpZXIgbV9uYW1lOworICAgIENhY2hlZElkZW50
aWZpZXIgbV9lY21hTmFtZTsKKyAgICBDYWNoZWRJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwor
CisgICAgQ2FjaGVkVmFyaWFibGVFbnZpcm9ubWVudCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVz
OworCisgICAgQ2FjaGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbDsKKyAgICBD
YWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorY2xhc3MgQ2FjaGVkQ29kZUJsb2NrIDogcHVi
bGljIENhY2hlZE9iamVjdDxDb2RlQmxvY2tUeXBlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrJik7CisgICAgdm9pZCBkZWNvZGUo
RGVjb2RlciYsIFVubGlua2VkQ29kZUJsb2NrJikgY29uc3Q7CisKKyAgICBJbnN0cnVjdGlvblN0
cmVhbSogaW5zdHJ1Y3Rpb25zKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5z
dHJ1Y3Rpb25zLmRlY29kZShkZWNvZGVyKTsgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNS
ZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0K
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOyB9CisKKyAgICBTdHJpbmcgc291cmNlVVJMRGlyZWN0
aXZlKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVVJMRGlyZWN0aXZl
LmRlY29kZShkZWNvZGVyKTsgfQorICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZl
KERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTWFwcGluZ1VSTERpcmVj
dGl2ZS5kZWNvZGUoZGVjb2Rlcik7IH0KKworICAgIHVuc2lnbmVkIHVzZXNFdmFsKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VzRXZhbDsgfQorICAgIHVuc2lnbmVkIGlzU3RyaWN0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9CisgICAgdW5zaWduZWQgaXNDb25zdHJ1Y3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQorICAgIHVuc2lnbmVkIGhhc0NhcHR1
cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQor
ICAgIHVuc2lnbmVkIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0
aW5GdW5jdGlvbjsgfQorICAgIHVuc2lnbmVkIHN1cGVyQmluZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc3VwZXJCaW5kaW5nOyB9CisgICAgdW5zaWduZWQgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2NyaXB0TW9kZTsgfQorICAgIHVuc2lnbmVkIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQ7IH0KKyAgICB1bnNpZ25l
ZCBpc0NsYXNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDbGFzc0NvbnRleHQ7IH0KKyAg
ICB1bnNpZ25lZCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1
cm4gbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOyB9CisgICAgdW5zaWduZWQgY29u
c3RydWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmQ7IH0KKyAgICB1
bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Rlcml2ZWRDb250
ZXh0VHlwZTsgfQorICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZXZhbENvbnRleHRUeXBlOyB9CisgICAgdW5zaWduZWQgaGFzVGFpbENhbGxzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQorICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CisKKyAgICBpbnQgbnVtVmFycygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX251bUNhbGxlZUxvY2FsczsgfQorICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CisKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBj
b25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VNb2RlOyB9CisgICAgQ29kZVR5cGUgY29kZVR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisKKyAgICBVbmxpbmtlZENvZGVCbG9jazo6
UmFyZURhdGEqIHJhcmVEYXRhKERlY29kZXImIGRlY29kZXIpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEuZGVjb2RlQXNQdHIoZGVjb2Rlcik7IH0KKworcHJpdmF0ZToKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV90aGlzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3Rl
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKworICAgIHVu
c2lnbmVkIG1fdXNlc0V2YWwgOiAxOworICAgIHVuc2lnbmVkIG1faXNTdHJpY3RNb2RlIDogMTsK
KyAgICB1bnNpZ25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1faGFzQ2Fw
dHVyZWRWYXJpYWJsZXMgOiAxOworICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRnVuY3Rpb24gOiAx
OworICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKKyAgICB1bnNpZ25lZCBtX3Njcmlw
dE1vZGU6IDE7CisgICAgdW5zaWduZWQgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0IDogMTsKKyAg
ICB1bnNpZ25lZCBtX2lzQ2xhc3NDb250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCBtX3dhc0NvbXBp
bGVkV2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOworICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JL
aW5kIDogMjsKKyAgICB1bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZSA6IDI7CisgICAgdW5z
aWduZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1faGFzVGFpbENhbGxz
IDogMTsKKworICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OworICAgIHVuc2lnbmVkIG1fZW5kQ29s
dW1uOworCisgICAgaW50IG1fbnVtVmFyczsKKyAgICBpbnQgbV9udW1DYWxsZWVMb2NhbHM7Cisg
ICAgaW50IG1fbnVtUGFyYW1ldGVyczsKKworICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwor
ICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKKyAgICBDb2RlVHlwZSBtX2NvZGVUeXBl
OworCisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGlua1RpbWVDb25zdGFudENvdW50PiBtX2xp
bmtUaW1lQ29uc3RhbnRzOworICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKKwor
ICAgIENhY2hlZE9wdGlvbmFsPENhY2hlZENvZGVCbG9ja1JhcmVEYXRhPiBtX3JhcmVEYXRhOwor
CisgICAgQ2FjaGVkU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOworICAgIENhY2hlZFN0cmlu
ZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CisKKyAgICBDYWNoZWRQdHI8Q2FjaGVkSW5z
dHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOworICAgIENhY2hlZFZlY3RvcjxJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOworICAgIENhY2hlZFZlY3RvcjxJbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworICAg
IENhY2hlZFZlY3RvcjxDYWNoZWRKU1ZhbHVlPiBtX2NvbnN0YW50UmVnaXN0ZXJzOworICAgIENh
Y2hlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOworICAgIENhY2hlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBt
X2V4cHJlc3Npb25JbmZvOworICAgIENhY2hlZEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCwgaW50PiBtX291dE9mTGluZUp1bXBUYXJnZXRzOworCisgICAgQ2FjaGVkVmVjdG9yPENh
Y2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7
CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CisgICAg
Q2FjaGVkVmVjdG9yPENhY2hlZEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOworICAgIENhY2hlZFZl
Y3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5j
dGlvbkRlY2xzOworICAgIENhY2hlZFZlY3RvcjxDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVu
Y3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOworfTsKKworY2xhc3MgQ2FjaGVkUHJv
Z3JhbUNvZGVCbG9jayA6IHB1YmxpYyBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrPiB7CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZENvZGVCbG9jazxVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAg
ICAgICBCYXNlOjplbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrKTsKKyAgICAgICAgbV92YXJEZWNs
YXJhdGlvbnMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3ZhckRlY2xhcmF0aW9ucyk7Cisg
ICAgICAgIG1fbGV4aWNhbERlY2xhcmF0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1f
bGV4aWNhbERlY2xhcmF0aW9ucyk7CisgICAgfQorCisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAgIGNvZGVCbG9jay0+Zmlu
aXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIs
ICpjb2RlQmxvY2spOworICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucy5kZWNvZGUoZGVjb2Rlciwg
Y29kZUJsb2NrLT5tX3ZhckRlY2xhcmF0aW9ucyk7CisgICAgICAgIG1fbGV4aWNhbERlY2xhcmF0
aW9ucy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX2xleGljYWxEZWNsYXJhdGlvbnMpOwor
ICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRW
YXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25zOworICAgIENhY2hlZFZhcmlhYmxl
RW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOworfTsKKworY2xhc3MgQ2FjaGVkTW9k
dWxlQ29kZUJsb2NrIDogcHVibGljIENhY2hlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz47CisKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIGNvZGVC
bG9jaykKKyAgICB7CisgICAgICAgIEJhc2U6OmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2spOwor
ICAgICAgICBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zm
c2V0ID0gY29kZUJsb2NrLm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVn
aXN0ZXJPZmZzZXQ7CisgICAgfQorCisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkp
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhkZWNvZGVyLCAqdGhpcyk7CisgICAgICAg
IGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rlci52bSgpKTsKKyAgICAgICAgQmFzZTo6
ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAgICAgICBjb2RlQmxvY2stPm1fbW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBtX21vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OworICAgICAgICByZXR1
cm4gY29kZUJsb2NrOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9tb2R1bGVFbnZpcm9u
bWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsKK307CisKK2NsYXNzIENhY2hl
ZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVC
bG9jaz4geworICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29k
ZUJsb2NrPjsKKworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFVubGlua2VkRXZhbENvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFz
ZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgICAgIG1fdmFyaWFibGVzLmVuY29k
ZShlbmNvZGVyLCBjb2RlQmxvY2subV92YXJpYWJsZXMpOworICAgICAgICBtX2Z1bmN0aW9uSG9p
c3RpbmdDYW5kaWRhdGVzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9mdW5jdGlvbkhvaXN0
aW5nQ2FuZGlkYXRlcyk7CisgICAgfQorCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIFVubGlua2VkRXZhbENv
ZGVCbG9jayogY29kZUJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRF
dmFsQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayhk
ZWNvZGVyLCAqdGhpcyk7CisgICAgICAgIGNvZGVCbG9jay0+ZmluaXNoQ3JlYXRpb24oZGVjb2Rl
ci52bSgpKTsKKyAgICAgICAgQmFzZTo6ZGVjb2RlKGRlY29kZXIsICpjb2RlQmxvY2spOworICAg
ICAgICBtX3ZhcmlhYmxlcy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLT5tX3ZhcmlhYmxlcyk7
CisgICAgICAgIG1fZnVuY3Rpb25Ib2lzdGluZ0NhbmRpZGF0ZXMuZGVjb2RlKGRlY29kZXIsIGNv
ZGVCbG9jay0+bV9mdW5jdGlvbkhvaXN0aW5nQ2FuZGlkYXRlcyk7CisgICAgICAgIHJldHVybiBj
b2RlQmxvY2s7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFZlY3RvcjxDYWNoZWRJZGVu
dGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YXJpYWJsZXM7CisgICAgQ2FjaGVk
VmVjdG9yPENhY2hlZElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2Z1bmN0
aW9uSG9pc3RpbmdDYW5kaWRhdGVzOworfTsKKworY2xhc3MgQ2FjaGVkRnVuY3Rpb25Db2RlQmxv
Y2sgOiBwdWJsaWMgQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IHsK
KyAgICB1c2luZyBCYXNlID0gQ2FjaGVkQ29kZUJsb2NrPFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s+OworCitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQmFz
ZTo6ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jayk7CisgICAgfQorCisgICAgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPihkZWNvZGVyLnZtKCkuaGVh
cCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soZGVjb2RlciwgKnRoaXMpOworICAgICAgICBj
b2RlQmxvY2stPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CisgICAgICAgIEJhc2U6OmRl
Y29kZShkZWNvZGVyLCAqY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAg
ICB9Cit9OworCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OlVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3QgQ2FjaGVkRnVuY3Rp
b25Db2RlQmxvY2smIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2RlciwgZGVjb2Rl
ci52bSgpLnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENv
ZGVCbG9jaykKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDYWNoZWRDb2Rl
QmxvY2tUeXBlSW1wbDsKKworZW51bSBDYWNoZWRDb2RlQmxvY2tUYWcgeworICAgIENhY2hlZFBy
b2dyYW1Db2RlQmxvY2tUYWcsCisgICAgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrVGFnLAorICAgIENh
Y2hlZEV2YWxDb2RlQmxvY2tUYWcsCit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQ2FjaGVkQ29k
ZUJsb2NrVHlwZUltcGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CisgICAgdXNpbmcgdHlw
ZSA9IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWRD
b2RlQmxvY2tUYWcgdGFnID0gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzsKK307CisKK3RlbXBs
YXRlPD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBlID0gQ2FjaGVkTW9kdWxlQ29kZUJsb2NrOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZyA9IENhY2hlZE1vZHVs
ZUNvZGVCbG9ja1RhZzsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDYWNoZWRDb2RlQmxvY2tU
eXBlSW1wbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IHsKKyAgICB1c2luZyB0eXBlID0gQ2FjaGVk
RXZhbENvZGVCbG9jazsKKyAgICBzdGF0aWMgY29uc3RleHByIENhY2hlZENvZGVCbG9ja1RhZyB0
YWcgPSBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3VzaW5nIENhY2hlZENvZGVCbG9ja1R5cGUgPSB0eXBlbmFtZSBDYWNoZWRDb2RlQmxvY2tUeXBl
SW1wbDxUPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK0FMV0FZ
U19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRl
Y29kZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJs
b2NrVHlwZT4mIGNhY2hlZENvZGVCbG9jaykKKyAgICA6IEJhc2UoZGVjb2Rlci52bSgpLCBzdHJ1
Y3R1cmUpCisgICAgLCBtX2luc3RydWN0aW9ucyhjYWNoZWRDb2RlQmxvY2suaW5zdHJ1Y3Rpb25z
KGRlY29kZXIpKQorICAgICwgbV9saXZlbmVzcyhudWxscHRyKQorICAgICwgbV90aGlzUmVnaXN0
ZXIoY2FjaGVkQ29kZUJsb2NrLnRoaXNSZWdpc3RlcigpKQorICAgICwgbV9zY29wZVJlZ2lzdGVy
KGNhY2hlZENvZGVCbG9jay5zY29wZVJlZ2lzdGVyKCkpCisgICAgLCBtX2dsb2JhbE9iamVjdFJl
Z2lzdGVyKGNhY2hlZENvZGVCbG9jay5nbG9iYWxPYmplY3RSZWdpc3RlcigpKQorCisgICAgLCBt
X3NvdXJjZVVSTERpcmVjdGl2ZShjYWNoZWRDb2RlQmxvY2suc291cmNlVVJMRGlyZWN0aXZlKGRl
Y29kZXIpKQorICAgICwgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGNhY2hlZENvZGVCbG9j
ay5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGRlY29kZXIpKQorCisgICAgLCBtX3VzZXNFdmFs
KGNhY2hlZENvZGVCbG9jay51c2VzRXZhbCgpKQorICAgICwgbV9pc1N0cmljdE1vZGUoY2FjaGVk
Q29kZUJsb2NrLmlzU3RyaWN0TW9kZSgpKQorICAgICwgbV9pc0NvbnN0cnVjdG9yKGNhY2hlZENv
ZGVCbG9jay5pc0NvbnN0cnVjdG9yKCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGNh
Y2hlZENvZGVCbG9jay5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKQorICAgICwgbV9pc0J1aWx0aW5G
dW5jdGlvbihjYWNoZWRDb2RlQmxvY2suaXNCdWlsdGluRnVuY3Rpb24oKSkKKyAgICAsIG1fc3Vw
ZXJCaW5kaW5nKGNhY2hlZENvZGVCbG9jay5zdXBlckJpbmRpbmcoKSkKKyAgICAsIG1fc2NyaXB0
TW9kZShjYWNoZWRDb2RlQmxvY2suc2NyaXB0TW9kZSgpKQorICAgICwgbV9pc0Fycm93RnVuY3Rp
b25Db250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkpCisgICAg
LCBtX2lzQ2xhc3NDb250ZXh0KGNhY2hlZENvZGVCbG9jay5pc0NsYXNzQ29udGV4dCgpKQorICAg
ICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKGNhY2hlZENvZGVCbG9jay53YXND
b21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZChj
YWNoZWRDb2RlQmxvY2suY29uc3RydWN0b3JLaW5kKCkpCisgICAgLCBtX2Rlcml2ZWRDb250ZXh0
VHlwZShjYWNoZWRDb2RlQmxvY2suZGVyaXZlZENvbnRleHRUeXBlKCkpCisgICAgLCBtX2V2YWxD
b250ZXh0VHlwZShjYWNoZWRDb2RlQmxvY2suZXZhbENvbnRleHRUeXBlKCkpCisgICAgLCBtX2hh
c1RhaWxDYWxscyhjYWNoZWRDb2RlQmxvY2suaGFzVGFpbENhbGxzKCkpCisgICAgLCBtX2xpbmVD
b3VudChjYWNoZWRDb2RlQmxvY2subGluZUNvdW50KCkpCisgICAgLCBtX2VuZENvbHVtbihjYWNo
ZWRDb2RlQmxvY2suZW5kQ29sdW1uKCkpCisgICAgLCBtX251bVZhcnMoY2FjaGVkQ29kZUJsb2Nr
Lm51bVZhcnMoKSkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKGNhY2hlZENvZGVCbG9jay5udW1D
YWxsZWVMb2NhbHMoKSkKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhjYWNoZWRDb2RlQmxvY2subnVt
UGFyYW1ldGVycygpKQorICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMo
KSkKKyAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkKKyAgICAs
IG1fY29kZVR5cGUoY2FjaGVkQ29kZUJsb2NrLmNvZGVUeXBlKCkpCisgICAgLCBtX3JhcmVEYXRh
KGNhY2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKK3sKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8
Q29kZUJsb2NrVHlwZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBVbmxpbmtlZENvZGVCbG9j
ayYgY29kZUJsb2NrKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IExpbmtUaW1lQ29u
c3RhbnRDb3VudDsgaS0tOykKKyAgICAgICAgY29kZUJsb2NrLm1fbGlua1RpbWVDb25zdGFudHNb
aV0gPSBtX2xpbmtUaW1lQ29uc3RhbnRzW2ldOworCisgICAgbV9tZXRhZGF0YS5kZWNvZGUoZGVj
b2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEpOworICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zKTsKKyAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2su
bV9jb25zdGFudFJlZ2lzdGVycywgJmNvZGVCbG9jayk7CisgICAgbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24uZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgbV9leHByZXNzaW9uSW5mby5kZWNvZGUoZGVj
b2RlciwgY29kZUJsb2NrLm1fZXhwcmVzc2lvbkluZm8pOworICAgIG1fb3V0T2ZMaW5lSnVtcFRh
cmdldHMuZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX291dE9mTGluZUp1bXBUYXJnZXRzKTsK
KyAgICBtX2p1bXBUYXJnZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2subV9qdW1wVGFyZ2V0
cyk7CisgICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmRlY29kZShkZWNvZGVyLCBjb2RlQmxv
Y2subV9jb25zdGFudElkZW50aWZpZXJTZXRzKTsKKyAgICBtX2lkZW50aWZpZXJzLmRlY29kZShk
ZWNvZGVyLCBjb2RlQmxvY2subV9pZGVudGlmaWVycyk7CisgICAgbV9iaXRWZWN0b3JzLmRlY29k
ZShkZWNvZGVyLCBjb2RlQmxvY2subV9iaXRWZWN0b3JzKTsKKyAgICBtX2Z1bmN0aW9uRGVjbHMu
ZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jay5tX2Z1bmN0aW9uRGVjbHMsICZjb2RlQmxvY2spOwor
ICAgIG1fZnVuY3Rpb25FeHBycy5kZWNvZGUoZGVjb2RlciwgY29kZUJsb2NrLm1fZnVuY3Rpb25F
eHBycywgJmNvZGVCbG9jayk7Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgY29uc3Qg
Q2FjaGVkUHJvZ3JhbUNvZGVCbG9jayYgY2FjaGVkQ29kZUJsb2NrKQorICAgIDogQmFzZShkZWNv
ZGVyLCBkZWNvZGVyLnZtKCkudW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgp
LCBjYWNoZWRDb2RlQmxvY2spCit7Cit9CisKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soRGVjb2RlciYg
ZGVjb2RlciwgY29uc3QgQ2FjaGVkTW9kdWxlQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisg
ICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKworQUxXQVlTX0lO
TElORSBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OlVubGlua2VkRXZhbENvZGVCbG9jayhEZWNvZGVy
JiBkZWNvZGVyLCBjb25zdCBDYWNoZWRFdmFsQ29kZUJsb2NrJiBjYWNoZWRDb2RlQmxvY2spCisg
ICAgOiBCYXNlKGRlY29kZXIsIGRlY29kZXIudm0oKS51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIGNhY2hlZENvZGVCbG9jaykKK3sKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlJiBleGVjdXRhYmxlKQoreworICAgIG1fZmlyc3RM
aW5lT2Zmc2V0ID0gZXhlY3V0YWJsZS5tX2ZpcnN0TGluZU9mZnNldDsKKyAgICBtX2xpbmVDb3Vu
dCA9IGV4ZWN1dGFibGUubV9saW5lQ291bnQ7CisgICAgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0
YXJ0ID0gZXhlY3V0YWJsZS5tX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7CisgICAgbV91bmxp
bmtlZEJvZHlTdGFydENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEJvZHlTdGFydENvbHVt
bjsKKyAgICBtX3VubGlua2VkQm9keUVuZENvbHVtbiA9IGV4ZWN1dGFibGUubV91bmxpbmtlZEJv
ZHlFbmRDb2x1bW47CisgICAgbV9zdGFydE9mZnNldCA9IGV4ZWN1dGFibGUubV9zdGFydE9mZnNl
dDsKKyAgICBtX3NvdXJjZUxlbmd0aCA9IGV4ZWN1dGFibGUubV9zb3VyY2VMZW5ndGg7CisgICAg
bV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLm1fcGFyYW1ldGVyc1N0YXJ0T2Zm
c2V0OworICAgIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS5tX3R5cGVQ
cm9maWxpbmdTdGFydE9mZnNldDsKKyAgICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBleGVj
dXRhYmxlLm1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKKyAgICBtX3BhcmFtZXRlckNvdW50ID0g
ZXhlY3V0YWJsZS5tX3BhcmFtZXRlckNvdW50OworCisgICAgbV9mZWF0dXJlcyA9IGV4ZWN1dGFi
bGUubV9mZWF0dXJlczsKKyAgICBtX3NvdXJjZVBhcnNlTW9kZSA9IGV4ZWN1dGFibGUubV9zb3Vy
Y2VQYXJzZU1vZGU7CisKKyAgICBtX2lzSW5TdHJpY3RDb250ZXh0ID0gZXhlY3V0YWJsZS5tX2lz
SW5TdHJpY3RDb250ZXh0OworICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBleGVjdXRhYmxl
Lm1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CisgICAgbV9pc0J1aWx0aW5GdW5jdGlvbiA9IGV4ZWN1
dGFibGUubV9pc0J1aWx0aW5GdW5jdGlvbjsKKyAgICBtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0Nv
bnN0cnVjdG9yID0gZXhlY3V0YWJsZS5tX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9y
OworICAgIG1fY29uc3RydWN0QWJpbGl0eSA9IGV4ZWN1dGFibGUubV9jb25zdHJ1Y3RBYmlsaXR5
OworICAgIG1fY29uc3RydWN0b3JLaW5kID0gZXhlY3V0YWJsZS5tX2NvbnN0cnVjdG9yS2luZDsK
KyAgICBtX2Z1bmN0aW9uTW9kZSA9IGV4ZWN1dGFibGUubV9mdW5jdGlvbk1vZGU7CisgICAgbV9z
Y3JpcHRNb2RlID0gZXhlY3V0YWJsZS5tX3NjcmlwdE1vZGU7CisgICAgbV9zdXBlckJpbmRpbmcg
PSBleGVjdXRhYmxlLm1fc3VwZXJCaW5kaW5nOworICAgIG1fZGVyaXZlZENvbnRleHRUeXBlID0g
ZXhlY3V0YWJsZS5tX2Rlcml2ZWRDb250ZXh0VHlwZTsKKworICAgIG1fY2xhc3NTb3VyY2UuZW5j
b2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubV9jbGFzc1NvdXJjZSk7CisKKyAgICBtX25hbWUuZW5j
b2RlKGVuY29kZXIsIGV4ZWN1dGFibGUubmFtZSgpKTsKKyAgICBtX2VjbWFOYW1lLmVuY29kZShl
bmNvZGVyLCBleGVjdXRhYmxlLmVjbWFOYW1lKCkpOworICAgIG1faW5mZXJyZWROYW1lLmVuY29k
ZShlbmNvZGVyLCBleGVjdXRhYmxlLmluZmVycmVkTmFtZSgpKTsKKworICAgIG1fcGFyZW50U2Nv
cGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUucGFyZW50U2NvcGVURFpW
YXJpYWJsZXMoKSk7CisKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5lbmNvZGUoZW5j
b2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCk7CisgICAgbV91bmxp
bmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3Vu
bGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KTsKK30KKworQUxXQVlTX0lOTElORSBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikgY29uc3QKK3sKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IGVudjsKKyAg
ICBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzLmRlY29kZShkZWNvZGVyLCBlbnYpOworCisgICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgpLmhlYXAp
KSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBlbnYsICp0aGlzKTsKKyAgICBl
eGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOworCisgICAgbV9jbGFzc1Nv
dXJjZS5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV9jbGFzc1NvdXJjZSk7CisgICAgbV91
bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5s
aW5rZWRDb2RlQmxvY2tGb3JDYWxsLCBleGVjdXRhYmxlKTsKKyAgICBtX3VubGlua2VkQ29kZUJs
b2NrRm9yQ29uc3RydWN0LmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX3VubGlua2VkQ29k
ZUJsb2NrRm9yQ29uc3RydWN0LCBleGVjdXRhYmxlKTsKKworICAgIHJldHVybiBleGVjdXRhYmxl
OworfQorCitBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZWNvZGVyLCBWYXJpYWJsZUVudmlyb25tZW50
JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxl
JiBjYWNoZWRFeGVjdXRhYmxlKQorICAgIDogQmFzZShkZWNvZGVyLnZtKCksIGRlY29kZXIudm0o
KS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fZmly
c3RMaW5lT2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUuZmlyc3RMaW5lT2Zmc2V0KCkpCisgICAgLCBt
X2xpbmVDb3VudChjYWNoZWRFeGVjdXRhYmxlLmxpbmVDb3VudCgpKQorICAgICwgbV91bmxpbmtl
ZEZ1bmN0aW9uTmFtZVN0YXJ0KGNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRGdW5jdGlvbk5hbWVT
dGFydCgpKQorICAgICwgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbihjYWNoZWRFeGVjdXRhYmxl
LnVubGlua2VkQm9keVN0YXJ0Q29sdW1uKCkpCisgICAgLCBtX3VubGlua2VkQm9keUVuZENvbHVt
bihjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQm9keUVuZENvbHVtbigpKQorICAgICwgbV9zdGFy
dE9mZnNldChjYWNoZWRFeGVjdXRhYmxlLnN0YXJ0T2Zmc2V0KCkpCisgICAgLCBtX3NvdXJjZUxl
bmd0aChjYWNoZWRFeGVjdXRhYmxlLnNvdXJjZUxlbmd0aCgpKQorICAgICwgbV9wYXJhbWV0ZXJz
U3RhcnRPZmZzZXQoY2FjaGVkRXhlY3V0YWJsZS5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSkKKyAg
ICAsIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KGNhY2hlZEV4ZWN1dGFibGUudHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KCkpCisgICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQoY2FjaGVk
RXhlY3V0YWJsZS50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpCisgICAgLCBtX3BhcmFtZXRlckNv
dW50KGNhY2hlZEV4ZWN1dGFibGUucGFyYW1ldGVyQ291bnQoKSkKKyAgICAsIG1fZmVhdHVyZXMo
Y2FjaGVkRXhlY3V0YWJsZS5mZWF0dXJlcygpKQorICAgICwgbV9zb3VyY2VQYXJzZU1vZGUoY2Fj
aGVkRXhlY3V0YWJsZS5zb3VyY2VQYXJzZU1vZGUoKSkKKyAgICAsIG1faXNJblN0cmljdENvbnRl
eHQoY2FjaGVkRXhlY3V0YWJsZS5pc0luU3RyaWN0Q29udGV4dCgpKQorICAgICwgbV9oYXNDYXB0
dXJlZFZhcmlhYmxlcyhjYWNoZWRFeGVjdXRhYmxlLmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpCisg
ICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNhY2hlZEV4ZWN1dGFibGUuaXNCdWlsdGluRnVuY3Rp
b24oKSkKKyAgICAsIG1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IoY2FjaGVkRXhl
Y3V0YWJsZS5pc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvcigpKQorICAgICwgbV9jb25z
dHJ1Y3RBYmlsaXR5KGNhY2hlZEV4ZWN1dGFibGUuY29uc3RydWN0QWJpbGl0eSgpKQorICAgICwg
bV9jb25zdHJ1Y3RvcktpbmQoY2FjaGVkRXhlY3V0YWJsZS5jb25zdHJ1Y3RvcktpbmQoKSkKKyAg
ICAsIG1fZnVuY3Rpb25Nb2RlKGNhY2hlZEV4ZWN1dGFibGUuZnVuY3Rpb25Nb2RlKCkpCisgICAg
LCBtX3NjcmlwdE1vZGUoY2FjaGVkRXhlY3V0YWJsZS5zY3JpcHRNb2RlKCkpCisgICAgLCBtX3N1
cGVyQmluZGluZyhjYWNoZWRFeGVjdXRhYmxlLnN1cGVyQmluZGluZygpKQorICAgICwgbV9kZXJp
dmVkQ29udGV4dFR5cGUoY2FjaGVkRXhlY3V0YWJsZS5kZXJpdmVkQ29udGV4dFR5cGUoKSkKKwor
ICAgICwgbV9uYW1lKGNhY2hlZEV4ZWN1dGFibGUubmFtZShkZWNvZGVyKSkKKyAgICAsIG1fZWNt
YU5hbWUoY2FjaGVkRXhlY3V0YWJsZS5lY21hTmFtZShkZWNvZGVyKSkKKyAgICAsIG1faW5mZXJy
ZWROYW1lKGNhY2hlZEV4ZWN1dGFibGUuaW5mZXJyZWROYW1lKGRlY29kZXIpKQorCisgICAgLCBt
X3BhcmVudFNjb3BlVERaVmFyaWFibGVzKGRlY29kZXIudm0oKS5tX2NvbXBhY3RWYXJpYWJsZU1h
cC0+Z2V0KHBhcmVudFNjb3BlVERaVmFyaWFibGVzKSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29k
ZUJsb2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBVbmxpbmtlZENvZGVC
bG9jayYgY29kZUJsb2NrKQoreworICAgIG1fdGhpc1JlZ2lzdGVyID0gY29kZUJsb2NrLm1fdGhp
c1JlZ2lzdGVyOworICAgIG1fc2NvcGVSZWdpc3RlciA9IGNvZGVCbG9jay5tX3Njb3BlUmVnaXN0
ZXI7CisgICAgbV9nbG9iYWxPYmplY3RSZWdpc3RlciA9IGNvZGVCbG9jay5tX2dsb2JhbE9iamVj
dFJlZ2lzdGVyOworICAgIG1fdXNlc0V2YWwgPSBjb2RlQmxvY2subV91c2VzRXZhbDsKKyAgICBt
X2lzU3RyaWN0TW9kZSA9IGNvZGVCbG9jay5tX2lzU3RyaWN0TW9kZTsKKyAgICBtX2lzQ29uc3Ry
dWN0b3IgPSBjb2RlQmxvY2subV9pc0NvbnN0cnVjdG9yOworICAgIG1faGFzQ2FwdHVyZWRWYXJp
YWJsZXMgPSBjb2RlQmxvY2subV9oYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICBtX2lzQnVpbHRp
bkZ1bmN0aW9uID0gY29kZUJsb2NrLm1faXNCdWlsdGluRnVuY3Rpb247CisgICAgbV9zdXBlckJp
bmRpbmcgPSBjb2RlQmxvY2subV9zdXBlckJpbmRpbmc7CisgICAgbV9zY3JpcHRNb2RlID0gY29k
ZUJsb2NrLm1fc2NyaXB0TW9kZTsKKyAgICBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQgPSBjb2Rl
QmxvY2subV9pc0Fycm93RnVuY3Rpb25Db250ZXh0OworICAgIG1faXNDbGFzc0NvbnRleHQgPSBj
b2RlQmxvY2subV9pc0NsYXNzQ29udGV4dDsKKyAgICBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2lu
Z09wY29kZXMgPSBjb2RlQmxvY2subV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOwor
ICAgIG1fY29uc3RydWN0b3JLaW5kID0gY29kZUJsb2NrLm1fY29uc3RydWN0b3JLaW5kOworICAg
IG1fZGVyaXZlZENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZGVyaXZlZENvbnRleHRUeXBlOwor
ICAgIG1fZXZhbENvbnRleHRUeXBlID0gY29kZUJsb2NrLm1fZXZhbENvbnRleHRUeXBlOworICAg
IG1faGFzVGFpbENhbGxzID0gY29kZUJsb2NrLm1faGFzVGFpbENhbGxzOworICAgIG1fbGluZUNv
dW50ID0gY29kZUJsb2NrLm1fbGluZUNvdW50OworICAgIG1fZW5kQ29sdW1uID0gY29kZUJsb2Nr
Lm1fZW5kQ29sdW1uOworICAgIG1fbnVtVmFycyA9IGNvZGVCbG9jay5tX251bVZhcnM7CisgICAg
bV9udW1DYWxsZWVMb2NhbHMgPSBjb2RlQmxvY2subV9udW1DYWxsZWVMb2NhbHM7CisgICAgbV9u
dW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLm1fbnVtUGFyYW1ldGVyczsKKyAgICBtX2ZlYXR1cmVz
ID0gY29kZUJsb2NrLm1fZmVhdHVyZXM7CisgICAgbV9wYXJzZU1vZGUgPSBjb2RlQmxvY2subV9w
YXJzZU1vZGU7CisgICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBlOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gTGlua1RpbWVDb25zdGFudENvdW50OyBpLS07KQorICAgICAgICBt
X2xpbmtUaW1lQ29uc3RhbnRzW2ldID0gY29kZUJsb2NrLm1fbGlua1RpbWVDb25zdGFudHNbaV07
CisKKyAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YSk7
CisgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEpOwor
CisgICAgbV9zb3VyY2VVUkxEaXJlY3RpdmUuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3Nv
dXJjZVVSTERpcmVjdGl2ZS5pbXBsKCkpOworICAgIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fc291cmNlVVJMRGlyZWN0aXZlLmltcGwoKSk7
CisKKyAgICBtX2luc3RydWN0aW9ucy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1faW5zdHJ1
Y3Rpb25zLmdldCgpKTsKKyAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2subV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk7CisgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fY29uc3RhbnRSZWdp
c3RlcnMpOworICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwor
ICAgIG1fZXhwcmVzc2lvbkluZm8uZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX2V4cHJlc3Np
b25JbmZvKTsKKyAgICBtX2p1bXBUYXJnZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9q
dW1wVGFyZ2V0cyk7CisgICAgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5lbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrLm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOworCisgICAgbV9jb25zdGFudElkZW50
aWZpZXJTZXRzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9jb25zdGFudElkZW50aWZpZXJT
ZXRzKTsKKyAgICBtX2lkZW50aWZpZXJzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9pZGVu
dGlmaWVycyk7CisgICAgbV9iaXRWZWN0b3JzLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9i
aXRWZWN0b3JzKTsKKyAgICBtX2Z1bmN0aW9uRGVjbHMuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9j
ay5tX2Z1bmN0aW9uRGVjbHMpOworICAgIG1fZnVuY3Rpb25FeHBycy5lbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrLm1fZnVuY3Rpb25FeHBycyk7Cit9CisKK2NsYXNzIENhY2hlZFNvdXJjZUNvZGVL
ZXkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFNvdXJjZUNvZGVLZXk+IHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisg
ICAgeworICAgICAgICBtX3NvdXJjZUNvZGUuZW5jb2RlKGVuY29kZXIsIGtleS5tX3NvdXJjZUNv
ZGUpOworICAgICAgICBtX25hbWUuZW5jb2RlKGVuY29kZXIsIGtleS5tX25hbWUpOworICAgICAg
ICBtX2ZsYWdzID0ga2V5Lm1fZmxhZ3MubV9mbGFnczsKKyAgICAgICAgbV9oYXNoID0ga2V5Lmhh
c2goKTsKKyAgICAgICAgbV9mdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9u
ID0ga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbjsKKyAgICB9
CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTb3VyY2VDb2RlS2V5JiBrZXkp
IGNvbnN0CisgICAgeworICAgICAgICBtX3NvdXJjZUNvZGUuZGVjb2RlKGRlY29kZXIsIGtleS5t
X3NvdXJjZUNvZGUpOworICAgICAgICBtX25hbWUuZGVjb2RlKGRlY29kZXIsIGtleS5tX25hbWUp
OworICAgICAgICBrZXkubV9mbGFncy5tX2ZsYWdzID0gbV9mbGFnczsKKyAgICAgICAga2V5Lm1f
aGFzaCA9IG1faGFzaDsKKyAgICAgICAga2V5Lm1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRl
cnNFbmRQb3NpdGlvbiA9IG1fZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlv
bjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkVW5saW5rZWRTb3VyY2VDb2RlIG1fc291
cmNlQ29kZTsKKyAgICBDYWNoZWRTdHJpbmcgbV9uYW1lOworICAgIHVuc2lnbmVkIG1fZmxhZ3M7
CisgICAgdW5zaWduZWQgbV9oYXNoOworICAgIGludCBtX2Z1bmN0aW9uQ29uc3RydWN0b3JQYXJh
bWV0ZXJzRW5kUG9zaXRpb247Cit9OworCitjbGFzcyBHZW5lcmljQ2FjaGVFbnRyeSB7CitwdWJs
aWM6CisgICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZGVj
b2RlKERlY29kZXImKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIENhY2hlZENvZGVCbG9ja1Rh
ZyBtX3RhZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4K
K2NsYXNzIENhY2hlRW50cnkgOiBwdWJsaWMgR2VuZXJpY0NhY2hlRW50cnkgeworcHVibGljOgor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5
LCBjb25zdCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiBwYWlyKQorICAgIHsKKyAgICAgICAgbV90
YWcgPSBDYWNoZWRDb2RlQmxvY2tUeXBlSW1wbDxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp0YWc7
CisgICAgICAgIG1fa2V5LmVuY29kZShlbmNvZGVyLCBwYWlyLmZpcnN0KTsKKyAgICAgICAgbV9j
b2RlQmxvY2suZW5jb2RlKGVuY29kZXIsIHBhaXIuc2Vjb25kKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIEdlbmVyaWNDYWNoZUVudHJ5OworCisgICAgc3RkOjpwYWlyPFNvdXJjZUNv
ZGVLZXksIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGFnID09IENhY2hlZENvZGVCbG9ja1R5cGVJ
bXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnRhZyk7CisgICAgICAgIFNvdXJjZUNvZGVLZXkg
ZGVjb2RlZEtleTsKKyAgICAgICAgbV9rZXkuZGVjb2RlKGRlY29kZXIsIGRlY29kZWRLZXkpOwor
ICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGRlY29kZWRLZXkpLCBtX2NvZGVCbG9jay5kZWNvZGUo
ZGVjb2RlcikgfTsKKyAgICB9CisKKyAgICBDYWNoZWRTb3VyY2VDb2RlS2V5IG1fa2V5OworICAg
IENhY2hlZFB0cjxDYWNoZWRDb2RlQmxvY2tUeXBlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4+IG1f
Y29kZUJsb2NrOworfTsKKworc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJs
b2NrKj4gR2VuZXJpY0NhY2hlRW50cnk6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAor
eworICAgIHN3aXRjaCAobV90YWcpIHsKKyAgICBjYXNlIENhY2hlZFByb2dyYW1Db2RlQmxvY2tU
YWc6CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgY2Fz
ZSBDYWNoZWRNb2R1bGVDb2RlQmxvY2tUYWc6CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPio+KHRo
aXMpLT5kZWNvZGUoZGVjb2Rlcik7CisgICAgY2FzZSBDYWNoZWRFdmFsQ29kZUJsb2NrVGFnOgor
ICAgICAgICAvLyBXZSBkbyBub3QgY2FjaGUgZXZhbCBjb2RlIGJsb2NrcworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2lmIENPTVBJTEVSKE1TVkMpCisgICAgLy8gV2l0aG91dCB0aGlzLCBNU1ZD
IHdpbGwgY29tcGxhaW4gdGhhdCB0aGlzIHBhdGggZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuCisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZEV2YWxD
b2RlQmxvY2s+Kj4odGhpcyktPmRlY29kZShkZWNvZGVyKTsKKyNlbmRpZgorfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+Cit2b2lkIGVuY29kZUNvZGVCbG9jayhF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgYXV0byogZW50cnkgPSBlbmNvZGVyLnRlbXBs
YXRlIG1hbGxvYzxDYWNoZUVudHJ5PFVubGlua2VkQ29kZUJsb2NrVHlwZT4+KCk7CisgICAgZW50
cnktPmVuY29kZShlbmNvZGVyLCAgeyBrZXksIGpzQ2FzdDxjb25zdCBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqPihjb2RlQmxvY2spIH0pOworfQorCitzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+
LCBzaXplX3Q+IGVuY29kZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtl
eSwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbyA9IGNvZGVCbG9jay0+Y2xhc3NJbmZvKHZtKTsKKworICAgIEVuY29k
ZXIgZW5jb2Rlcih2bSk7CisgICAgaWYgKGNsYXNzSW5mbyA9PSBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s6OmluZm8oKSkKKyAgICAgICAgZW5jb2RlQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jaz4oZW5jb2Rlciwga2V5LCBjb2RlQmxvY2spOworICAgIGVsc2UgaWYgKGNsYXNzSW5m
byA9PSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgZW5j
b2RlQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4oZW5jb2Rlciwga2V5
LCBjb2RlQmxvY2spOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyA9PSBVbmxp
bmtlZEV2YWxDb2RlQmxvY2s6OmluZm8oKSk7CisKKyAgICByZXR1cm4gZW5jb2Rlci5yZWxlYXNl
KCk7Cit9CisKK1VubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiB2bSwg
Y29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXpl
KQoreworICAgIGNvbnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBHZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7CisgICAgRGVjb2RlciBkZWNvZGVyKHZtLCBi
dWZmZXIsIHNpemUpOworICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtlZENvZGVC
bG9jayo+IGVudHJ5OworICAgIHsKKyAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwor
ICAgICAgICBlbnRyeSA9IGNhY2hlZEVudHJ5LT5kZWNvZGUoZGVjb2Rlcik7CisgICAgfQorCisg
ICAgaWYgKGVudHJ5LmZpcnN0ICE9IGtleSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIGVudHJ5LnNlY29uZDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iY2I4YWNiNmNl
NTcwZTk3MjYzODljMjZkNzBiY2JhMjFkYThkNGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaApAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBTb3VyY2VDb2RlS2V5OworY2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2s7CisKK3N0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29k
ZUJsb2NrKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2Nr
Kik7CitVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYsIGNvbnN0IFNv
dXJjZUNvZGVLZXkmLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKKworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CitVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGRlY29kZUNv
ZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVm
ZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2Nr
VHlwZSo+KGRlY29kZUNvZGVCbG9ja0ltcGwodm0sIGtleSwgYnVmZmVyLCBzaXplKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29kZUNhY2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVD
YWNoZS5jcHAKaW5kZXggNDYwMTc5MjFhNDZlZmM2NDE3MjVkMGEyMzUyNTI5MDM1YWY1ZjNhZC4u
YzMyZDIwNGI2Y2Q4OTY4MTgxY2IwZDFkZjBlYWI4M2VjMTE4MTlkNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCkBAIC00Myw2ICs0Myw5IEBAIHZvaWQg
Q29kZUNhY2hlTWFwOjpwcnVuZVNsb3dDYXNlKCkKIAogICAgIHdoaWxlIChtX3NpemUgPiBtX2Nh
cGFjaXR5IHx8ICFjYW5QcnVuZVF1aWNrbHkoKSkgewogICAgICAgICBNYXBUeXBlOjppdGVyYXRv
ciBpdCA9IG1fbWFwLmJlZ2luKCk7CisKKyAgICAgICAgd3JpdGVDb2RlQmxvY2soKml0LT52YWx1
ZS5jZWxsLT52bSgpLCBpdC0+a2V5LCBpdC0+dmFsdWUpOworCiAgICAgICAgIG1fc2l6ZSAtPSBp
dC0+a2V5Lmxlbmd0aCgpOwogICAgICAgICBtX21hcC5yZW1vdmUoaXQpOwogICAgIH0KQEAgLTU5
LDkgKzYyLDggQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldFVubGlua2Vk
R2xvYmFsQ29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVQKICAgICAgICAgdm0udHlwZVByb2Zp
bGVyKCkgPyBUeXBlUHJvZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJvZmlsZXJFbmFibGVkOjpO
bywgCiAgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJvZmls
ZXJFbmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCiAgICAgICAg
IFdURjo6bnVsbG9wdCk7Ci0gICAgU291cmNlQ29kZVZhbHVlKiBjYWNoZSA9IG1fc291cmNlQ29k
ZS5maW5kQ2FjaGVBbmRVcGRhdGVBZ2Uoa2V5KTsKLSAgICBpZiAoY2FjaGUgJiYgT3B0aW9uczo6
dXNlQ29kZUNhY2hlKCkpIHsKLSAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtl
ZENvZGVCbG9jayA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihjYWNoZS0+Y2VsbC5n
ZXQoKSk7CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IG1f
c291cmNlQ29kZS5maW5kQ2FjaGVBbmRVcGRhdGVBZ2U8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2
bSwga2V5KTsKKyAgICBpZiAodW5saW5rZWRDb2RlQmxvY2sgJiYgT3B0aW9uczo6dXNlQ29kZUNh
Y2hlKCkpIHsKICAgICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2st
PmxpbmVDb3VudCgpOwogICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHVubGlua2VkQ29k
ZUJsb2NrLT5zdGFydENvbHVtbigpICsgc291cmNlLnN0YXJ0Q29sdW1uKCkub25lQmFzZWRJbnQo
KTsKICAgICAgICAgYm9vbCBlbmRDb2x1bW5Jc09uU3RhcnRMaW5lID0gIWxpbmVDb3VudDsKQEAg
LTcxLDkgKzczLDkgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldFVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVQKICAgICAgICAgc291cmNlLnBy
b3ZpZGVyKCktPnNldFNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUodW5saW5rZWRDb2RlQmxvY2st
PnNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoKSk7CiAgICAgICAgIHJldHVybiB1bmxpbmtlZENv
ZGVCbG9jazsKICAgICB9Ci0gICAgCisKICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxl
c1VuZGVyVERaOwotICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sg
PSBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZSwgRXhlY3V0
YWJsZVR5cGU+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUs
IGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERa
KTsKKyAgICB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5s
aW5rZWRDb2RlQmxvY2tUeXBlLCBFeGVjdXRhYmxlVHlwZT4odm0sIGV4ZWN1dGFibGUsIHNvdXJj
ZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRl
eHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOwogCiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2Nr
ICYmIE9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBtX3NvdXJjZUNvZGUuYWRkQ2Fj
aGUoa2V5LCBTb3VyY2VDb2RlVmFsdWUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBtX3NvdXJjZUNv
ZGUuYWdlKCkpKTsKQEAgLTExMCw5ICsxMTIsOCBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogQ29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdgog
ICAgICAgICB2bS50eXBlUHJvZmlsZXIoKSA/IFR5cGVQcm9maWxlckVuYWJsZWQ6OlllcyA6IFR5
cGVQcm9maWxlckVuYWJsZWQ6Ok5vLCAKICAgICAgICAgdm0uY29udHJvbEZsb3dQcm9maWxlcigp
ID8gQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENvbnRyb2xGbG93UHJvZmlsZXJF
bmFibGVkOjpObywKICAgICAgICAgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3Np
dGlvbik7Ci0gICAgU291cmNlQ29kZVZhbHVlKiBjYWNoZSA9IG1fc291cmNlQ29kZS5maW5kQ2Fj
aGVBbmRVcGRhdGVBZ2Uoa2V5KTsKLSAgICBpZiAoY2FjaGUgJiYgT3B0aW9uczo6dXNlQ29kZUNh
Y2hlKCkpIHsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWNoZS0+Y2VsbC5nZXQoKSk7
CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBtX3NvdXJjZUNv
ZGUuZmluZENhY2hlQW5kVXBkYXRlQWdlPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
a2V5KTsKKyAgICBpZiAoZXhlY3V0YWJsZSAmJiBPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkgewog
ICAgICAgICBzb3VyY2UucHJvdmlkZXIoKS0+c2V0U291cmNlVVJMRGlyZWN0aXZlKGV4ZWN1dGFi
bGUtPnNvdXJjZVVSTERpcmVjdGl2ZSgpKTsKICAgICAgICAgc291cmNlLnByb3ZpZGVyKCktPnNl
dFNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoZXhlY3V0YWJsZS0+c291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZSgpKTsKICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CkBAIC0xNTUsNCArMTU2LDEw
IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xv
YmFsRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2CiAgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJs
ZTsKIH0KIAordm9pZCBDb2RlQ2FjaGU6OndyaXRlKFZNJiB2bSkKK3sKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGl0IDogbV9zb3VyY2VDb2RlKQorICAgICAgICB3cml0ZUNvZGVCbG9jayh2bSwgaXQu
a2V5LCBpdC52YWx1ZSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29k
ZUNhY2hlLmgKaW5kZXggOGE0NDE5Zjk2Y2E4ZmE0YTYyOWJlMGU5YTc4MjdjYmFmNjhjZmY4Ni4u
OTkzOTVmMmNkMjg0MTEzOWEwMzVjOGIxNTg5YmI5MzljNjljNTcwMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJDYWNoZWRU
eXBlcy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgIlVu
bGlua2VkRXZhbENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtODksMTMgKzkxLDc2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCi0gICAgU291cmNlQ29kZVZhbHVlKiBmaW5kQ2FjaGVBbmRVcGRhdGVBZ2UoY29uc3Qg
U291cmNlQ29kZUtleSYga2V5KQorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAu
YmVnaW4oKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CisgICAgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlKiBmZXRjaEZyb21EaXNrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNv
ZGVLZXkmIGtleSkKKyAgICB7CisjaWYgT1MoREFSV0lOKQorICAgICAgICBjb25zdCBjaGFyKiBj
YWNoZVBhdGggPSBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7CisgICAgICAgIGlmICghY2FjaGVQ
YXRoKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQgaGFz
aCA9IGtleS5oYXNoKCk7CisgICAgICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICAgICAgaW50
IGNvdW50ID0gc25wcmludGYoZmlsZW5hbWUsIDUxMiwgIiVzLyV1LmNhY2hlIiwgY2FjaGVQYXRo
LCBoYXNoKTsKKyAgICAgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9f
UkRPTkxZKTsKKyAgICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfU0ggfCBMT0NLX05CKTsKKyAg
ICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBzdGF0IHNiOworICAgICAg
ICBpbnQgcmVzID0gZnN0YXQoZmQsICZzYik7CisgICAgICAgIHNpemVfdCBzaXplID0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzYi5zdF9zaXplKTsKKyAgICAgICAgaWYgKHJlcyB8fCAhc2l6ZSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGNvbnN0IHZvaWQqIGJ1ZmZlciA9
IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworICAg
ICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZGVjb2RlQ29k
ZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwgYnVmZmVyLCBzaXplKTsKKwor
ICAgICAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgYWRkQ2FjaGUoa2V5LCBTb3VyY2VDb2RlVmFsdWUodm0sIHVubGlua2Vk
Q29kZUJsb2NrLCBtX2FnZSkpOworICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7Cisj
ZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0oa2V5
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CisgICAgc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX2Jhc2Vfb2Y8VW5saW5rZWRDb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrVHlwZT46
OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBVbmxpbmtlZEV2
YWxDb2RlQmxvY2s+Ojp2YWx1ZSwgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4KKyAgICBmZXRjaEZy
b21EaXNrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsKKyAgICAgICAg
VW5saW5rZWRDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2sgPSBmZXRjaEZyb21EaXNrSW1wbDxVbmxp
bmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6Zm9yY2VEaXNrQ2FjaGUoKSkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxv
Y2spOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19iYXNlX29mPFVubGlua2Vk
Q29kZUJsb2NrLCBUPjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIFVubGlua2VkRXZhbENvZGVC
bG9jaz46OnZhbHVlLCBUKj4KKyAgICBmZXRjaEZyb21EaXNrKFZNJiwgY29uc3QgU291cmNlQ29k
ZUtleSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZpbmRDYWNoZUFu
ZFVwZGF0ZUFnZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKICAgICB7CiAgICAg
ICAgIHBydW5lKCk7CiAKICAgICAgICAgaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQo
a2V5KTsKICAgICAgICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBmZXRjaEZyb21EaXNrPFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7CiAKICAgICAgICAgaW50NjRfdCBhZ2UgPSBtX2Fn
ZSAtIGZpbmRSZXN1bHQtPnZhbHVlLmFnZTsKICAgICAgICAgaWYgKGFnZSA+IG1fY2FwYWNpdHkp
IHsKQEAgLTExNSw3ICsxODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZpbmRSZXN1bHQtPnZhbHVl
LmFnZSA9IG1fYWdlOwogICAgICAgICBtX2FnZSArPSBrZXkubGVuZ3RoKCk7CiAKLSAgICAgICAg
cmV0dXJuICZmaW5kUmVzdWx0LT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqPihmaW5kUmVzdWx0LT52YWx1ZS5jZWxsLmdldCgpKTsKICAgICB9CiAK
ICAgICBBZGRSZXN1bHQgYWRkQ2FjaGUoY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBT
b3VyY2VDb2RlVmFsdWUmIHZhbHVlKQpAQCAtMTk3LDYgKzI2Miw3IEBAIHB1YmxpYzoKICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1
dGFibGUoVk0mLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIERlYnVnZ2Vy
TW9kZSwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0
aW9uLCBQYXJzZXJFcnJvciYpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9zb3VyY2VDb2RlLmNs
ZWFyKCk7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlKFZNJik7CiAKIHByaXZh
dGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhl
Y3V0YWJsZVR5cGU+IApAQCAtMjU2LDQgKzMyMiwzNiBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUq
IGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0
YQogICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKIH0KIAorQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCB3cml0ZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwg
Y29uc3QgU291cmNlQ29kZVZhbHVlJiB2YWx1ZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgY29u
c3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOworICAgIGlmIChM
SUtFTFkoIWNhY2hlUGF0aCkpCisgICAgICAgIHJldHVybjsKKworICAgIFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4odm0sIHZh
bHVlLmNlbGwuZ2V0KCkpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm47CisK
KyAgICB1bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICBjaGFyIGZpbGVuYW1lWzUxMl07
CisgICAgaW50IGNvdW50ID0gc25wcmludGYoZmlsZW5hbWUsIDUxMiwgIiVzLyV1LmNhY2hlIiwg
Y2FjaGVQYXRoLCBoYXNoKTsKKyAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNTEyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+
IHJlc3VsdCA9IGVuY29kZUNvZGVCbG9jayh2bSwga2V5LCBjb2RlQmxvY2spOworCisgICAgaW50
IGZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKyAgICBpbnQg
cmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOworICAgIGlmICghcmMpCisgICAgICAg
IDo6d3JpdGUoZmQsIHJlc3VsdC5maXJzdC5nZXQoKSwgcmVzdWx0LnNlY29uZCk7CisgICAgY2xv
c2UoZmQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIFVOVVNFRF9QQVJBTShr
ZXkpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYKK30KKworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmln
SW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAppbmRl
eCBjYTUzMTYzNmI3ODFlODY5ZWE3OGY3NmQyNWI1ZTRhZWFkNDE2MTg1Li4yYmNhYTliNjc2MmQy
NTJmMGIzMWVlMWE4OTQ5Y2RkODM3NDY4MDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCkBAIC0xNjg4LDExICsxNjg4LDYgQEAgYm9vbCBKU0JpZ0ludDo6
Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIsIEpTVmFs
dWUmIHJlc3UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHNpemVfdCBKU0JpZ0ludDo6
b2Zmc2V0T2ZEYXRhKCkKLXsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZihEaWdpdCk+KHNpemVvZihKU0JpZ0ludCkpOwotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhclR5cGU+CiBKU0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywg
Q2hhclR5cGUqICBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIEVycm9yUGFyc2VNb2RlIGVycm9yUGFy
c2VNb2RlKQogewpAQCAtMTc5NSwxMSArMTc5MCw2IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6cGFy
c2VJbnQoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLCB1bnNpZ25lZCBs
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWlubGluZSBKU0JpZ0ludDo6RGlnaXQqIEpTQmln
SW50OjpkYXRhU3RvcmFnZSgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RGlnaXQq
PihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mRGF0YSgpKTsKLX0KLQog
aW5saW5lIEpTQmlnSW50OjpEaWdpdCBKU0JpZ0ludDo6ZGlnaXQodW5zaWduZWQgbikKIHsKICAg
ICBBU1NFUlQobiA8IGxlbmd0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQmlnSW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5oCmluZGV4IDJiM2JmOTMwN2Q4ZGJiYjExMDc1MzNlZDgzMDM0N2JjZGQ0YTYxMGIuLmRi
YmY2M2RlZDFjOGNiZDQ4ZWE3YjlmY2I1YjBlODUxNWI1ZmVhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdXNpbmcgQmFz
ZSA9IEpTQ2VsbDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBPdmVycmlkZXNUb1Ro
aXM7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZEJpZ0ludDsKIAogcHVibGljOgogCkBAIC0yMjgs
OCArMjI5LDE1IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0
QW1vdW50KEpTQmlnSW50KiB4KTsKIAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUo
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpOwotICAg
IERpZ2l0KiBkYXRhU3RvcmFnZSgpOworICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9m
RGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZihEaWdpdCk+KHNpemVvZihKU0JpZ0ludCkpOworICAgIH0KKworICAgIGlubGluZSBEaWdp
dCogZGF0YVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
RGlnaXQqPihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mRGF0YSgpKTsK
KyAgICB9CiAKICAgICBEaWdpdCBkaWdpdCh1bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1
bnNpZ25lZCwgRGlnaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNw
cAppbmRleCA2NmNlYzNhZjc5ZjZhODEzZDk4YjMwNjc4ZTdkNGZkZjg2ZWM2MTI2Li45NjJkODdl
OTkyNmRhY2UzNzY2ZjU5NzNkMDk2ZDg4MjI3ZTFkZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTE3LDYgKzUxNywxMiBAQCBzdGF0aWMgdm9pZCBy
ZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkg
PSBmYWxzZTsKICNlbmRpZgorCisgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKKyAg
ICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKKworICAgIGlmICghT3B0
aW9uczo6ZGlza0NhY2hlUGF0aCgpKQorICAgICAgICBPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgp
ID0gZmFsc2U7CiB9CiAKIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cC5oCmluZGV4IDgzYWFkMzU2MDM4ZWIyZWM3NmU2YjhiZDM3Yzc0
NzZjZWM5MTM1MmUuLjAzYWRkNDVmYjU1NzA0Y2ZhMDJkNmU1YTIzY2IwMmM4MDQ3YmJlNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCkBAIC00MSw2ICs0MSw4IEBAIGNs
YXNzIFZNOwogSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwRmxhZ3MgcmVnRXhwRmxhZ3MoY29uc3Qg
U3RyaW5nJik7CiAKIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworICAgIGZy
aWVuZCBjbGFzcyBDYWNoZWRSZWdFeHA7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBC
YXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCmluZGV4IDQwZTdjN2Vj
MmZkNjBiNTg0MmE1NzI4NWFjOTdiMGY2YTk1OTM5NWQuLmU4MTIzNDI5N2IwYmI4YTAyNTgwMmYz
N2E4OTg0NzA4OGE1YWUxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaApAQCAtMzksNiArMzksOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIC8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25zIGFyZSBzbyB1
bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQogLy8gImRlbGV0
ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9wZXJ0eS4KIGNs
YXNzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJp
ZW5kIGNsYXNzIENhY2hlZFNjb3BlZEFyZ3VtZW50c1RhYmxlOworCiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKaW5kZXggZWQ5ODJlMzFmNTViYmJj
OTE2MjhkMjM0MTc4MTJiYjRmNmM2ODcxMS4uNWVlZGVlNmY4MTg2ZGFlYTMwNDA5ODEzZDQ1MzQ2
YWMwNzVlZmQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Rh
Y2tGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUu
aApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkhlYXAuaCIK
ICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIK
ICNpbmNsdWRlIDxsaW1pdHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAzODI2NDQyNzAxNTQ5MWEzNDc2MzkyMzUxZTVmNTY1
NmY2YzEwM2RlLi40YTMwZjM3ZGQ3NWE2MzE1MDM3NWI4OTFmOWRlODIxMGQ0NDMzZjBjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKaW5kZXggOTE1N2Q1YjgyOTIw
MGZiNmE5NjVlYTNiYzc4Njk2ZTUzMmE5MmI5NS4uNTk2OTFiMmVjNDFlYzdhZTk3YWQ0MGM5ODQ5
MDE1NjRjZmZkNDAxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5n
U3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+CiAvLyBjb3B5
OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBTeW1i
b2xUYWJsZUVudHJ5IHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU3ltYm9sVGFibGVFbnRyeTsK
KwogcHJpdmF0ZToKICAgICBzdGF0aWMgVmFyT2Zmc2V0IHZhck9mZnNldEZyb21CaXRzKGludHB0
cl90IGJpdHMpCiAgICAgewpAQCAtNDM2LDYgKzQzOCw4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUlu
ZGV4SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8U3ltYm9sVGFibGVFbnRyeT4gewogfTsKIAogY2xh
c3MgU3ltYm9sVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBmcmllbmQgY2xhc3Mg
Q2FjaGVkU3ltYm9sVGFibGU7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKaW5kZXggNzU1Y2Q3YTlh
YTU3NmM2ZjdhNGRiMTRjMGQ5ZTMwMmM3OGRiNTE3OC4uYjhiYjM2NWI1OWQ3ZWJhYzc5YWM2ODlh
NDQ0ZGE1OTI3MjNjNTBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgK
KysrIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIENhY2hlZEJpdFZlY3RvcjsKK30KKwogbmFtZXNwYWNl
IFdURiB7CiAKIC8vIFRoaXMgaXMgYSBzcGFjZS1lZmZpY2llbnQsIHJlc2l6ZWFibGUgYml0dmVj
dG9yIGNsYXNzLiBJbiB0aGUgY29tbW9uIGNhc2UgaXQKQEAgLTMzOCw2ICszNDIsOCBAQCBwdWJs
aWM6CiAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNp
emUoKSk7IH0KICAgICAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBKU0M6OkNhY2hl
ZEJpdFZlY3RvcjsKKwogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCopIDw8IDM7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzA0NzY3YzE1ZjgxNzRjY2EyYjE2YjRi
YTczMzIzY2Q5MWU4NjcxOC4uZTc3OTAyM2QwOTdjMWVkZDEyYTUzMTRjMDk2NmNhYWJhNzhiYTQz
OSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDE5LTAxLTIxICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUu
Y29tPgorCisgICAgICAgIENhY2hlIGJ5dGVjb2RlIHRvIGRpc2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjc4MgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNDYwODQ5MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisg
ICAgICAgIEFkZCB0ZXN0IGhlbHBlciB0byBleGVjdXRlIGJ5dGVjb2RlLWNhY2hlIHRlc3RzOiBp
dCBleGVjdXRlcyBlYWNoIHRlc3QKKyAgICAgICAgdHdpY2UsIHRoZSBmaXJzdCB3aXRoIEpTQ19k
aXNrQ2FjaGVQYXRoIHNldCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICAgICAgYW5kIHNl
Y29uZCB3aXRoIEpTQ19mb3JjZURpc2tDYWNoZT10cnVlIChpbiBhZGRpdGlvbiB0byB0aGUgY2Fj
aGUgcGF0aCkKKyAgICAgICAgdG8gZ3VhcmFudGVlIHRoYXQgb25seSB0aGUgZGlzayBjYWNoZSBp
cyBiZWluZyB1c2VkIGFuZCBubyBuZXcKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tzIGFyZSBi
ZWluZyBjcmVhdGVkLgorCisgICAgICAgICogU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVy
cy9ieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaDogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0wMS0yMiAgT3Jpb2wgQnJ1ZmF1ICA8b2Jy
dWZhdUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtbG9naWNhbF0gSW1wbGVtZW50IGZsb3ct
cmVsYXRpdmUgbWFyZ2luLCBwYWRkaW5nIGFuZCBib3JkZXIgc2hvcnRoYW5kcwpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9qc2Mtc3RyZXNzLXRlc3QtaGVscGVycy9ieXRlY29kZS1jYWNoZS10
ZXN0LWhlbHBlci5zaCBiL1Rvb2xzL1NjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0
ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNlMmQ1OTMzMTYxZjQ3YmNh
YmFlNjUwODg4MGZjNWY3YTViZGJlNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
anNjLXN0cmVzcy10ZXN0LWhlbHBlcnMvYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2gKQEAg
LTAsMCArMSw1MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitzZXQgLWUKKwor
bXlzeXMoKSB7CisgICAgc2V0ICtlCisgICAgZXZhbCAiJCoiCisgICAgZXhpdENvZGU9JD8KKyAg
ICBpZiBbICRleGl0Q29kZSAhPSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiQ29tbWFuZCAnJCon
IGZhaWxlZCIKKyAgICAgICAgcmV0dXJuICRleGl0Q29kZQorICAgIGZpCit9CisKK3BhdGhUb1ZN
PSQxCitzaGlmdAoraW5wdXRGaWxlPSQxCitzaGlmdAorZXh0cmFPcHRpb25zPSggIiRAIiApCitk
aXNrQ2FjaGVQYXRoPSQobWt0ZW1wIC1kIC10ICJieXRlY29kZS1jYWNoZSIpCisKK190cmFwX2V4
aXQoKSB7IHJtIC1yZiAiJGRpc2tDYWNoZVBhdGgiOyB9Cit0cmFwIF90cmFwX2V4aXQgRVhJVAor
CitleHBvcnQgSlNDX2Rpc2tDYWNoZVBhdGg9JGRpc2tDYWNoZVBhdGgKK215c3lzICIkcGF0aFRv
Vk0iICIkaW5wdXRGaWxlIiAiJHtleHRyYU9wdGlvbnNbQF19IgorZXhwb3J0IEpTQ19mb3JjZURp
c2tDYWNoZT10cnVlCitteXN5cyAiJHBhdGhUb1ZNIiAiJGlucHV0RmlsZSIgIiR7ZXh0cmFPcHRp
b25zW0BdfSIKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggOTQ5ZTNmNWI1NTIw
MTFiNTFhZDIyZGYzZWEwYjVhYmUzNmIzMGFkOS4uMTBiNzZlMWNlM2I2YzY4MzU5ODVhNTc5ODAw
YjkyZTAzYjcyY2QwMSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02NTUsNiAr
NjU1LDE1IEBAIGRlZiBydW5EZWZhdWx0KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAg
ICAgcnVuKCJkZWZhdWx0IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykpCiBlbmQKIAorZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKKyAgICB1bmxlc3MgJGhvc3RPUyA9PSAiZGFyd2luIgorICAgICAgICBza2lwCisg
ICAgICAgIHJldHVybgorICAgIGVuZAorICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyAkdGVz
dFNwZWNpZmljUmVxdWlyZWRPcHRpb25zICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMKKyAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAo
cGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIHBh
dGhUb1ZNLnRvX3MsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5k
bGVyLCBzaW1wbGVFcnJvckhhbmRsZXIpCitlbmQKKwogZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0v
NDAzMzExMjE+CiAgICAgaWYgJHJlbW90ZSBvciAoJGFyY2hpdGVjdHVyZSAhfiAveDg2L2kgYW5k
ICRob3N0T1MgPT0gImRhcndpbiIpCkBAIC03NTEsNiArNzYwLDcgQEAgZGVmIGRlZmF1bHRSdW4K
ICAgICAgICAgZGVmYXVsdFF1aWNrUnVuCiAgICAgZWxzZQogICAgICAgICBydW5EZWZhdWx0Cisg
ICAgICAgIHJ1bkJ5dGVjb2RlQ2FjaGUKICAgICAgICAgaWYgJGppdFRlc3RzCiAgICAgICAgICAg
ICBydW5Ob0xMSW50CiAgICAgICAgICAgICBydW5Ob0NKSVRWYWxpZGF0ZVBoYXNlcwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>