<?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>166060</bug_id>
          
          <creation_ts>2016-12-20 06:59:42 -0800</creation_ts>
          <short_desc>Modernize for loops in JSC</short_desc>
          <delta_ts>2016-12-20 10:26:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local 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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Konstantin Tokarev">annulen</reporter>
          <assigned_to name="Konstantin Tokarev">annulen</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1261375</commentid>
    <comment_count>0</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2016-12-20 06:59:42 -0800</bug_when>
    <thetext>Modernize for loops in JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261376</commentid>
    <comment_count>1</comment_count>
      <attachid>297519</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2016-12-20 07:01:12 -0800</bug_when>
    <thetext>Created attachment 297519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261386</commentid>
    <comment_count>2</comment_count>
      <attachid>297519</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-12-20 08:25:17 -0800</bug_when>
    <thetext>Comment on attachment 297519
Patch

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

r=me with comments.

&gt; Source/JavaScriptCore/API/JSCallbackObject.h:111
&gt; +            for (auto&amp; ptr : m_propertyMap) {
&gt; +                if (ptr.value)
&gt; +                    visitor.append(ptr.value);

Use the name like `pair` since it is no longer pointer.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:4068
&gt; +        for (auto&amp; exit : jitCode-&gt;osrExit) {
&gt;              exit.considerAddingAsFrequentExitSite(profiledBlock);
&gt;          }

Drop this brace.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:205
&gt; +    for (FunctionMetadataNode* function : functionStack) {
&gt;          m_functionsToInitialize.append(std::make_pair(function, GlobalFunctionVariable));
&gt;      }

Drop this brace. And use `auto*` instead.

&gt; Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:294
&gt; +        for (Node* node : *m_block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1422
&gt; +        for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGIntegerCheckCombiningPhase.cpp:195
&gt; +        for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp:1112
&gt; +                for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:105
&gt; +            for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:111
&gt; +        for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:563
&gt; +            for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1772
&gt; +        for (auto&amp; info : m_generationInfo) {
&gt;              RELEASE_ASSERT(!info.alive());
&gt;          }

Drop this brace.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:8896
&gt; +    for (BranchRecord&amp; branch : m_branches) {
&gt;          branch.jump.linkTo(m_jit.blockHeads()[branch.destination-&gt;index], &amp;m_jit);
&gt;      }

Drop this brace. And use `auto&amp;`.

&gt; Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp:74
&gt; +            for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp:275
&gt; +                    for (Node* subNode : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp:307
&gt; +            for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp:365
&gt; +                    for (auto subNode : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGValidate.cpp:641
&gt; +            for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/dfg/DFGVirtualRegisterAllocationPhase.cpp:62
&gt; +            for (Node* node : *block) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/heap/HeapVerifier.cpp:149
&gt; +    for (auto&amp; objData : after.liveObjects) {
&gt;          knownLiveSet.add(objData.obj);
&gt;      }

Drop this brace.

&gt; Source/JavaScriptCore/heap/MarkedAllocator.cpp:54
&gt; +    for (MarkedBlock::Handle* block : m_blocks) {

Let&apos;s use `auto*`.

&gt; Source/JavaScriptCore/jit/JIT.cpp:696
&gt; +    for (SwitchRecord record : m_switches) {

Let&apos;s use `auto&amp;`

&gt; Source/JavaScriptCore/jit/JIT.cpp:698
&gt;  

In the following code, we have the similar for statements. One for branchOffsets and one for offsetTable.
I think we can change them too.

&gt; Source/JavaScriptCore/runtime/FunctionHasExecutedCache.cpp:41
&gt; +    for (auto&amp; iter : map) {

Instead of using `iter`, let&apos;s use `pair` since it is no longer iterator.

&gt; Source/JavaScriptCore/runtime/FunctionHasExecutedCache.cpp:91
&gt; +    for (auto&amp; iter : map) {

Instead of using `iter`, let&apos;s use `pair` since it is no longer iterator.

&gt; Source/JavaScriptCore/runtime/TypeProfiler.cpp:125
&gt; +    for (TypeLocation* location : bucket) {

Use `auto*`.

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:61
&gt; +            for (RefPtr&lt;StructureShape&gt;&amp; seenShape : m_structureHistory) {

Use `auto&amp;`.

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:116
&gt; +    for (const RefPtr&lt;StructureShape&gt;&amp; shape : m_structureHistory) {

Use `const auto&amp;` here.

&gt; Source/JavaScriptCore/runtime/WeakMapData.cpp:115
&gt; +    for (auto&amp; it : m_target-&gt;m_map) {
&gt; +        if (!Heap::isMarked(it.key))
&gt;              continue;
&gt;          m_liveKeyCount++;
&gt; -        visitor.append(it-&gt;value);
&gt; +        visitor.append(it.value);

You can rename `it` to something like `pair` since it is no longer iterator.

&gt; Source/JavaScriptCore/runtime/WeakMapData.cpp:133
&gt; +        for (auto&amp; it : m_target-&gt;m_map) {
&gt; +            if (Heap::isMarked(it.key))
&gt;                  continue;
&gt; -            deadEntries.uncheckedAppend(it-&gt;key);
&gt; +            deadEntries.uncheckedAppend(it.key);
&gt;          }

You can rename `it` to something like `pair` since it is no longer iterator.

&gt; Source/JavaScriptCore/runtime/WeakMapData.cpp:134
&gt; +        for (auto&amp; deadEntrie : deadEntries)

/deadEntrie/deadEntry/

&gt; Source/JavaScriptCore/runtime/WeakMapData.cpp:141
&gt; +        for (auto&amp; it : m_target-&gt;m_map) {
&gt; +            if (!Heap::isMarked(it.key))
&gt;                  continue;
&gt; -            newMap.add(it-&gt;key, it-&gt;value);
&gt; +            newMap.add(it.key, it.value);

You can rename `it` to something like `pair` since it is no longer iterator.

&gt; Source/JavaScriptCore/tools/ProfileTreeNode.h:91
&gt; +        for (MapEntry* entry : entries) {

Use `auto*`.

&gt; Source/JavaScriptCore/yarr/YarrInterpreter.cpp:1946
&gt; +            for (PatternTerm&amp; term : alternative-&gt;m_terms) {

Use `auto&amp;`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261391</commentid>
    <comment_count>3</comment_count>
      <attachid>297519</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2016-12-20 09:03:17 -0800</bug_when>
    <thetext>Comment on attachment 297519
Patch

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

&gt;&gt; Source/JavaScriptCore/API/JSCallbackObject.h:111
&gt;&gt; +                    visitor.append(ptr.value);
&gt; 
&gt; Use the name like `pair` since it is no longer pointer.

Done

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:4068
&gt;&gt;          }
&gt; 
&gt; Drop this brace.

Done

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:205
&gt;&gt;      }
&gt; 
&gt; Drop this brace. And use `auto*` instead.

Done

&gt;&gt; Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:294
&gt;&gt; +        for (Node* node : *m_block) {
&gt; 
&gt; Let&apos;s use `auto*`.

I thought that because both &quot;auto&quot; and &quot;Node&quot; are both 4-character identifiers, there is little incentive to prefer &quot;auto&quot; in places like this one

&gt;&gt; Source/JavaScriptCore/heap/HeapVerifier.cpp:149
&gt;&gt;      }
&gt; 
&gt; Drop this brace.

Done

&gt;&gt; Source/JavaScriptCore/heap/MarkedAllocator.cpp:54
&gt;&gt; +    for (MarkedBlock::Handle* block : m_blocks) {
&gt; 
&gt; Let&apos;s use `auto*`.

Done

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:698
&gt;&gt;  
&gt; 
&gt; In the following code, we have the similar for statements. One for branchOffsets and one for offsetTable.
&gt; I think we can change them too.

Loop at 705 cannot be converted straightforwardly because it operates with 2 parallel Vectors

Done for loops at 714 and 726

&gt;&gt; Source/JavaScriptCore/runtime/FunctionHasExecutedCache.cpp:41
&gt;&gt; +    for (auto&amp; iter : map) {
&gt; 
&gt; Instead of using `iter`, let&apos;s use `pair` since it is no longer iterator.

Done

&gt;&gt; Source/JavaScriptCore/runtime/FunctionHasExecutedCache.cpp:91
&gt;&gt; +    for (auto&amp; iter : map) {
&gt; 
&gt; Instead of using `iter`, let&apos;s use `pair` since it is no longer iterator.

Done

&gt;&gt; Source/JavaScriptCore/runtime/TypeProfiler.cpp:125
&gt;&gt; +    for (TypeLocation* location : bucket) {
&gt; 
&gt; Use `auto*`.

Done

&gt;&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:61
&gt;&gt; +            for (RefPtr&lt;StructureShape&gt;&amp; seenShape : m_structureHistory) {
&gt; 
&gt; Use `auto&amp;`.

Done

&gt;&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:116
&gt;&gt; +    for (const RefPtr&lt;StructureShape&gt;&amp; shape : m_structureHistory) {
&gt; 
&gt; Use `const auto&amp;` here.

Done

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapData.cpp:115
&gt;&gt; +        visitor.append(it.value);
&gt; 
&gt; You can rename `it` to something like `pair` since it is no longer iterator.

Done

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapData.cpp:133
&gt;&gt;          }
&gt; 
&gt; You can rename `it` to something like `pair` since it is no longer iterator.

Done

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapData.cpp:134
&gt;&gt; +        for (auto&amp; deadEntrie : deadEntries)
&gt; 
&gt; /deadEntrie/deadEntry/

Done

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapData.cpp:141
&gt;&gt; +            newMap.add(it.key, it.value);
&gt; 
&gt; You can rename `it` to something like `pair` since it is no longer iterator.

Done

&gt;&gt; Source/JavaScriptCore/tools/ProfileTreeNode.h:91
&gt;&gt; +        for (MapEntry* entry : entries) {
&gt; 
&gt; Use `auto*`.

Done

&gt;&gt; Source/JavaScriptCore/yarr/YarrInterpreter.cpp:1946
&gt;&gt; +            for (PatternTerm&amp; term : alternative-&gt;m_terms) {
&gt; 
&gt; Use `auto&amp;`.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261427</commentid>
    <comment_count>4</comment_count>
      <attachid>297525</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2016-12-20 09:42:45 -0800</bug_when>
    <thetext>Created attachment 297525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261428</commentid>
    <comment_count>5</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2016-12-20 09:43:18 -0800</bug_when>
    <thetext>Changed &quot;Node* node&quot; to use auto* as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261485</commentid>
    <comment_count>6</comment_count>
      <attachid>297525</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-20 10:26:52 -0800</bug_when>
    <thetext>Comment on attachment 297525
Patch

Clearing flags on attachment: 297525

Committed r210023: &lt;http://trac.webkit.org/changeset/210023&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261486</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-20 10:26:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297519</attachid>
            <date>2016-12-20 07:01:12 -0800</date>
            <delta_ts>2016-12-20 09:42:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166060-20161220180010.patch</filename>
            <type>text/plain</type>
            <size>43867</size>
            <attacher name="Konstantin Tokarev">annulen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YWNmOTFjZDJmZDQ2N2I3YmYwYTk3MmQwNzVkMTMwOTIxMGMxODg0Li5kYTJjNTQ5MjNhNmQ4ZGM4
ZThmMDI2YzQxM2ZkOTEwZThjNDAwYWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw5MyBAQAogMjAxNi0xMi0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5k
ZXgucnU+CiAKKyAgICAgICAgTW9kZXJuaXplIGZvciBsb29wcyBpbiBKU0MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjA2MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OkpTUHJpdmF0ZVByb3Bl
cnR5TWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoK
KyAgICAgICAgKEpTQzo6T2JqZWN0UGF0dGVybk5vZGU6OmJpbmRWYWx1ZSk6CisgICAgICAgICog
ZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YXBwbHlCcmVh
a3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0lu
QmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpDbG9iYmVyU2V0OjpzZXRPZik6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJZGVudGlm
aWVycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlB
ZGQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5p
bmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrQ29tYmluaW5nUGhh
c2U6OmhhbmRsZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0
aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdMSUNNUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkxJQ01QaGFzZTo6cnVuKToKKyAgICAgICAgKiBk
ZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
Ok1heGltYWxGbHVzaEluc2VydGlvblBoYXNlOjp0cmVhdFJvb3RCbG9jayk6CisgICAgICAgICog
ZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4pOgor
ICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudFN0cnVjdHVy
ZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgICogaGVhcC9IZWFwVmVyaWZpZXIuY3BwOgorICAgICAgICAoSlNDOjp0cmltRGVh
ZE9iamVjdHNGcm9tTGlzdCk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6dHJpbURlYWRP
YmplY3RzKToKKyAgICAgICAgKiBoZWFwL0xpdmVPYmplY3RMaXN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdExpc3Q6OmZpbmRPYmplY3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmNwcDoKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrOjpmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSk6CisgICAgICAg
ICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogcGFy
c2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmly
b25tZW50OjptYXJrQWxsVmFyaWFibGVzQXNDYXB0dXJlZCk6CisgICAgICAgIChKU0M6OlZhcmlh
YmxlRW52aXJvbm1lbnQ6Omhhc0NhcHR1cmVkVmFyaWFibGVzKToKKyAgICAgICAgKiBydW50aW1l
L0Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZTo6aGFzRXhlY3V0ZWRBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZTo6Z2V0RnVuY3Rpb25SYW5nZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVQ
cm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0Ojph
ZGRUeXBlSW5mb3JtYXRpb24pOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpkdW1wVHlwZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcERhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrTWFwRGF0YTo6RGVhZEtleUNsZWFuZXI6OnZpc2l0V2Vha1JlZmVyZW5jZXMp
OgorICAgICAgICAoSlNDOjpXZWFrTWFwRGF0YTo6RGVhZEtleUNsZWFuZXI6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KToKKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpkdW1wSW50ZXJuYWwpOgorICAgICAgICAqIHlhcnIv
WWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjpl
bWl0RGlzanVuY3Rpb24pOgorCisyMDE2LTEyLTIwICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51
bGVuQHlhbmRleC5ydT4KKwogICAgICAgICBfX2NwdWlkKCkgcmVxdWlyZXMgPGludHJpbi5oPiB0
byBiZSBpbmNsdWRlZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY2MDUxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmgKaW5kZXggZjYxNWNlOThkMWEzOTdjMjNkNmIzZjJhM2E2MTQ5MDY3MGU2YWUwNi4uNGEz
NmQwZjdhNjg3NWIxNGEwMDM0MDIxODA3MDRmOWY2NzgzYmRmZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKQEAgLTEwNiw5ICsxMDYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAg
ICAgIGZvciAoUHJpdmF0ZVByb3BlcnR5TWFwOjppdGVyYXRvciBwdHIgPSBtX3Byb3BlcnR5TWFw
LmJlZ2luKCk7IHB0ciAhPSBtX3Byb3BlcnR5TWFwLmVuZCgpOyArK3B0cikgewotICAgICAgICAg
ICAgICAgIGlmIChwdHItPnZhbHVlKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZChwdHItPnZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcHRyIDogbV9wcm9wZXJ0eU1h
cCkgeworICAgICAgICAgICAgICAgIGlmIChwdHIudmFsdWUpCisgICAgICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKHB0ci52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA3NWEw
MGVkYzI5MDkyYTYxNjVlNmRjZjZhYzhmYTNiMTBiNTBjNzhmLi5mYTQ0NmE4N2MyMGZhNGU3Njcy
ZjFmZmY5OTYwNDVjYjZlZmMxNWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcApAQCAtMTc2OSw4ICsxNzY5LDggQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBCeXRlY29kZSgKICAgICBpZiAoIWV4aXRTaXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgb3V0
LnByaW50KCIgISEgZnJlcXVlbnQgZXhpdHM6ICIpOwogICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0U2l0ZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGV4aXRTaXRlc1tpXS5raW5kKCksICIg
IiwgZXhpdFNpdGVzW2ldLmppdFR5cGUoKSk7CisgICAgICAgIGZvciAoYXV0byYgZXhpdFNpdGUg
OiBleGl0U2l0ZXMpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGV4aXRTaXRlLmtpbmQo
KSwgIiAiLCBleGl0U2l0ZS5qaXRUeXBlKCkpOwogICAgIH0KICNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQogICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CkBAIC0yNjc3LDkgKzI2NzcsOSBAQCB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgU2xvdFZpc2l0b3ImIHZpcwogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1v
biA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGZvciAoYXV0byYgd2Vha1JlZmVy
ZW5jZSA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCiAgICAgICAgICAgICBh
bGxBcmVNYXJrZWRTb0ZhciAmPSB3ZWFrUmVmZXJlbmNlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
LSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPnRy
YW5zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTWFya1RyYW5z
aXRpb24oZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXSkpIHsKKworICAgICAgICBmb3IgKGF1dG8m
IHRyYW5zaXRpb24gOiBkZmdDb21tb24tPnRyYW5zaXRpb25zKSB7CisgICAgICAgICAgICBpZiAo
c2hvdWxkTWFya1RyYW5zaXRpb24odHJhbnNpdGlvbikpIHsKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUgdGFyZ2V0IG9m
IHRoZQogICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZlOgogICAgICAg
ICAgICAgICAgIC8vCkBAIC0yNjk4LDggKzI2OTgsOCBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZp
cwogICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2hvcnQtY2lyY3VpdCB0aGUgbGl2ZW5lc3Mg
aWYgdGhlIHN0cnVjdHVyZSBpcyBoYXJtbGVzcwogICAgICAgICAgICAgICAgIC8vIHRvIG1hcmsg
KGkuZS4gaXRzIGdsb2JhbCBvYmplY3QgYW5kIHByb3RvdHlwZSBhcmUgYm90aCBhbHJlYWR5CiAg
ICAgICAgICAgICAgICAgLy8gbGl2ZSkuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKKworICAg
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRyYW5zaXRpb24ubV90byk7CiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwogICAg
ICAgICB9CkBAIC0zMDY4LDEyICszMDY4LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZp
c2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwKICAg
ICBpZiAobV9yYXJlRGF0YSkKICAgICAgICAgbV9yYXJlRGF0YS0+bV9kaXJlY3RFdmFsQ29kZUNh
Y2hlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKG1f
Y29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZnVuY3Rpb25FeHByc1tpXSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKG1fZnVuY3Rpb25EZWNsc1tpXSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlc1tpXS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBm
b3IgKGF1dG8mIGZ1bmN0aW9uRXhwciA6IG1fZnVuY3Rpb25FeHBycykKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmQoZnVuY3Rpb25FeHByKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVjbCA6IG1f
ZnVuY3Rpb25EZWNscykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoZnVuY3Rpb25EZWNsKTsKKyAg
ICBmb3IgKGF1dG8mIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlIDogbV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZXMpCisgICAgICAgIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJ
bmZvIDogbV9ieVZhbEluZm9zKQpAQCAtMzA5NiwxOCArMzA5NiwxOCBAQCB2b2lkIENvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFNsb3RWaXNpdAogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRD
b2RlLT5kZmdDb21tb24oKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21t
b24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghIWRmZ0NvbW1vbi0+
dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
ZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pOyAvLyBBbG1vc3QgY2VydGFp
bmx5IG5vdCBuZWNlc3NhcnksIHNpbmNlIHRoZSBjb2RlIG9yaWdpbiBzaG91bGQgYWxzbyBiZSBh
IHdlYWsgcmVmZXJlbmNlLiBCZXR0ZXIgdG8gYmUgc2FmZSwgdGhvdWdoLgotICAgICAgICB2aXNp
dG9yLmFwcGVuZChkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fZnJvbSk7Ci0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV90byk7CisgICAgZm9yIChh
dXRvJiB0cmFuc2l0aW9uIDogZGZnQ29tbW9uLT50cmFuc2l0aW9ucykgeworICAgICAgICBpZiAo
ISF0cmFuc2l0aW9uLm1fY29kZU9yaWdpbikKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRy
YW5zaXRpb24ubV9jb2RlT3JpZ2luKTsgLy8gQWxtb3N0IGNlcnRhaW5seSBub3QgbmVjZXNzYXJ5
LCBzaW5jZSB0aGUgY29kZSBvcmlnaW4gc2hvdWxkIGFsc28gYmUgYSB3ZWFrIHJlZmVyZW5jZS4g
QmV0dGVyIHRvIGJlIHNhZmUsIHRob3VnaC4KKyAgICAgICAgdmlzaXRvci5hcHBlbmQodHJhbnNp
dGlvbi5tX2Zyb20pOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0cmFuc2l0aW9uLm1fdG8pOwog
ICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFr
UmVmZXJlbmNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlc1tpXSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZn
Q29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXSk7CisgICAg
Zm9yIChhdXRvJiB3ZWFrUmVmZXJlbmNlIDogZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcykKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmQod2Vha1JlZmVyZW5jZSk7CisKKyAgICBmb3IgKGF1dG8mIHdl
YWtTdHJ1Y3R1cmVSZWZlcmVuY2UgOiBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2Vz
KQorICAgICAgICB2aXNpdG9yLmFwcGVuZCh3ZWFrU3RydWN0dXJlUmVmZXJlbmNlKTsKIAogICAg
IGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKICNlbmRpZiAgICAKQEAg
LTMzNzYsOCArMzM3Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0
dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgICAgIGlmIChE
Rkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCp0aGlz
LCAiIHdpbGwgYmUgamV0dGlzb25lZCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZGVhZCByZWZl
cmVuY2VzOlxuIik7CiAgICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1f
aml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAg
IERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24gPSBkZmdDb21tb24tPnRy
YW5zaXRpb25zW2ldOworICAgICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogZGZnQ29t
bW9uLT50cmFuc2l0aW9ucykgewogICAgICAgICAgICAgICAgIEpTQ2VsbCogb3JpZ2luID0gdHJh
bnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBmcm9t
ID0gdHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiB0byA9
IHRyYW5zaXRpb24ubV90by5nZXQoKTsKQEAgLTM5MDYsOSArMzkwNSw5IEBAIGJvb2wgQ29kZUJs
b2NrOjpzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKQogCiBBcnJheVByb2ZpbGUqIENvZGVC
bG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FycmF5
UHJvZmlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYXJyYXlQcm9maWxlc1tpXS5i
eXRlY29kZU9mZnNldCgpID09IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuICZt
X2FycmF5UHJvZmlsZXNbaV07CisgICAgZm9yIChhdXRvJiBtX2FycmF5UHJvZmlsZSA6IG1fYXJy
YXlQcm9maWxlcykgeworICAgICAgICBpZiAobV9hcnJheVByb2ZpbGUuYnl0ZWNvZGVPZmZzZXQo
KSA9PSBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiAmbV9hcnJheVByb2ZpbGU7
CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtNDA2NCw4ICs0MDYzLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKQogICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7
CiAgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6IHsKICAgICAgICAgREZHOjpKSVRDb2RlKiBqaXRD
b2RlID0gbV9qaXRDb2RlLT5kZmcoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIERGRzo6T1NSRXhp
dCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6
IGppdENvZGUtPm9zckV4aXQpIHsKICAgICAgICAgICAgIGV4aXQuY29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRCbG9jayk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CkBAIC00MjA1LDEwICs0MjAzLDEwIEBAIGJvb2wgQ29kZUJsb2NrOjp1c2VzT3Bjb2RlKE9wY29k
ZUlEIG9wY29kZUlEKQogCiBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9jb25z
dGFudFJlZ2lzdGVyc1tpXS5nZXQoKS5pc0VtcHR5KCkpCisgICAgZm9yIChhdXRvJiBjb25zdGFu
dFJlZ2lzdGVyIDogbV9jb25zdGFudFJlZ2lzdGVycykgeworICAgICAgICBpZiAoY29uc3RhbnRS
ZWdpc3Rlci5nZXQoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUq
PihtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKSkgeworICAgICAgICBpZiAoU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KGNvbnN0YW50UmVn
aXN0ZXIuZ2V0KCkpKSB7CiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5
bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgYXV0byBlbmQgPSBzeW1ib2xUYWJsZS0+
ZW5kKGxvY2tlcik7CiAgICAgICAgICAgICBmb3IgKGF1dG8gcHRyID0gc3ltYm9sVGFibGUtPmJl
Z2luKGxvY2tlcik7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDk5
NzFkNTdkOGQ3ZjhiZDZmMDViNzhmZDEyYWQwYWIwOTYxNjM2MzQuLjJjMmU0Yjc4NzVkYTQzYTEz
OGI2NTViZmY3MmE3YTViN2NkNDllM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xMjYsOCArMTI2
LDcgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKIAogICAgIG1f
c3RhdGljUHJvcGVydHlBbmFseXplci5raWxsKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV90cnlSYW5nZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVHJ5UmFuZ2UmIHJhbmdl
ID0gbV90cnlSYW5nZXNbaV07CisgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fdHJ5UmFuZ2VzKSB7
CiAgICAgICAgIGludCBzdGFydCA9IHJhbmdlLnN0YXJ0LT5iaW5kKCk7CiAgICAgICAgIGludCBl
bmQgPSByYW5nZS5lbmQtPmJpbmQoKTsKICAgICAgICAgCkBAIC0yMDEsOCArMjAwLDcgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgUHJvZ3JhbU5vZGUqIHBy
b2dyYW1Ob2RlLCBVbmxpbmtlZFAKIAogICAgIGNvbnN0IEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9u
U3RhY2sgPSBwcm9ncmFtTm9kZS0+ZnVuY3Rpb25TdGFjaygpOwogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZ1bmN0aW9u
TWV0YWRhdGFOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07CisgICAgZm9yIChGdW5j
dGlvbk1ldGFkYXRhTm9kZSogZnVuY3Rpb24gOiBmdW5jdGlvblN0YWNrKSB7CiAgICAgICAgIG1f
ZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihmdW5jdGlvbiwgR2xv
YmFsRnVuY3Rpb25WYXJpYWJsZSkpOwogICAgIH0KICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVC
eXRlY29kZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAKaW5kZXggOTNmNGJmNmJiYzVmZjIzYmM4NTM3Y2MxYWZhOGVmOTc4
MmQwY2NmOC4uNmFhNGZiM2FhNmQ0MTRlY2Q5OTk2NDkzMTNkYjgxODFkODBmYTY5NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cApAQCAtMzk2Miw4ICszOTYyLDcgQEAgdm9pZCBPYmplY3RQYXR0ZXJuTm9kZTo6dG9TdHJpbmco
U3RyaW5nQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHZvaWQgT2JqZWN0UGF0dGVybk5vZGU6OmJp
bmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiByaHMpIGNv
bnN0CiB7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHJocywgQVND
SUlMaXRlcmFsKCJSaWdodCBzaWRlIG9mIGFzc2lnbm1lbnQgY2Fubm90IGJlIGRlc3RydWN0dXJl
ZCIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0UGF0dGVybnMpIHsKICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAg
ICAgIGlmICghdGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikgewogICAgICAgICAgICAgLy8gU2hv
dWxkIG5vdCBlbWl0IGdldF9ieV9pZCBmb3IgaW5kZXhlZCBvbmVzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKaW5kZXggMzBiYmE1OWM5Nzg4YjAzZTczODMz
ZDE0NzIyZDZhZDJkNzgzM2JkMy4uZmFkODY1YmFhMTM4YmFiMWIyYzQ4OWIzMWEyYmFiNzBhZjJl
YmYzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCkBA
IC0yOTUsMTAgKzI5NSw4IEBAIHZvaWQgRGVidWdnZXI6OnRvZ2dsZUJyZWFrcG9pbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQsIEJyCiB2b2lkIERlYnVnZ2Vy
OjphcHBseUJyZWFrcG9pbnRzKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEJyZWFrcG9p
bnRJRFRvQnJlYWtwb2ludE1hcCYgYnJlYWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtw
b2ludDsKLSAgICBmb3IgKGF1dG8gaXQgPSBicmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBicmVh
a3BvaW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBCcmVha3BvaW50JiBicmVha3BvaW50ID0g
Kml0LT52YWx1ZTsKLSAgICAgICAgdG9nZ2xlQnJlYWtwb2ludChjb2RlQmxvY2ssIGJyZWFrcG9p
bnQsIEJyZWFrcG9pbnRFbmFibGVkKTsKLSAgICB9CisgICAgZm9yIChhdXRvKiBicmVha3BvaW50
IDogYnJlYWtwb2ludHMudmFsdWVzKCkpCisgICAgICAgIHRvZ2dsZUJyZWFrcG9pbnQoY29kZUJs
b2NrLCAqYnJlYWtwb2ludCwgQnJlYWtwb2ludEVuYWJsZWQpOwogfQogCiBjbGFzcyBEZWJ1Z2dl
cjo6VG9nZ2xlQnJlYWtwb2ludEZ1bmN0b3IgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKaW5kZXggNjdiMzU3NDM4MmFhZDcw
MjFmM2NhNzY4NWZhM2E0OWNkZjRlM2ZlMy4uZGQxYzA2ZGVkMjE0NTAzYjRkZGFkYjM4MmI4MzEw
Y2UwZjkxZjU3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuY3BwCkBAIC0yOTEsOSArMjkxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gYnV0IG5vdCBsb2dpY2FsUmVmQ291bnQgPT0gYWN0dWFsUmVmQ291bnQpLiBBc3N1bWVz
IHRoYXQgaXQgY2FuIGJyZWFrIHJlZgogICAgICAgICAvLyBjb3VudHMuCiAgICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1fYmxvY2stPnNp
emUoKTsgKytub2RlSW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5h
dChub2RlSW5kZXgpOwotICAgICAgICAgICAgCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpt
X2Jsb2NrKSB7CiAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRoZSBydWxlcyBmb3IgdGhyZWFkZWQgQ1BT
IGZvcm06CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJT
ZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAppbmRl
eCBjZTMzOThlZTViMTU2YTcxZTllZDI0YzViMDA0YWQ2ZjYwNDM0OWVkLi42OGU5YzA1YTg2MDkw
OGI1ZDU5OGJiY2MyZWVmNjU0MTIzMDAwMjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlclNldC5jcHAKQEAgLTEyOSw5ICsxMjksOSBAQCB2b2lkIENsb2JiZXJTZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIEhhc2hTZXQ8QWJzdHJhY3RIZWFwPiBDbG9i
YmVyU2V0OjpzZXRPZihib29sIGRpcmVjdCkgY29uc3QKIHsKICAgICBIYXNoU2V0PEFic3RyYWN0
SGVhcD4gcmVzdWx0OwotICAgIGZvciAoSGFzaE1hcDxBYnN0cmFjdEhlYXAsIGJvb2w+Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gbV9jbG9iYmVycy5iZWdpbigpOyBpdGVyICE9IG1fY2xvYmJlcnMu
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+dmFsdWUgPT0gZGlyZWN0KQotICAg
ICAgICAgICAgcmVzdWx0LmFkZChpdGVyLT5rZXkpOworICAgIGZvciAoYXV0byYgY2xvYmJlciA6
IG1fY2xvYmJlcnMpIHsKKyAgICAgICAgaWYgKGNsb2JiZXIudmFsdWUgPT0gZGlyZWN0KQorICAg
ICAgICAgICAgcmVzdWx0LmFkZChjbG9iYmVyLmtleSk7CiAgICAgfQogICAgIHJldHVybiByZXN1
bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJ
ZGVudGlmaWVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVu
dGlmaWVycy5jcHAKaW5kZXggNDhkNzdjM2UxODIzYjRlNzU4YzQxOWIzMjAzMjIxMTBjNjAwZjQ0
NS4uYjRjZWM2YjRlOTk4MDg4OTkyZmFmMTViNzc4Zjg3ODFhY2U0YjYyNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcApAQCAt
ODcsOCArODcsNyBAQCBVbmlxdWVkU3RyaW5nSW1wbCogRGVzaXJlZElkZW50aWZpZXJzOjphdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKIAogdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFk
ZChWTSYgdm0sIENvbW1vbkRhdGEqIGNvbW1vbkRhdGEpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYWRkZWRJZGVudGlmaWVycy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRv
IHJlcCA9IG1fYWRkZWRJZGVudGlmaWVyc1tpXTsKKyAgICBmb3IgKGF1dG8gcmVwIDogbV9hZGRl
ZElkZW50aWZpZXJzKSB7CiAgICAgICAgIEFTU0VSVChyZXAtPmhhc0F0TGVhc3RPbmVSZWYoKSk7
CiAgICAgICAgIGNvbW1vbkRhdGEtPmRmZ0lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyOjpm
cm9tVWlkKCZ2bSwgcmVwKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAppbmRleCBlYzRiMjBhZDc5Y2Q1NDFjNjM5ZDA4YmU0MjUxYTEwZDI0NDNmYjRhLi4xM2Fh
ZWY5NmMwODkwMDFiODM0YjFkMDc1ODE4YTMzM2NiOWZiNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMTQxOSw5ICsxNDE5LDcgQEAgdm9pZCBHcmFwaDo6dmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewotICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAg
CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewogICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKTsg
aS0tOykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNo
ZWNrQ29tYmluaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKaW5kZXggMTg5YjZkNzdlMDUzY2FiYmUwNGVmNzdk
MWY3ZjIyYzY2ZGQ5NjA0Mi4uMTAxYzY2YjZkZGM0ZGE2OGYyMTRjMWFjMzM3MWE0YzQ1MmFmYTQx
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyQ2hlY2tD
b21iaW5pbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKQEAgLTE5Miw4ICsxOTIsNyBAQCBwcml2YXRlOgog
ICAgICAgICAvLyBGaXJzdCB3ZSBjb2xsZWN0IFJhbmdlcy4gSWYgb3BlcmF0aW9ucyB3aXRoaW4g
dGhlIHJhbmdlIGhhdmUgZW5vdWdoIHJlZHVuZGFuY3ksCiAgICAgICAgIC8vIHdlIGhvaXN0LiBB
bmQgdGhlbiB3ZSByZW1vdmUgYWRkaXRpb25zIGFuZCBjaGVja3MgdGhhdCBmYWxsIHdpdGhpbiB0
aGUgbWF4IHJhbmdlLgogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewotICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgIFJhbmdlS2V5QW5kQWRkZW5kIGRhdGEgPSBy
YW5nZUtleUFuZEFkZGVuZChub2RlKTsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAiOiAiLCBkYXRhLCAiXG4iKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0
aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VP
cHRpbWl6YXRpb25QaGFzZS5jcHAKaW5kZXggNzZmZjJkZDZmYmQ3MGJkY2I5ZWUzYmZmNmYzODk3
ZGE1MGZmY2ZiMy4uNGNmNDNkNmNhZTQxYzVlZTliYWViNDExMWJkOTAyNDA0OTdhNzk1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6
YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2Vy
UmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAKQEAgLTExMDksOCArMTEwOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fcmVsYXRpb25zaGlwcyA9IG1fcmVsYXRp
b25zaGlwc0F0SGVhZFtibG9ja107CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJBbmFseXNpczogYXQgIiwgbm9kZSwgIjogIiwgbGlzdER1bXAoc29ydGVkUmVsYXRp
b25zaGlwcygpKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVOb2RlKG5vZGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAw
YWM2YWZmOThhMzJlYTBlNzQ4YTUzODQwYjNlYmJlY2NiMjIyMDI1Li4yOWU5MjMxMDc1NDk4NWM3
MDlhODQ0M2QzMGUxNTA4ZjMxMGEwMTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcApAQCAtMjc0LDggKzI3NCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwog
ICAgIH0KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIEpTQ2FsbFJlY29yZCYgcmVjb3JkID0gbV9qc0NhbGxzW2ldOwor
ICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9qc0NhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5z
bG93Q2FsbCwgRnVuY3Rpb25QdHIobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZvLnNldENhbGxM
b2NhdGlvbnMoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAKaW5k
ZXggZTYwOTc2NGU4NTljZjgwZGRhYzU4YjNjNDJjMDcwNWMxMmU5MjYzYS4uNTBmODVmMTc0Njgy
OTFjODYzMzE1OTU1MTNjYjA5MmY4NWRlNmI3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTElDTVBoYXNlLmNwcApAQCAtMTAyLDkgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGlmICghbG9vcCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIExv
b3BEYXRhJiBkYXRhID0gbV9kYXRhW2xvb3AtPmluZGV4KCldOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJ
bmRleCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgewogICAgICAgICAgICAgICAgIC8vIERvbid0IGxvb2sgYmV5b25kIHBhcnRzIG9mIHRoZSBj
b2RlIHRoYXQgZGVmaW5pdGVseSBhbHdheXMgZXhpdC4KICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg1ODQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5j
cHAKaW5kZXggM2UwNGIwYzhkNWIxNTEzNjFkMmE2NzU1NTBmY2M5MjM3ZGJiNDJmNS4uN2U1NGU2
ZTNhY2Y3YTc4YjU1NzNmMDdjZmZjNDk2MDUxOTM0YTNiNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5j
cHAKQEAgLTEwOCw4ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBPcGVyYW5kczxW
YXJpYWJsZUFjY2Vzc0RhdGEqPiBpbml0aWFsQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZM
b2NhbHMoKSwgbnVsbHB0cik7CiAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiBpbml0aWFsQWNjZXNz
Tm9kZXMoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBibG9jay0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxv
Y2spIHsKICAgICAgICAgICAgIGlmICghbm9kZS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA3ODE2MmM3MTM1NjJiNDY0
NzI3YTUxNDVjYjFlMDJiYjMzZDE3NTcyLi5hYmU3Y2VkYjgzOTE3ZjQ3OWNjZWRkNTdlNjYzYzY4
MzVlZWE3NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNTYwLDkgKzU2MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gRmluYWxseSBlbGltaW5hdGUgdGhlIHN1bmtlbiBQdXRTdGFja3MgYnkgdHVybmluZyB0
aGVtIGludG8gQ2hlY2tzLiBUaGlzIGtlZXBzIHdoYXRldmVyCiAgICAgICAgIC8vIHR5cGUgY2hl
Y2sgdGhleSB3ZXJlIGRvaW5nLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9n
cmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKCFwdXRTdGFja3NUb1NpbmsuY29udGFpbnMobm9kZSkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCA5Y2JkZDg2MDMw
Y2I4YWI2MTlhMzNhYzE2ZDExMmEwNGQ0OWNmZmMyLi40N2IwZmYxYjcxM2I1ZWEzNzU2ZWYxNTFk
MzkwNmI5MDlhMDg5YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcApAQCAtMTc2Nyw4ICsxNzY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgCiAgICAgLy8gUGVyZm9ybSB0aGUgbW9zdCBi
YXNpYyB2ZXJpZmljYXRpb24gdGhhdCBjaGlsZHJlbiBoYXZlIGJlZW4gdXNlZCBjb3JyZWN0bHku
CiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAg
ICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tpbmRleF07Cisg
ICAgICAgIGZvciAoYXV0byYgaW5mbyA6IG1fZ2VuZXJhdGlvbkluZm8pIHsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFpbmZvLmFsaXZlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtODg5
Miw4ICs4ODkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkQnJhbmNoKGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcCwgQmFzaWNCbG9jayoKIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bGlua0JyYW5jaGVzKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnJh
bmNoZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQnJhbmNoUmVjb3JkJiBicmFuY2ggPSBtX2Jy
YW5jaGVzW2ldOworICAgIGZvciAoQnJhbmNoUmVjb3JkJiBicmFuY2ggOiBtX2JyYW5jaGVzKSB7
CiAgICAgICAgIGJyYW5jaC5qdW1wLmxpbmtUbyhtX2ppdC5ibG9ja0hlYWRzKClbYnJhbmNoLmRl
c3RpbmF0aW9uLT5pbmRleF0sICZtX2ppdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNw
cAppbmRleCAwYjBiZTQ0MzA5NTBlYjljNThlYmU0ZjJjMGNmNWE1MmRiMzg5NDAzLi45ZWMyZmNm
OTM4MDdjYzExM2UzZDRlNWI1OTgwMzhhYzI5YTM1NjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNw
cApAQCAtNzEsOSArNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0g
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewogICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydEFyZVJlZ2lzdGVyZWQo
bm9kZS0+c3RydWN0dXJlU2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggNWY1ZDg0ZDUxYWM5ZmEz
MTU5MjU0YjU1YTkxZGFjYzExZjAyYTU0NS4uODJlYjk1NDQwMTAxZjU1YjQwOGM3NTNjMThhZTE2
NTk2NzIwZjQwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0yNzIsOCArMjcyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDb25zaWRlckZvckhvaXN0aW5nPFN0cnVj
dHVyZVR5cGVDaGVjaz4odmFyaWFibGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleEluQmxvY2sgPSAw
OyBzdWJJbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK3N1YkluZGV4SW5CbG9jaykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ViTm9kZSA9IGJsb2NrLT5hdChzdWJJbmRl
eEluQmxvY2spOworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIHN1Yk5vZGUgOiAqYmxv
Y2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ViTm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3VyY2UpCkBAIC0z
MDUsOCArMzA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5C
bG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7
Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwor
ICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwpAQCAtMzY0LDggKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
c2hvdWxkQ29uc2lkZXJGb3JIb2lzdGluZzxBcnJheVR5cGVDaGVjaz4odmFyaWFibGUpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNv
dXJjZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBzdWJJbmRleEluQmxvY2sgPSAwOyBzdWJJbmRleEluQmxvY2sgPCBibG9jay0+c2l6
ZSgpOyArK3N1YkluZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSog
c3ViTm9kZSA9IGJsb2NrLT5hdChzdWJJbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8gc3ViTm9kZSA6ICpibG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChzdWJOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUt
PmNoaWxkMSgpICE9IHNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKaW5kZXggZjljMjJiYjk2ODgxMThkODAyNzY2YWNlZjAzMjk5ZmViZTgyNzRjMy4uY2Mw
YjU3ZDQ5ZDhlYWNmMjRlMDhiMzc1NGYxNzE2OGJlZTZlYWYzMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTYzOCw4ICs2MzgsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICBib29sIGRpZFNlZUV4aXRPSyA9IGZhbHNlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2Nr
KSB7CiAgICAgICAgICAgICAgICAgZGlkU2VlRXhpdE9LIHw9IG5vZGUtPm9yaWdpbi5leGl0T0s7
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBQaGk6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1
YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKaW5kZXggZjgxMjc1OTllMDUz
Y2YwMTkxZTNjNGY1YjAxY2M4NDUyNWQyOTQ1Zi4uMDViMTUwOTJlZGVmYzljNDkyZjNkNzM4OGMz
ZWU0NzAzNDAzNzc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcApAQCAtNTksOSAr
NTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdXNhZ2Ugb2YgaGlnaGVz
dC1udW1iZXJlZCB2aXJ0dWFsIHJlZ2lzdGVycy4KICAgICAgICAgICAgICAgICBzY29yZUJvYXJk
LnNvcnRGcmVlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9j
aykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgCisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBWZXJpZmllci5jcHAKaW5kZXggYzc3OWNmMTA2ZjFhNTZkMDg2ZDEyYTExYWNl
ZGM5MWRiNGI4NDliYS4uODE5ZWQ3YjdlNTY2Y2JhNDcxMGY1NmMzMjAwM2Y0M2E1N2ZkNjhkMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuY3BwCkBAIC0xMjcs
OCArMTI3LDcgQEAgc3RhdGljIHZvaWQgdHJpbURlYWRPYmplY3RzRnJvbUxpc3QoSGFzaFNldDxK
U09iamVjdCo+JiBrbm93bkxpdmVTZXQsIExpdmVPYmplY3QKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgc2l6ZV90IGxpdmVPYmplY3RzRm91bmQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlzdC5saXZlT2JqZWN0cy5zaXplKCk7IGkrKykgewotICAgICAgICBMaXZlT2JqZWN0RGF0
YSYgb2JqRGF0YSA9IGxpc3QubGl2ZU9iamVjdHNbaV07CisgICAgZm9yIChhdXRvJiBvYmpEYXRh
IDogbGlzdC5saXZlT2JqZWN0cykgewogICAgICAgICBpZiAob2JqRGF0YS5pc0NvbmZpcm1lZERl
YWQpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gRG9uJ3QgInJlc3VycmVjdCIga25vd24gZGVh
ZCBvYmplY3RzLgogICAgICAgICBpZiAoIWtub3duTGl2ZVNldC5jb250YWlucyhvYmpEYXRhLm9i
aikpIHsKQEAgLTE0NSw4ICsxNDQsNyBAQCB2b2lkIEhlYXBWZXJpZmllcjo6dHJpbURlYWRPYmpl
Y3RzKCkKICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4ga25vd25MaXZlU2V0OwogCiAgICAgTGl2ZU9i
amVjdExpc3QmIGFmdGVyID0gY3VycmVudEN5Y2xlKCkuYWZ0ZXI7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhZnRlci5saXZlT2JqZWN0cy5zaXplKCk7IGkrKykgewotICAgICAgICBMaXZl
T2JqZWN0RGF0YSYgb2JqRGF0YSA9IGFmdGVyLmxpdmVPYmplY3RzW2ldOworICAgIGZvciAoYXV0
byYgb2JqRGF0YSA6IGFmdGVyLmxpdmVPYmplY3RzKSB7CiAgICAgICAgIGtub3duTGl2ZVNldC5h
ZGQob2JqRGF0YS5vYmopOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTGl2ZU9iamVjdExpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TGl2ZU9iamVjdExpc3QuY3BwCmluZGV4IGFmMDM2N2RjM2I2YmE5MGUwYjg3ZmFmYTJiYzY1NDY5
ZGU2YzA5ZmMuLjVlYjdjYjk5MTdhMzI4NWY4NDUzZTI5MDZjNGRiNjJmZTY2Mjc4NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpdmVPYmplY3RMaXN0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXZlT2JqZWN0TGlzdC5jcHAKQEAgLTMwLDgg
KzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIExpdmVPYmplY3REYXRhKiBMaXZlT2JqZWN0TGlz
dDo6ZmluZE9iamVjdChKU09iamVjdCogb2JqKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGl2ZU9iamVjdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgTGl2ZU9iamVjdERhdGEmIGRh
dGEgPSBsaXZlT2JqZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIGRhdGEgOiBsaXZlT2JqZWN0cykg
ewogICAgICAgICBpZiAob2JqID09IGRhdGEub2JqKQogICAgICAgICAgICAgcmV0dXJuICZkYXRh
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCmluZGV4IDE2NDllYzk3NTU1M2ZiZjdiNTU1NzE5MzNlMjNiODFiYzIwMzZhYzMuLjdiNWEy
MTk2ZDllYzUwZjI4NTJhZmU5OWFkOTc5NmY5OWE2ZTVjNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcApAQCAtNTEsOCArNTEsNyBAQCBNYXJr
ZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBNYXJrZWRTcGFjZSogbWFy
a2VkU3BhY2UsIHNpemVfdCBjZQogYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91
YmxlIGRlYWRsaW5lKQogewogICAgIHVuc2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0g
MDsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyAr
K2luZGV4KSB7Ci0gICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9ibG9ja3Nb
aW5kZXhdOworICAgIGZvciAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgOiBtX2Jsb2Nrcykg
ewogICAgICAgICBpZiAoYmxvY2spCiAgICAgICAgICAgICBibG9jay0+YmxvY2soKS51cGRhdGVO
ZWVkc0Rlc3RydWN0aW9uKCk7CiAgICAgICAgICsraXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2s7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
ay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5j
cHAKaW5kZXggMmY4ZTBmNmQ3MjA5YmNiNGE5ZWZjOWNkNWYwY2IyM2Y5ODBhMjNkMy4uNjEyYzQ0
OGM0MGZmNWIwYWVjMTIzYjZiOGVhYWM4ODIwMzJkYjNiYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmNwcApAQCAtNzUsOCArNzUs
NyBAQCBjb25zdCBTY3JpcHRDYWxsRnJhbWUqIFNjcmlwdENhbGxTdGFjazo6Zmlyc3ROb25OYXRp
dmVDYWxsRnJhbWUoKSBjb25zdAogICAgIGlmICghbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBmcmFtZSA9IG1fZnJh
bWVzW2ldOworICAgIGZvciAoY29uc3QgYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAg
ICBpZiAoIWZyYW1lLmlzTmF0aXZlKCkpCiAgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCBjMmFjZmIzNTk5MmJiMGRlOTA3ZGU2
M2I3M2FhZDQ3YzQ1NWIxNmQyLi5hYzY2YzI1NmQ5Njg2NTczODAxNWRjZGIyYTA3NzU2ZTdmMWEy
ZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC02OTMsOCArNjkzLDcgQEAgQ29t
cGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFp
bGVkOwogCiAgICAgLy8gVHJhbnNsYXRlIHZQQyBvZmZzZXRzIGludG8gYWRkcmVzc2VzIGluIEpJ
VCBnZW5lcmF0ZWQgY29kZSwgZm9yIHN3aXRjaCB0YWJsZXMuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc3dpdGNoZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3dpdGNoUmVjb3Jk
IHJlY29yZCA9IG1fc3dpdGNoZXNbaV07CisgICAgZm9yIChTd2l0Y2hSZWNvcmQgcmVjb3JkIDog
bV9zd2l0Y2hlcykgewogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHJlY29yZC5i
eXRlY29kZU9mZnNldDsKIAogICAgICAgICBpZiAocmVjb3JkLnR5cGUgIT0gU3dpdGNoUmVjb3Jk
OjpTdHJpbmcpIHsKQEAgLTc2Miw4ICs3NjEsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6Omxp
bmsoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkgewotICAgICAgICBDYWxsQ29tcGlsYXRp
b25JbmZvJiBjb21waWxhdGlvbkluZm8gPSBtX2NhbGxDb21waWxhdGlvbkluZm9baV07CisgICAg
Zm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKICAg
ICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87
CiAgICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjb21waWxhdGlvbkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uKSksCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9WYXJpYWJsZUVudmlyb25tZW50LmNwcAppbmRleCA2ZGMyZmJiMmI5YWNlYjQwNzU1ODE5Y2I3
YjJhOTk3ZjY4MDdjYWQ2Li42OTI1OTJjYjJjZGRmOTdiNTU4MmIwNGJiNjlhMzRkMDYzZmFmNmUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJv
bm1lbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZp
cm9ubWVudC5jcHAKQEAgLTUwLDE2ICs1MCwxNiBAQCB2b2lkIFZhcmlhYmxlRW52aXJvbm1lbnQ6
Om1hcmtBbGxWYXJpYWJsZXNBc0NhcHR1cmVkKCkKIAogICAgIG1faXNFdmVyeXRoaW5nQ2FwdHVy
ZWQgPSB0cnVlOyAvLyBGb3IgZmFzdCBxdWVyaWVzLgogICAgIC8vIFdlIG11c3QgbWFyayBldmVy
eSBlbnRyeSBhcyBjYXB0dXJlZCBmb3Igd2hlbiB3ZSBpdGVyYXRlIHRocm91Z2ggbV9tYXAgYW5k
IGVudHJ5LmlzQ2FwdHVyZWQoKSBpcyBjYWxsZWQuCi0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX21h
cC5iZWdpbigpLCBlbmQgPSBtX21hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgCi0gICAg
ICAgIGl0ZXItPnZhbHVlLnNldElzQ2FwdHVyZWQoKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDog
bV9tYXAudmFsdWVzKCkpCisgICAgICAgIHZhbHVlLnNldElzQ2FwdHVyZWQoKTsKIH0KIAogYm9v
bCBWYXJpYWJsZUVudmlyb25tZW50OjpoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0CiB7CiAg
ICAgaWYgKG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQpCiAgICAgICAgIHJldHVybiBzaXplKCkgPiAw
OwotICAgIGZvciAoYXV0byBlbnRyeSA6IG1fbWFwKSB7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1
ZS5pc0NhcHR1cmVkKCkpCisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fbWFwLnZhbHVlcygpKSB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAKaW5kZXggM2Q3
ZTMxYjJlNTg5ZjYyMzAzZjFkNjYwYjc5ODI5OGE0YzVmNWQ4MC4uNWRlZjBhYTEwZmNkNWZhNDJm
MTFkZWIyMTA0YzAwODQ1YWUwZDQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwCkBAIC0zOCwxMCAr
MzgsMTAgQEAgYm9vbCBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omhhc0V4ZWN1dGVkQXRPZmZz
ZXQoaW50cHRyX3QgaWQsIHVuc2lnbmVkIG9mZnNldCkKICAgICBSYW5nZU1hcCYgbWFwID0gbV9y
YW5nZU1hcC5maW5kKGlkKS0+c2Vjb25kOwogICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gVUlOVF9N
QVg7CiAgICAgYm9vbCBoYXNFeGVjdXRlZCA9IGZhbHNlOwotICAgIGZvciAoYXV0byBpdGVyID0g
bWFwLmJlZ2luKCksIGVuZCA9IG1hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAg
ICAgICBjb25zdCBGdW5jdGlvblJhbmdlJiByYW5nZSA9IGl0ZXItPmZpcnN0OworICAgIGZvciAo
YXV0byYgaXRlciA6IG1hcCkgeworICAgICAgICBjb25zdCBGdW5jdGlvblJhbmdlJiByYW5nZSA9
IGl0ZXIuZmlyc3Q7CiAgICAgICAgIGlmIChyYW5nZS5tX3N0YXJ0IDw9IG9mZnNldCAmJiBvZmZz
ZXQgPD0gcmFuZ2UubV9lbmQgJiYgcmFuZ2UubV9lbmQgLSByYW5nZS5tX3N0YXJ0IDwgZGlzdGFu
Y2UpIHsKLSAgICAgICAgICAgIGhhc0V4ZWN1dGVkID0gaXRlci0+c2Vjb25kOworICAgICAgICAg
ICAgaGFzRXhlY3V0ZWQgPSBpdGVyLnNlY29uZDsKICAgICAgICAgICAgIGRpc3RhbmNlID0gcmFu
Z2UubV9lbmQgLSByYW5nZS5tX3N0YXJ0OwogICAgICAgICB9CiAgICAgfQpAQCAtODgsOSArODgs
OSBAQCBWZWN0b3I8c3RkOjp0dXBsZTxib29sLCB1bnNpZ25lZCwgdW5zaWduZWQ+PiBGdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGU6OmdldEZ1bmN0aQogICAgICAgICByZXR1cm4gcmFuZ2VzOwogCiAg
ICAgUmFuZ2VNYXAmIG1hcCA9IG1fcmFuZ2VNYXAuZmluZChpZCktPnNlY29uZDsKLSAgICBmb3Ig
KGF1dG8gaXRlciA9IG1hcC5iZWdpbigpLCBlbmQgPSBtYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgY29uc3QgRnVuY3Rpb25SYW5nZSYgcmFuZ2UgPSBpdGVyLT5maXJz
dDsKLSAgICAgICAgYm9vbCBoYXNFeGVjdXRlZCA9IGl0ZXItPnNlY29uZDsKKyAgICBmb3IgKGF1
dG8mIGl0ZXIgOiBtYXApIHsKKyAgICAgICAgY29uc3QgRnVuY3Rpb25SYW5nZSYgcmFuZ2UgPSBp
dGVyLmZpcnN0OworICAgICAgICBib29sIGhhc0V4ZWN1dGVkID0gaXRlci5zZWNvbmQ7CiAgICAg
ICAgIHJhbmdlcy5hcHBlbmQoc3RkOjp0dXBsZTxib29sLCB1bnNpZ25lZCwgdW5zaWduZWQ+KGhh
c0V4ZWN1dGVkLCByYW5nZS5tX3N0YXJ0LCByYW5nZS5tX2VuZCkpOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5jcHAKaW5kZXggOWEzOWU4Yzc1Nzg5ZTgyZTY0MTdiNGE1ZmMxNjhkZjM2M2NkM2Vj
MS4uNjdlZmRmN2JiZmUwMzc1ZDc0ZjRlYzE1MTdkMWFhNmQ4ZWM1YWFlNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwCkBAIC05MSw4ICs5MSw4IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKICAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
Y2VsbCk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqdGhpc09iamVjdCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fcHJvcGVydHlOYW1lcy5zaXplKCk7
ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eU5hbWVz
W2ldKTsKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPm1fcHJvcGVy
dHlOYW1lcykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQocHJvcGVydHlOYW1lKTsKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3RvdHlwZUNoYWluKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAKaW5kZXggYWI5NzQ5Mjhi
OGQxMThhNjg2OWY1MjIwZjJkNDkwNTU2NTc3MDBjMC4uYTY1NWYyMjEwNGU5N2Q5MTc0NGViOGI2
YTI5Y2Y1YmY3MjQ3Zjg2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlUHJvZmlsZXIuY3BwCkBAIC0xMjIsOCArMTIyLDcgQEAgVHlwZUxvY2F0aW9uKiBUeXBlUHJv
ZmlsZXI6OmZpbmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFR5
cGUKICAgICBWZWN0b3I8VHlwZUxvY2F0aW9uKj4mIGJ1Y2tldCA9IG1fYnVja2V0TWFwLmZpbmQo
c291cmNlSUQpLT52YWx1ZTsKICAgICBUeXBlTG9jYXRpb24qIGJlc3RNYXRjaCA9IG51bGxwdHI7
CiAgICAgdW5zaWduZWQgZGlzdGFuY2UgPSBVSU5UX01BWDsgLy8gQmVjYXVzZSBhc3NpZ25tZW50
cyBtYXkgYmUgbmVzdGVkLCBtYWtlIHN1cmUgd2UgZmluZCB0aGUgY2xvc2VzdCBlbmNsb3Npbmcg
YXNzaWdubWVudCB0byB0aGlzIGNoYXJhY3RlciBvZmZzZXQuCi0gICAgZm9yIChzaXplX3QgaSA9
IDAsIHNpemUgPSBidWNrZXQuc2l6ZSgpOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIFR5cGVM
b2NhdGlvbiogbG9jYXRpb24gPSBidWNrZXQuYXQoaSk7CisgICAgZm9yIChUeXBlTG9jYXRpb24q
IGxvY2F0aW9uIDogYnVja2V0KSB7CiAgICAgICAgIC8vIFdlIGZvdW5kIHRoZSB0eXBlIGxvY2F0
aW9uIHRoYXQgY29ycmVsYXRlcyB0byB0aGUgY29udmVyZ2VuY2Ugb2YgYWxsIHJldHVybiBzdGF0
ZW1lbnRzIGluIGEgZnVuY3Rpb24uCiAgICAgICAgIC8vIFRoaXMgdGV4dCBvZmZzZXQgaXMgdGhl
IG9mZnNldCBvZiB0aGUgb3BlbmluZyBicmFjZSBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgog
ICAgICAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVu
Y3Rpb25SZXR1cm4gJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBUeXBlUHJvZmls
ZXJSZXR1cm5TdGF0ZW1lbnQgJiYgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElm
UmV0dXJuU3RhdGVtZW50ID09IGRpdm90KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlU2V0LmNwcAppbmRleCAxZjYzOGMwNmEzMmEwYjY1YjNlOGNjMjBlMTkyNWVmOTA5M2FjOGZi
Li41MmRkZjY0YjdlNWY3NjkyY2VlMDliODM3N2QzZjIyZTEyNDQ2YTMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcApAQCAtNTgsOCArNTgsNyBAQCB2b2lkIFR5
cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSB0eXBlLCBQYXNzUmVmUHRyPFN0
cnVjdHVyZVNoYXBlPiBwcgogICAgICAgICAgICAgLy8gICBwcm90b3R5cGUgY2hhaW4sIHRoZXkg
d2lsbCBiZSBtZXJnZWQgaW50byBvbmUgc2hhcGUuCiAgICAgICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7CiAgICAgICAgICAgICBTdHJpbmcgaGFzaCA9IG5ld1NoYXBlLT5wcm9wZXJ0eUhhc2go
KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiYg
c2VlblNoYXBlID0gbV9zdHJ1Y3R1cmVIaXN0b3J5LmF0KGkpOworICAgICAgICAgICAgZm9yIChS
ZWZQdHI8U3RydWN0dXJlU2hhcGU+JiBzZWVuU2hhcGUgOiBtX3N0cnVjdHVyZUhpc3RvcnkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc2VlblNoYXBlLT5wcm9wZXJ0eUhhc2goKSA9PSBoYXNoKSB7
CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0xMTQsOCArMTEzLDcgQEAgU3RyaW5nIFR5cGVTZXQ6OmR1bXBUeXBlcygpIGNv
bnN0CiAgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVN5bWJvbCkKICAgICAgICAgc2Vlbi5hcHBl
bmRMaXRlcmFsKCJTeW1ib2wgIik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3Ry
dWN0dXJlSGlzdG9yeS5zaXplKCk7IGkrKykgewotICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IHNoYXBlID0gbV9zdHJ1Y3R1cmVIaXN0b3J5LmF0KGkpOworICAgIGZvciAoY29uc3QgUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiYgc2hhcGUgOiBtX3N0cnVjdHVyZUhpc3RvcnkpIHsKICAgICAg
ICAgc2Vlbi5hcHBlbmQoc2hhcGUtPm1fY29uc3RydWN0b3JOYW1lKTsKICAgICAgICAgc2Vlbi5h
cHBlbmQoJyAnKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXgg
NTFkMjMwNWMyMjg1NGY3ZDA1MmFiMjcyYmJlMTczZTBkNDNiZmU5MS4uMjEzZmNhZTMwZDNiMGVj
N2U0NGJjZDg4Mzc0MWJhOWYyY2Q3ZmNhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcApAQCAtNjk5LDggKzY5OSw3IEBAIGlubGluZSB2b2lkIFZNOjp1cGRhdGVTdGFja0xpbWl0
cygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIFZNOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290
cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzY3JhdGNoQnVmZmVycy5zaXplKCk7IGkrKykgewotICAgICAgICBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gc2NyYXRjaEJ1ZmZlcnNbaV07CisgICAgZm9yIChh
dXRvKiBzY3JhdGNoQnVmZmVyIDogc2NyYXRjaEJ1ZmZlcnMpIHsKICAgICAgICAgaWYgKHNjcmF0
Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aCgpKSB7CiAgICAgICAgICAgICB2b2lkKiBidWZmZXJTdGFy
dCA9IHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKTsKICAgICAgICAgICAgIGNvbnNlcnZhdGl2
ZVJvb3RzLmFkZChidWZmZXJTdGFydCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNo
YXIqPihidWZmZXJTdGFydCkgKyBzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGgoKSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCmluZGV4IGViYTgz
MWU5NWE3MjU0N2M5MWI2MjVjNGM2ZTA5MTk5ZTZkYjNhMjcuLjRiNDY4MTQzNmMzNTE0Yjc0MDky
NGZjMGFjYzgxODJiZTc5MTE4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtNYXBEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrTWFwRGF0YS5jcHAKQEAgLTEwOCwxMSArMTA4LDExIEBAIHZvaWQgV2Vha01hcERhdGE6
OmNsZWFyKCkKIHZvaWQgV2Vha01hcERhdGE6OkRlYWRLZXlDbGVhbmVyOjp2aXNpdFdlYWtSZWZl
cmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIG1fbGl2ZUtleUNvdW50ID0gMDsK
LSAgICBmb3IgKGF1dG8gaXQgPSBtX3RhcmdldC0+bV9tYXAuYmVnaW4oKSwgZW5kID0gbV90YXJn
ZXQtPm1fbWFwLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZChpdC0+a2V5KSkKKyAgICBmb3IgKGF1dG8mIGl0IDogbV90YXJnZXQtPm1fbWFwKSB7
CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQoaXQua2V5KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBtX2xpdmVLZXlDb3VudCsrOwotICAgICAgICB2aXNpdG9yLmFwcGVuZChp
dC0+dmFsdWUpOworICAgICAgICB2aXNpdG9yLmFwcGVuZChpdC52YWx1ZSk7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUKG1fbGl2ZUtleUNvdW50IDw9IG1fdGFyZ2V0LT5tX21hcC5zaXplKCkp
OwogfQpAQCAtMTI2LDE5ICsxMjYsMTkgQEAgdm9pZCBXZWFrTWFwRGF0YTo6RGVhZEtleUNsZWFu
ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgVmVjdG9yPEpTT2JqZWN0Kj4gZGVhZEVudHJpZXM7CiAgICAgICAgIGRlYWRFbnRyaWVzLnJl
c2VydmVDYXBhY2l0eShkZWFkQ291bnQpOwotICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3Rhcmdl
dC0+bV9tYXAuYmVnaW4oKSwgZW5kID0gbV90YXJnZXQtPm1fbWFwLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChpdC0+a2V5KSkKKyAgICAg
ICAgZm9yIChhdXRvJiBpdCA6IG1fdGFyZ2V0LT5tX21hcCkgeworICAgICAgICAgICAgaWYgKEhl
YXA6OmlzTWFya2VkKGl0LmtleSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBkZWFkRW50cmllcy51bmNoZWNrZWRBcHBlbmQoaXQtPmtleSk7CisgICAgICAgICAgICBk
ZWFkRW50cmllcy51bmNoZWNrZWRBcHBlbmQoaXQua2V5KTsKICAgICAgICAgfQotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYWRFbnRyaWVzLnNpemUoKTsgaSsrKQotICAgICAgICAg
ICAgbV90YXJnZXQtPm1fbWFwLnJlbW92ZShkZWFkRW50cmllc1tpXSk7CisgICAgICAgIGZvciAo
YXV0byYgZGVhZEVudHJpZSA6IGRlYWRFbnRyaWVzKQorICAgICAgICAgICAgbV90YXJnZXQtPm1f
bWFwLnJlbW92ZShkZWFkRW50cmllKTsKICAgICB9IGVsc2UgewogICAgICAgICBNYXBUeXBlIG5l
d01hcDsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV90YXJnZXQtPm1fbWFwLmJlZ2luKCksIGVu
ZCA9IG1fdGFyZ2V0LT5tX21hcC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKGl0LT5rZXkpKQorICAgICAgICBmb3IgKGF1dG8mIGl0IDog
bV90YXJnZXQtPm1fbWFwKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGl0Lmtl
eSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBuZXdNYXAuYWRkKGl0
LT5rZXksIGl0LT52YWx1ZSk7CisgICAgICAgICAgICBuZXdNYXAuYWRkKGl0LmtleSwgaXQudmFs
dWUpOwogICAgICAgICB9CiAgICAgICAgIG1fdGFyZ2V0LT5tX21hcC5zd2FwKG5ld01hcCk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVl
Tm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmlu
ZGV4IDE4ZmVhNzczZTc4OTJkMjZiZWNmNWJhOTVlYmQxNGM1MjEzYzY4MGYuLmIyMWQ3YWVlYTEy
MTRjM2YzNDA2M2Y2MTBjZjZjMWZkYTQzOGFlYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTg4LDkgKzg4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcXNvcnQoZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVu
dHJ5KiksIGNvbXBhcmVFbnRyaWVzKTsKIAogICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNo
aWxkcmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3JkZXIuCi0gICAgICAgIGZvciAoc2l6ZV90IGUg
PSAwOyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkgewotICAgICAgICAgICAgTWFwRW50cnkqIGVu
dHJ5ID0gZW50cmllc1tlXTsKLQorICAgICAgICBmb3IgKE1hcEVudHJ5KiBlbnRyeSA6IGVudHJp
ZXMpIHsKICAgICAgICAgICAgIC8vIFByaW50IHRoZSBudW1iZXIgb2Ygc2FtcGxlcywgdGhlIG5h
bWUgb2YgdGhpcyBub2RlLCBhbmQgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHN0YWNr
LXRvcAogICAgICAgICAgICAgLy8gaW4gdGhpcyBub2RlIChzYW1wbGVzIGRpcmVjdGx5IHdpdGhp
biB0aGlzIG5vZGUsIGV4Y2x1ZGluZyBzYW1wbGVzIGluIGNoaWxkcmVuLgogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKaW5kZXggMGE5ZmQ4MmMyNDE5YmY4NjUw
MTBmOWJkMTYxMjA1NWI1Y2FlZmIyZS4uYjIyZTQ0OTM0Y2VjMTE2MWJmYWMwZDZmNGY2MDJkN2Fm
ZjY1MjZjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0
ZXIuY3BwCkBAIC0xOTQzLDkgKzE5NDMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY3Vy
cmVudENvdW50QWxyZWFkeUNoZWNrZWQgKz0gY291bnRUb0NoZWNrOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmUtPm1fdGVy
bXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSYgdGVybSA9IGFs
dGVybmF0aXZlLT5tX3Rlcm1zW2ldOwotCisgICAgICAgICAgICBmb3IgKFBhdHRlcm5UZXJtJiB0
ZXJtIDogYWx0ZXJuYXRpdmUtPm1fdGVybXMpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRl
cm0udHlwZSkgewogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRp
b25CT0w6CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbkJPTChjdXJyZW50Q291bnRBbHJl
YWR5Q2hlY2tlZCAtIHRlcm0uaW5wdXRQb3NpdGlvbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297525</attachid>
            <date>2016-12-20 09:42:45 -0800</date>
            <delta_ts>2016-12-20 10:26:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166060-20161220204143.patch</filename>
            <type>text/plain</type>
            <size>45949</size>
            <attacher name="Konstantin Tokarev">annulen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YWNmOTFjZDJmZDQ2N2I3YmYwYTk3MmQwNzVkMTMwOTIxMGMxODg0Li5kYTJjNTQ5MjNhNmQ4ZGM4
ZThmMDI2YzQxM2ZkOTEwZThjNDAwYWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw5MyBAQAogMjAxNi0xMi0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5k
ZXgucnU+CiAKKyAgICAgICAgTW9kZXJuaXplIGZvciBsb29wcyBpbiBKU0MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjA2MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OkpTUHJpdmF0ZVByb3Bl
cnR5TWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoK
KyAgICAgICAgKEpTQzo6T2JqZWN0UGF0dGVybk5vZGU6OmJpbmRWYWx1ZSk6CisgICAgICAgICog
ZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YXBwbHlCcmVh
a3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0lu
QmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpDbG9iYmVyU2V0OjpzZXRPZik6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJZGVudGlm
aWVycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlB
ZGQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5p
bmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrQ29tYmluaW5nUGhh
c2U6OmhhbmRsZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0
aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdMSUNNUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkxJQ01QaGFzZTo6cnVuKToKKyAgICAgICAgKiBk
ZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
Ok1heGltYWxGbHVzaEluc2VydGlvblBoYXNlOjp0cmVhdFJvb3RCbG9jayk6CisgICAgICAgICog
ZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4pOgor
ICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudFN0cnVjdHVy
ZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgICogaGVhcC9IZWFwVmVyaWZpZXIuY3BwOgorICAgICAgICAoSlNDOjp0cmltRGVh
ZE9iamVjdHNGcm9tTGlzdCk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6dHJpbURlYWRP
YmplY3RzKToKKyAgICAgICAgKiBoZWFwL0xpdmVPYmplY3RMaXN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdExpc3Q6OmZpbmRPYmplY3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmNwcDoKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrOjpmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSk6CisgICAgICAg
ICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogcGFy
c2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmly
b25tZW50OjptYXJrQWxsVmFyaWFibGVzQXNDYXB0dXJlZCk6CisgICAgICAgIChKU0M6OlZhcmlh
YmxlRW52aXJvbm1lbnQ6Omhhc0NhcHR1cmVkVmFyaWFibGVzKToKKyAgICAgICAgKiBydW50aW1l
L0Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZTo6aGFzRXhlY3V0ZWRBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZTo6Z2V0RnVuY3Rpb25SYW5nZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVQ
cm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0Ojph
ZGRUeXBlSW5mb3JtYXRpb24pOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpkdW1wVHlwZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcERhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrTWFwRGF0YTo6RGVhZEtleUNsZWFuZXI6OnZpc2l0V2Vha1JlZmVyZW5jZXMp
OgorICAgICAgICAoSlNDOjpXZWFrTWFwRGF0YTo6RGVhZEtleUNsZWFuZXI6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KToKKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpkdW1wSW50ZXJuYWwpOgorICAgICAgICAqIHlhcnIv
WWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjpl
bWl0RGlzanVuY3Rpb24pOgorCisyMDE2LTEyLTIwICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51
bGVuQHlhbmRleC5ydT4KKwogICAgICAgICBfX2NwdWlkKCkgcmVxdWlyZXMgPGludHJpbi5oPiB0
byBiZSBpbmNsdWRlZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY2MDUxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmgKaW5kZXggZjYxNWNlOThkMWEzOTdjMjNkNmIzZjJhM2E2MTQ5MDY3MGU2YWUwNi4uMzFm
MjE2NjRlODU2ODU4ODliOTkxMzU1OWRhYjc3ZDRlMWQ4ZjU2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKQEAgLTEwNiw5ICsxMDYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAg
ICAgIGZvciAoUHJpdmF0ZVByb3BlcnR5TWFwOjppdGVyYXRvciBwdHIgPSBtX3Byb3BlcnR5TWFw
LmJlZ2luKCk7IHB0ciAhPSBtX3Byb3BlcnR5TWFwLmVuZCgpOyArK3B0cikgewotICAgICAgICAg
ICAgICAgIGlmIChwdHItPnZhbHVlKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZChwdHItPnZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvcGVydHlN
YXApIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci52YWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQocGFpci52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA3
NWEwMGVkYzI5MDkyYTYxNjVlNmRjZjZhYzhmYTNiMTBiNTBjNzhmLi43OWExMmMyYzZlMjAzZWZm
YWY4ODI0MGNjMjNhY2NlYTJiOWM1NTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTc2OSw4ICsxNzY5LDggQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXBCeXRlY29kZSgKICAgICBpZiAoIWV4aXRTaXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
b3V0LnByaW50KCIgISEgZnJlcXVlbnQgZXhpdHM6ICIpOwogICAgICAgICBDb21tYVByaW50ZXIg
Y29tbWE7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0U2l0ZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGV4aXRTaXRlc1tpXS5raW5kKCks
ICIgIiwgZXhpdFNpdGVzW2ldLmppdFR5cGUoKSk7CisgICAgICAgIGZvciAoYXV0byYgZXhpdFNp
dGUgOiBleGl0U2l0ZXMpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGV4aXRTaXRlLmtp
bmQoKSwgIiAiLCBleGl0U2l0ZS5qaXRUeXBlKCkpOwogICAgIH0KICNlbHNlIC8vIEVOQUJMRShE
RkdfSklUKQogICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CkBAIC0yNjc3LDkgKzI2NzcsOSBA
QCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpcwogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGZvciAoYXV0byYgd2Vha1Jl
ZmVyZW5jZSA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCiAgICAgICAgICAg
ICBhbGxBcmVNYXJrZWRTb0ZhciAmPSB3ZWFrUmVmZXJlbmNlLT5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24t
PnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTWFya1Ry
YW5zaXRpb24oZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXSkpIHsKKworICAgICAgICBmb3IgKGF1
dG8mIHRyYW5zaXRpb24gOiBkZmdDb21tb24tPnRyYW5zaXRpb25zKSB7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odHJhbnNpdGlvbikpIHsKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUgdGFyZ2V0
IG9mIHRoZQogICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZlOgogICAg
ICAgICAgICAgICAgIC8vCkBAIC0yNjk4LDggKzI2OTgsOCBAQCB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3Im
IHZpcwogICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2hvcnQtY2lyY3VpdCB0aGUgbGl2ZW5l
c3MgaWYgdGhlIHN0cnVjdHVyZSBpcyBoYXJtbGVzcwogICAgICAgICAgICAgICAgIC8vIHRvIG1h
cmsgKGkuZS4gaXRzIGdsb2JhbCBvYmplY3QgYW5kIHByb3RvdHlwZSBhcmUgYm90aCBhbHJlYWR5
CiAgICAgICAgICAgICAgICAgLy8gbGl2ZSkuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKKwor
ICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRyYW5zaXRpb24ubV90byk7CiAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwog
ICAgICAgICB9CkBAIC0zMDY4LDEyICszMDY4LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwK
ICAgICBpZiAobV9yYXJlRGF0YSkKICAgICAgICAgbV9yYXJlRGF0YS0+bV9kaXJlY3RFdmFsQ29k
ZUNhY2hlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KG1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fZnVuY3Rpb25FeHByc1tpXSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKG1fZnVuY3Rpb25EZWNsc1tpXSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzLnNpemUoKTsgKytpKQotICAgICAgICBt
X29iamVjdEFsbG9jYXRpb25Qcm9maWxlc1tpXS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uRXhwciA6IG1fZnVuY3Rpb25FeHBycykKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQoZnVuY3Rpb25FeHByKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVjbCA6
IG1fZnVuY3Rpb25EZWNscykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoZnVuY3Rpb25EZWNsKTsK
KyAgICBmb3IgKGF1dG8mIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlIDogbV9vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZXMpCisgICAgICAgIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBmb3IgKEJ5VmFsSW5mbyogYnlW
YWxJbmZvIDogbV9ieVZhbEluZm9zKQpAQCAtMzA5NiwxOCArMzA5NiwxOCBAQCB2b2lkIENvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNsb3RWaXNpdAogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9q
aXRDb2RlLT5kZmdDb21tb24oKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdD
b21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghIWRmZ0NvbW1v
bi0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luKQotICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pOyAvLyBBbG1vc3QgY2Vy
dGFpbmx5IG5vdCBuZWNlc3NhcnksIHNpbmNlIHRoZSBjb2RlIG9yaWdpbiBzaG91bGQgYWxzbyBi
ZSBhIHdlYWsgcmVmZXJlbmNlLiBCZXR0ZXIgdG8gYmUgc2FmZSwgdGhvdWdoLgotICAgICAgICB2
aXNpdG9yLmFwcGVuZChkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fZnJvbSk7Ci0gICAgICAg
IHZpc2l0b3IuYXBwZW5kKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV90byk7CisgICAgZm9y
IChhdXRvJiB0cmFuc2l0aW9uIDogZGZnQ29tbW9uLT50cmFuc2l0aW9ucykgeworICAgICAgICBp
ZiAoISF0cmFuc2l0aW9uLm1fY29kZU9yaWdpbikKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luKTsgLy8gQWxtb3N0IGNlcnRhaW5seSBub3QgbmVjZXNz
YXJ5LCBzaW5jZSB0aGUgY29kZSBvcmlnaW4gc2hvdWxkIGFsc28gYmUgYSB3ZWFrIHJlZmVyZW5j
ZS4gQmV0dGVyIHRvIGJlIHNhZmUsIHRob3VnaC4KKyAgICAgICAgdmlzaXRvci5hcHBlbmQodHJh
bnNpdGlvbi5tX2Zyb20pOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0cmFuc2l0aW9uLm1fdG8p
OwogICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53
ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoZGZnQ29t
bW9uLT53ZWFrUmVmZXJlbmNlc1tpXSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXSk7Cisg
ICAgZm9yIChhdXRvJiB3ZWFrUmVmZXJlbmNlIDogZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcykK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQod2Vha1JlZmVyZW5jZSk7CisKKyAgICBmb3IgKGF1dG8m
IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2UgOiBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVu
Y2VzKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCh3ZWFrU3RydWN0dXJlUmVmZXJlbmNlKTsKIAog
ICAgIGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKICNlbmRpZiAgICAK
QEAgLTMzNzYsOCArMzM3Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6
SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgICAgIGlm
IChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCp0
aGlzLCAiIHdpbGwgYmUgamV0dGlzb25lZCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZGVhZCBy
ZWZlcmVuY2VzOlxuIik7CiAgICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24gPSBkZmdDb21tb24t
PnRyYW5zaXRpb25zW2ldOworICAgICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogZGZn
Q29tbW9uLT50cmFuc2l0aW9ucykgewogICAgICAgICAgICAgICAgIEpTQ2VsbCogb3JpZ2luID0g
dHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBm
cm9tID0gdHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCk7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiB0
byA9IHRyYW5zaXRpb24ubV90by5nZXQoKTsKQEAgLTM5MDYsOSArMzkwNSw5IEBAIGJvb2wgQ29k
ZUJsb2NrOjpzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKQogCiBBcnJheVByb2ZpbGUqIENv
ZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fy
cmF5UHJvZmlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYXJyYXlQcm9maWxlc1tp
XS5ieXRlY29kZU9mZnNldCgpID09IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJu
ICZtX2FycmF5UHJvZmlsZXNbaV07CisgICAgZm9yIChhdXRvJiBtX2FycmF5UHJvZmlsZSA6IG1f
YXJyYXlQcm9maWxlcykgeworICAgICAgICBpZiAobV9hcnJheVByb2ZpbGUuYnl0ZWNvZGVPZmZz
ZXQoKSA9PSBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiAmbV9hcnJheVByb2Zp
bGU7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtNDA2NCwxMCArNDA2Myw4IEBAIHZvaWQg
Q29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkKICAgICBzd2l0Y2ggKGppdFR5cGUo
KSkgewogICAgIGNhc2UgSklUQ29kZTo6REZHSklUOiB7CiAgICAgICAgIERGRzo6SklUQ29kZSog
aml0Q29kZSA9IG1faml0Q29kZS0+ZGZnKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBERkc6Ok9T
UkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICBmb3IgKGF1dG8mIGV4
aXQgOiBqaXRDb2RlLT5vc3JFeGl0KQogICAgICAgICAgICAgZXhpdC5jb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZShwcm9maWxlZEJsb2NrKTsKLSAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTQyMDUsMTAgKzQyMDIsMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnVzZXNP
cGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCiAKIFN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IGlmIChtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpLmlzRW1wdHkoKSkKKyAgICBmb3IgKGF1
dG8mIGNvbnN0YW50UmVnaXN0ZXIgOiBtX2NvbnN0YW50UmVnaXN0ZXJzKSB7CisgICAgICAgIGlm
IChjb25zdGFudFJlZ2lzdGVyLmdldCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxT
eW1ib2xUYWJsZSo+KG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpKSB7CisgICAgICAgIGlm
IChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4o
Y29uc3RhbnRSZWdpc3Rlci5nZXQoKSkpIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICBhdXRvIGVuZCA9IHN5
bWJvbFRhYmxlLT5lbmQobG9ja2VyKTsKICAgICAgICAgICAgIGZvciAoYXV0byBwdHIgPSBzeW1i
b2xUYWJsZS0+YmVnaW4obG9ja2VyKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKaW5kZXggOTk3MWQ1N2Q4ZDdmOGJkNmYwNWI3OGZkMTJhZDBhYjA5NjE2MzYzNC4uNmVlNzcw
Yjg5M2I3OGMzYzZkZGViMzJhZmQ1OWJmMGJhMzk0ZTczMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAg
LTEyNiw4ICsxMjYsNyBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUo
KQogCiAgICAgbV9zdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmtpbGwoKTsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3RyeVJhbmdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBUcnlS
YW5nZSYgcmFuZ2UgPSBtX3RyeVJhbmdlc1tpXTsKKyAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV90
cnlSYW5nZXMpIHsKICAgICAgICAgaW50IHN0YXJ0ID0gcmFuZ2Uuc3RhcnQtPmJpbmQoKTsKICAg
ICAgICAgaW50IGVuZCA9IHJhbmdlLmVuZC0+YmluZCgpOwogICAgICAgICAKQEAgLTIwMSwxMCAr
MjAwLDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgUHJv
Z3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFAKIAogICAgIGNvbnN0IEZ1bmN0aW9uU3Rh
Y2smIGZ1bmN0aW9uU3RhY2sgPSBwcm9ncmFtTm9kZS0+ZnVuY3Rpb25TdGFjaygpOwogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07Cisg
ICAgZm9yIChhdXRvKiBmdW5jdGlvbiA6IGZ1bmN0aW9uU3RhY2spCiAgICAgICAgIG1fZnVuY3Rp
b25zVG9Jbml0aWFsaXplLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihmdW5jdGlvbiwgR2xvYmFsRnVu
Y3Rpb25WYXJpYWJsZSkpOwotICAgIH0KKwogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVj
b2RlKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHByb2dyYW1Ob2RlLT52YXJEZWNs
YXJhdGlvbnMoKSkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5LnZhbHVlLmlzVmFy
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCmluZGV4IDkzZjRiZjZiYmM1ZmYyM2JjODUzN2NjMWFmYThlZjk3ODJkMGNjZjgu
LjZhYTRmYjNhYTZkNDE0ZWNkOTk5NjQ5MzEzZGI4MTgxZDgwZmE2OTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTM5
NjIsOCArMzk2Miw3IEBAIHZvaWQgT2JqZWN0UGF0dGVybk5vZGU6OnRvU3RyaW5nKFN0cmluZ0J1
aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB2b2lkIE9iamVjdFBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcmhzKSBjb25zdAogewog
ICAgIGdlbmVyYXRvci5lbWl0UmVxdWlyZU9iamVjdENvZXJjaWJsZShyaHMsIEFTQ0lJTGl0ZXJh
bCgiUmlnaHQgc2lkZSBvZiBhc3NpZ25tZW50IGNhbm5vdCBiZSBkZXN0cnVjdHVyZWQiKSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIGF1dG8mIHRhcmdldCA9IG1fdGFyZ2V0UGF0dGVybnNbaV07CisgICAgZm9yIChj
b25zdCBhdXRvJiB0YXJnZXQgOiBtX3RhcmdldFBhdHRlcm5zKSB7CiAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiB0ZW1wID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICBpZiAo
IXRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24pIHsKICAgICAgICAgICAgIC8vIFNob3VsZCBub3Qg
ZW1pdCBnZXRfYnlfaWQgZm9yIGluZGV4ZWQgb25lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4IDMwYmJhNTljOTc4OGIwM2U3MzgzM2QxNDcyMmQ2
YWQyZDc4MzNiZDMuLmZhZDg2NWJhYTEzOGJhYjFiMmM0ODliMzFhMmJhYjcwYWYyZWJmMzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMjk1LDEw
ICsyOTUsOCBAQCB2b2lkIERlYnVnZ2VyOjp0b2dnbGVCcmVha3BvaW50KENvZGVCbG9jayogY29k
ZUJsb2NrLCBCcmVha3BvaW50JiBicmVha3BvaW50LCBCcgogdm9pZCBEZWJ1Z2dlcjo6YXBwbHlC
cmVha3BvaW50cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBCcmVha3BvaW50SURUb0Jy
ZWFrcG9pbnRNYXAmIGJyZWFrcG9pbnRzID0gbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQ7Ci0g
ICAgZm9yIChhdXRvIGl0ID0gYnJlYWtwb2ludHMuYmVnaW4oKTsgaXQgIT0gYnJlYWtwb2ludHMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgQnJlYWtwb2ludCYgYnJlYWtwb2ludCA9ICppdC0+dmFs
dWU7Ci0gICAgICAgIHRvZ2dsZUJyZWFrcG9pbnQoY29kZUJsb2NrLCBicmVha3BvaW50LCBCcmVh
a3BvaW50RW5hYmxlZCk7Ci0gICAgfQorICAgIGZvciAoYXV0byogYnJlYWtwb2ludCA6IGJyZWFr
cG9pbnRzLnZhbHVlcygpKQorICAgICAgICB0b2dnbGVCcmVha3BvaW50KGNvZGVCbG9jaywgKmJy
ZWFrcG9pbnQsIEJyZWFrcG9pbnRFbmFibGVkKTsKIH0KIAogY2xhc3MgRGVidWdnZXI6OlRvZ2ds
ZUJyZWFrcG9pbnRGdW5jdG9yIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IDY3YjM1NzQzODJhYWQ3MDIxZjNjYTc2
ODVmYTNhNDljZGY0ZTNmZTMuLmZiYzljMmRkOGUwNWNhZjY2Yzg2M2U0MTUwMzczMzIzNzZhYTAz
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmNwcApAQCAtMjkxLDkgKzI5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGJ1
dCBub3QgbG9naWNhbFJlZkNvdW50ID09IGFjdHVhbFJlZkNvdW50KS4gQXNzdW1lcyB0aGF0IGl0
IGNhbiBicmVhayByZWYKICAgICAgICAgLy8gY291bnRzLgogICAgICAgICAKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7ICsr
bm9kZUluZGV4KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8qIG5vZGUgOiAqbV9ibG9jaykg
ewogICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAvLyBUaGUgcnVsZXMgZm9yIHRocmVhZGVkIENQUyBmb3JtOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKaW5kZXggY2UzMzk4
ZWU1YjE1NmE3MWU5ZWQyNGM1YjAwNGFkNmY2MDQzNDllZC4uNjhlOWMwNWE4NjA5MDhiNWQ1OThi
YmNjMmVlZjY1NDEyMzAwMDI3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJTZXQuY3BwCkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBDbG9iYmVyU2V0OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiBIYXNoU2V0PEFic3RyYWN0SGVhcD4gQ2xvYmJlclNldDo6
c2V0T2YoYm9vbCBkaXJlY3QpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxBYnN0cmFjdEhlYXA+IHJl
c3VsdDsKLSAgICBmb3IgKEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1fY2xvYmJlcnMuYmVnaW4oKTsgaXRlciAhPSBtX2Nsb2JiZXJzLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnZhbHVlID09IGRpcmVjdCkKLSAgICAgICAgICAg
IHJlc3VsdC5hZGQoaXRlci0+a2V5KTsKKyAgICBmb3IgKGF1dG8mIGNsb2JiZXIgOiBtX2Nsb2Ji
ZXJzKSB7CisgICAgICAgIGlmIChjbG9iYmVyLnZhbHVlID09IGRpcmVjdCkKKyAgICAgICAgICAg
IHJlc3VsdC5hZGQoY2xvYmJlci5rZXkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmll
cnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMu
Y3BwCmluZGV4IDQ4ZDc3YzNlMTgyM2I0ZTc1OGM0MTliMzIwMzIyMTEwYzYwMGY0NDUuLmI0Y2Vj
NmI0ZTk5ODA4ODk5MmZhZjE1Yjc3OGY4NzgxYWNlNGI2MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAKQEAgLTg3LDggKzg3
LDcgQEAgVW5pcXVlZFN0cmluZ0ltcGwqIERlc2lyZWRJZGVudGlmaWVyczo6YXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0CiAKIHZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQoVk0mIHZt
LCBDb21tb25EYXRhKiBjb21tb25EYXRhKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2FkZGVkSWRlbnRpZmllcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byByZXAgPSBt
X2FkZGVkSWRlbnRpZmllcnNbaV07CisgICAgZm9yIChhdXRvIHJlcCA6IG1fYWRkZWRJZGVudGlm
aWVycykgewogICAgICAgICBBU1NFUlQocmVwLT5oYXNBdExlYXN0T25lUmVmKCkpOwogICAgICAg
ICBjb21tb25EYXRhLT5kZmdJZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcjo6ZnJvbVVpZCgm
dm0sIHJlcCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5k
ZXggZWM0YjIwYWQ3OWNkNTQxYzYzOWQwOGJlNDI1MWExMGQyNDQzZmI0YS4uN2I3OThlM2UyOTlh
YTI3MDFkMzg3MzEyNDUwYTdkOGYwNzMzMTZhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKQEAgLTE0MTksOSArMTQxOSw3IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKLSAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIAorICAgICAg
ICBmb3IgKGF1dG8qIG5vZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7IGktLTspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJp
bmluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNr
Q29tYmluaW5nUGhhc2UuY3BwCmluZGV4IDE4OWI2ZDc3ZTA1M2NhYmJlMDRlZjc3ZDFmN2YyMmM2
NmRkOTYwNDIuLjAxZTFlM2M5MjM5YmNkYzExMjk3MjE4ODdhZWIyNzg2ZGZlNjUyNGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5n
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNr
Q29tYmluaW5nUGhhc2UuY3BwCkBAIC0xOTIsOCArMTkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Ly8gRmlyc3Qgd2UgY29sbGVjdCBSYW5nZXMuIElmIG9wZXJhdGlvbnMgd2l0aGluIHRoZSByYW5n
ZSBoYXZlIGVub3VnaCByZWR1bmRhbmN5LAogICAgICAgICAvLyB3ZSBob2lzdC4gQW5kIHRoZW4g
d2UgcmVtb3ZlIGFkZGl0aW9ucyBhbmQgY2hlY2tzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIG1heCBy
YW5nZS4KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgZm9yIChhdXRvKiBub2RlIDog
KmJsb2NrKSB7CiAgICAgICAgICAgICBSYW5nZUtleUFuZEFkZGVuZCBkYXRhID0gcmFuZ2VLZXlB
bmRBZGRlbmQobm9kZSk7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwgIjogIiwgZGF0YSwgIlxuIik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0
aW9uUGhhc2UuY3BwCmluZGV4IDc2ZmYyZGQ2ZmJkNzBiZGNiOWVlM2JmZjZmMzg5N2RhNTBmZmNm
YjMuLjU5MDVmMTM0Nzg1Njc4NGQ1MWRmOWY4NzJhMmZjYjQ3OWE1NjUwM2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2UuY3BwCkBAIC0xMTA5LDggKzExMDksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBtX3JlbGF0aW9uc2hpcHMgPSBtX3JlbGF0aW9uc2hpcHNB
dEhlYWRbYmxvY2tdOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkg
ewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
QW5hbHlzaXM6IGF0ICIsIG5vZGUsICI6ICIsIGxpc3REdW1wKHNvcnRlZFJlbGF0aW9uc2hpcHMo
KSksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBleGVjdXRlTm9kZShub2RlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggMGFjNmFmZjk4
YTMyZWEwZTc0OGE1Mzg0MGIzZWJiZWNjYjIyMjAyNS4uMjllOTIzMTA3NTQ5ODVjNzA5YTg0NDNk
MzBlMTUwOGYzMTBhMDEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKQEAgLTI3NCw4ICsyNzQsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKICAgICB9CiAg
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkg
ewotICAgICAgICBKU0NhbGxSZWNvcmQmIHJlY29yZCA9IG1fanNDYWxsc1tpXTsKKyAgICBmb3Ig
KGF1dG8mIHJlY29yZCA6IG1fanNDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8g
PSAqcmVjb3JkLmluZm87CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGws
IEZ1bmN0aW9uUHRyKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25z
KApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCmluZGV4IGU2MDk3
NjRlODU5Y2Y4MGRkYWM1OGIzYzQyYzA3MDVjMTJlOTI2M2EuLjc1ZWVmYTllNzA3ZjRkMmFlZjhm
MmMwYzU2M2UyNTZlZTUzNGRiMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTElDTVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJ
Q01QaGFzZS5jcHAKQEAgLTEwMiw5ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAo
IWxvb3ApCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBMb29wRGF0YSYg
ZGF0YSA9IG1fZGF0YVtsb29wLT5pbmRleCgpXTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsK
LSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGF1dG8qIG5vZGUgOiAqYmxvY2spIHsKICAg
ICAgICAgICAgICAgICAvLyBEb24ndCBsb29rIGJleW9uZCBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0
IGRlZmluaXRlbHkgYWx3YXlzIGV4aXQuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkbid0IGJlIG5lZWRlZC4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwCmluZGV4
IDNlMDRiMGM4ZDViMTUxMzYxZDJhNjc1NTUwZmNjOTIzN2RiYjQyZjUuLjY1ZTUxODY5NTZlOGNj
NDBhNDhhZDc3ZWM1MjA0NjkyMDJmNWJiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC0x
MDgsOCArMTA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVB
Y2Nlc3NEYXRhKj4gaW5pdGlhbEFjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1i
ZXJPZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCks
IG51bGxwdHIpOwogICAgICAgICBPcGVyYW5kczxOb2RlKj4gaW5pdGlhbEFjY2Vzc05vZGVzKGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRyKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgZm9yIChhdXRvKiBub2RlIDogKmJsb2NrKSB7CiAg
ICAgICAgICAgICBpZiAoIW5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKaW5kZXggNzgxNjJjNzEzNTYyYjQ2NDcyN2E1MTQ1
Y2IxZTAyYmIzM2QxNzU3Mi4uYWMzNzEyNzBkZWFiZjIzNjgzMzg1ZmE5OTE0ZWYyMDMzYTY4MmM0
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHAKQEAgLTU2MCw5ICs1NjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEZp
bmFsbHkgZWxpbWluYXRlIHRoZSBzdW5rZW4gUHV0U3RhY2tzIGJ5IHR1cm5pbmcgdGhlbSBpbnRv
IENoZWNrcy4gVGhpcyBrZWVwcyB3aGF0ZXZlcgogICAgICAgICAvLyB0eXBlIGNoZWNrIHRoZXkg
d2VyZSBkb2luZy4KICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewotICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoYXV0byogbm9kZSA6ICpibG9jaykgewogICAgICAgICAg
ICAgICAgIGlmICghcHV0U3RhY2tzVG9TaW5rLmNvbnRhaW5zKG5vZGUpKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggOWNiZGQ4NjAzMGNiOGFiNjE5
YTMzYWMxNmQxMTJhMDRkNDljZmZjMi4uYmY4NzU3NDRjNmNiNjRjNWQ3MDM1NGI5NGMzOTE1MTk4
YmM0OGUxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKQEAgLTE3NjcsMTAgKzE3NjcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3VycmVudEJsb2NrKCkKICAgICAKICAgICAvLyBQZXJmb3JtIHRoZSBtb3N0IGJhc2ljIHZl
cmlmaWNhdGlvbiB0aGF0IGNoaWxkcmVuIGhhdmUgYmVlbiB1c2VkIGNvcnJlY3RseS4KICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW2luZGV4XTsKKyAgICAgICAg
Zm9yIChhdXRvJiBpbmZvIDogbV9nZW5lcmF0aW9uSW5mbykKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFpbmZvLmFsaXZlKCkpOwotICAgICAgICB9CiAgICAgfQogfQogCkBAIC04ODkyLDEw
ICs4ODkwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYganVtcCwgQmFzaWNCbG9jayoKIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bGlua0JyYW5jaGVzKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnJhbmNo
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQnJhbmNoUmVjb3JkJiBicmFuY2ggPSBtX2JyYW5j
aGVzW2ldOworICAgIGZvciAoYXV0byYgYnJhbmNoIDogbV9icmFuY2hlcykKICAgICAgICAgYnJh
bmNoLmp1bXAubGlua1RvKG1faml0LmJsb2NrSGVhZHMoKVticmFuY2guZGVzdGluYXRpb24tPmlu
ZGV4XSwgJm1faml0KTsKLSAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dG9yZUJhcnJpZXIoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAKaW5kZXggMGIwYmU0
NDMwOTUwZWI5YzU4ZWJlNGYyYzBjZjVhNTJkYjM4OTQwMy4uYWYwMTY0MTNhY2JkOTRmNTIyZTk2
ZDA3ZDMxYWMzZGViNzY1MzBiNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAKQEAgLTcxLDkgKzcx
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKGF1dG8qIG5vZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgogICAgICAgICAgICAgICAgICAgICBhc3NlcnRBcmVSZWdpc3RlcmVkKG5vZGUtPnN0cnVjdHVy
ZVNldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDVmNWQ4NGQ1MWFjOWZhMzE1OTI1NGI1NWE5MWRh
Y2MxMWYwMmE1NDUuLjZlMDBjYzYwNWRiMDFiNzQyNTVmODc3OTNmZjY4YjVhY2FiNmE1N2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcApAQCAtMjcyLDggKzI3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghc2hvdWxkQ29uc2lkZXJGb3JIb2lzdGluZzxTdHJ1Y3R1cmVUeXBlQ2hlY2s+
KHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXhJbkJsb2NrID0gMDsgc3ViSW5kZXhJbkJs
b2NrIDwgYmxvY2stPnNpemUoKTsgKytzdWJJbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBzdWJOb2RlIDogKmJsb2NrKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQpAQCAtMzA1LDggKzMwNCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRl
eEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZv
ciAoYXV0byogbm9kZSA6ICpibG9jaykgewogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKQEAgLTM2NCw4ICsz
NjIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZENvbnNpZGVy
Rm9ySG9pc3Rpbmc8QXJyYXlUeXBlQ2hlY2s+KHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5k
ZXhJbkJsb2NrID0gMDsgc3ViSW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytzdWJJbmRl
eEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN1Yk5vZGUgPSBibG9j
ay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIHN1
Yk5vZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ViTm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTog
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBz
b3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IGY5
YzIyYmI5Njg4MTE4ZDgwMjc2NmFjZWYwMzI5OWZlYmU4Mjc0YzMuLmYzNWU0ODNlZWM4Y2M3MzEw
YzAyODkxMTgwODhhNzgzNWJhMmE4NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCkBAIC02MzgsOCArNjM4LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
Ym9vbCBkaWRTZWVFeGl0T0sgPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgIGZvciAoYXV0byogbm9kZSA6ICpibG9jaykgewogICAgICAgICAg
ICAgICAgIGRpZFNlZUV4aXRPSyB8PSBub2RlLT5vcmlnaW4uZXhpdE9LOwogICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgUGhpOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCmluZGV4IGY4MTI3NTk5ZTA1M2NmMDE5MWUzYzRmNWIw
MWNjODQ1MjVkMjk0NWYuLjc0MTVhY2RlNGRjZWZhMmVjMDFmNzkzZWQzODE5NjdiYzJiMWQyYjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKQEAgLTU5LDkgKzU5LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIC8vIEZvcmNlIHVzYWdlIG9mIGhpZ2hlc3QtbnVtYmVyZWQgdmly
dHVhbCByZWdpc3RlcnMuCiAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC5zb3J0RnJlZSgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkJsb2NrID0gMDsg
aW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAor
ICAgICAgICAgICAgZm9yIChhdXRvKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBWZXJpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVy
aWZpZXIuY3BwCmluZGV4IGM3NzljZjEwNmYxYTU2ZDA4NmQxMmExMWFjZWRjOTFkYjRiODQ5YmEu
LmZhZGE3OTRjZGNlNTUxMWIyMjRmNTFkNjU1NzY0NWU3OTJkMTg2NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmNwcApAQCAtMTI3LDggKzEyNyw3IEBAIHN0
YXRpYyB2b2lkIHRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KEhhc2hTZXQ8SlNPYmplY3QqPiYga25v
d25MaXZlU2V0LCBMaXZlT2JqZWN0CiAgICAgICAgIHJldHVybjsKIAogICAgIHNpemVfdCBsaXZl
T2JqZWN0c0ZvdW5kID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QubGl2ZU9i
amVjdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgTGl2ZU9iamVjdERhdGEmIG9iakRhdGEgPSBs
aXN0LmxpdmVPYmplY3RzW2ldOworICAgIGZvciAoYXV0byYgb2JqRGF0YSA6IGxpc3QubGl2ZU9i
amVjdHMpIHsKICAgICAgICAgaWYgKG9iakRhdGEuaXNDb25maXJtZWREZWFkKQogICAgICAgICAg
ICAgY29udGludWU7IC8vIERvbid0ICJyZXN1cnJlY3QiIGtub3duIGRlYWQgb2JqZWN0cy4KICAg
ICAgICAgaWYgKCFrbm93bkxpdmVTZXQuY29udGFpbnMob2JqRGF0YS5vYmopKSB7CkBAIC0xNDUs
MTAgKzE0NCw4IEBAIHZvaWQgSGVhcFZlcmlmaWVyOjp0cmltRGVhZE9iamVjdHMoKQogICAgIEhh
c2hTZXQ8SlNPYmplY3QqPiBrbm93bkxpdmVTZXQ7CiAKICAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0
ZXIgPSBjdXJyZW50Q3ljbGUoKS5hZnRlcjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFm
dGVyLmxpdmVPYmplY3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIExpdmVPYmplY3REYXRhJiBv
YmpEYXRhID0gYWZ0ZXIubGl2ZU9iamVjdHNbaV07CisgICAgZm9yIChhdXRvJiBvYmpEYXRhIDog
YWZ0ZXIubGl2ZU9iamVjdHMpCiAgICAgICAgIGtub3duTGl2ZVNldC5hZGQob2JqRGF0YS5vYmop
OwotICAgIH0KIAogICAgIHRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNldCwgY3Vy
cmVudEN5Y2xlKCkuYmVmb3JlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTGl2ZU9iamVjdExpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGl2
ZU9iamVjdExpc3QuY3BwCmluZGV4IGFmMDM2N2RjM2I2YmE5MGUwYjg3ZmFmYTJiYzY1NDY5ZGU2
YzA5ZmMuLjVlYjdjYjk5MTdhMzI4NWY4NDUzZTI5MDZjNGRiNjJmZTY2Mjc4NzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpdmVPYmplY3RMaXN0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXZlT2JqZWN0TGlzdC5jcHAKQEAgLTMwLDggKzMw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIExpdmVPYmplY3REYXRhKiBMaXZlT2JqZWN0TGlzdDo6
ZmluZE9iamVjdChKU09iamVjdCogb2JqKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGl2ZU9iamVjdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgTGl2ZU9iamVjdERhdGEmIGRhdGEg
PSBsaXZlT2JqZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIGRhdGEgOiBsaXZlT2JqZWN0cykgewog
ICAgICAgICBpZiAob2JqID09IGRhdGEub2JqKQogICAgICAgICAgICAgcmV0dXJuICZkYXRhOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3Bw
CmluZGV4IDE2NDllYzk3NTU1M2ZiZjdiNTU1NzE5MzNlMjNiODFiYzIwMzZhYzMuLjAyODBjZDc5
NDAyYWY4YjEyZDI2MDNjMzJkZDljYjE5OTUzOTZkN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcApAQCAtNTEsOCArNTEsNyBAQCBNYXJrZWRB
bGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBNYXJrZWRTcGFjZSogbWFya2Vk
U3BhY2UsIHNpemVfdCBjZQogYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91Ymxl
IGRlYWRsaW5lKQogewogICAgIHVuc2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsK
LSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2lu
ZGV4KSB7Ci0gICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9ibG9ja3NbaW5k
ZXhdOworICAgIGZvciAoYXV0byogYmxvY2sgOiBtX2Jsb2NrcykgewogICAgICAgICBpZiAoYmxv
Y2spCiAgICAgICAgICAgICBibG9jay0+YmxvY2soKS51cGRhdGVOZWVkc0Rlc3RydWN0aW9uKCk7
CiAgICAgICAgICsraXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAKaW5kZXggMmY4ZTBmNmQ3
MjA5YmNiNGE5ZWZjOWNkNWYwY2IyM2Y5ODBhMjNkMy4uNjEyYzQ0OGM0MGZmNWIwYWVjMTIzYjZi
OGVhYWM4ODIwMzJkYjNiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmNwcApAQCAtNzUsOCArNzUsNyBAQCBjb25zdCBTY3JpcHRD
YWxsRnJhbWUqIFNjcmlwdENhbGxTdGFjazo6Zmlyc3ROb25OYXRpdmVDYWxsRnJhbWUoKSBjb25z
dAogICAgIGlmICghbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBmcmFtZSA9IG1fZnJhbWVzW2ldOworICAgIGZvciAo
Y29uc3QgYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICBpZiAoIWZyYW1lLmlzTmF0
aXZlKCkpCiAgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCBjMmFjZmIzNTk5MmJiMGRlOTA3ZGU2M2I3M2FhZDQ3YzQ1NWIxNmQy
Li4zMjdhZmI4OGFkZmZiODczYmYyYThlMmIzZTlhYjc3ZWRmOGIxMWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC02OTMsOCArNjkzLDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklU
OjpsaW5rKCkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogCiAgICAgLy8gVHJh
bnNsYXRlIHZQQyBvZmZzZXRzIGludG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0ZWQgY29kZSwg
Zm9yIHN3aXRjaCB0YWJsZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3dpdGNo
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3dpdGNoUmVjb3JkIHJlY29yZCA9IG1fc3dpdGNo
ZXNbaV07CisgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX3N3aXRjaGVzKSB7CiAgICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gcmVjb3JkLmJ5dGVjb2RlT2Zmc2V0OwogCiAgICAgICAg
IGlmIChyZWNvcmQudHlwZSAhPSBTd2l0Y2hSZWNvcmQ6OlN0cmluZykgewpAQCAtNzEyLDEwICs3
MTEsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogCiAgICAgICAgICAgICByZWNv
cmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0p
OwogCi0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVy
YXRvciBlbmQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUu
ZW5kKCk7ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3Ry
aW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1w
VGFibGUtPm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGl0LT52YWx1ZS5icmFuY2hPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgaXQtPnZhbHVlLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFi
bGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgZm9yIChhdXRvJiBs
b2NhdGlvbiA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS52
YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLmJy
YW5jaE9mZnNldDsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5jdGlPZmZzZXQgPSBvZmZzZXQg
PyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0
XSkgOiByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTcyNSw5ICs3MjMsOSBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2hhbmRsZXIudGFyZ2V0XSk7CiAgICAgfQogCi0gICAg
Zm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT50bykK
LSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRl
ci0+dG8pKTsKKyAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fY2FsbHMpIHsKKyAgICAgICAgaWYg
KHJlY29yZC50bykKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIEZ1
bmN0aW9uUHRyKHJlY29yZC50bykpOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z2V0QnlJZHMuc2l6ZSgpOyBpLS07KQpAQCAtNzYyLDggKzc2MCw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENh
bGxDb21waWxhdGlvbkluZm8mIGNvbXBpbGF0aW9uSW5mbyA9IG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tpXTsKKyAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9u
SW5mbykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNh
bGxMaW5rSW5mbzsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNvbXBpbGF0
aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCmluZGV4IDZkYzJmYmIyYjlhY2Vi
NDA3NTU4MTljYjdiMmE5OTdmNjgwN2NhZDYuLjY5MjU5MmNiMmNkZGY5N2I1NTgyYjA0YmI2OWEz
NGQwNjNmYWY2ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFy
aWFibGVFbnZpcm9ubWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9W
YXJpYWJsZUVudmlyb25tZW50LmNwcApAQCAtNTAsMTYgKzUwLDE2IEBAIHZvaWQgVmFyaWFibGVF
bnZpcm9ubWVudDo6bWFya0FsbFZhcmlhYmxlc0FzQ2FwdHVyZWQoKQogCiAgICAgbV9pc0V2ZXJ5
dGhpbmdDYXB0dXJlZCA9IHRydWU7IC8vIEZvciBmYXN0IHF1ZXJpZXMuCiAgICAgLy8gV2UgbXVz
dCBtYXJrIGV2ZXJ5IGVudHJ5IGFzIGNhcHR1cmVkIGZvciB3aGVuIHdlIGl0ZXJhdGUgdGhyb3Vn
aCBtX21hcCBhbmQgZW50cnkuaXNDYXB0dXJlZCgpIGlzIGNhbGxlZC4KLSAgICBmb3IgKGF1dG8g
aXRlciA9IG1fbWFwLmJlZ2luKCksIGVuZCA9IG1fbWFwLmVuZCgpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSAKLSAgICAgICAgaXRlci0+dmFsdWUuc2V0SXNDYXB0dXJlZCgpOworICAgIGZvciAoYXV0
byYgdmFsdWUgOiBtX21hcC52YWx1ZXMoKSkKKyAgICAgICAgdmFsdWUuc2V0SXNDYXB0dXJlZCgp
OwogfQogCiBib29sIFZhcmlhYmxlRW52aXJvbm1lbnQ6Omhhc0NhcHR1cmVkVmFyaWFibGVzKCkg
Y29uc3QKIHsKICAgICBpZiAobV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCkKICAgICAgICAgcmV0dXJu
IHNpemUoKSA+IDA7Ci0gICAgZm9yIChhdXRvIGVudHJ5IDogbV9tYXApIHsKLSAgICAgICAgaWYg
KGVudHJ5LnZhbHVlLmlzQ2FwdHVyZWQoKSkKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9tYXAu
dmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNw
cAppbmRleCAzZDdlMzFiMmU1ODlmNjIzMDNmMWQ2NjBiNzk4Mjk4YTRjNWY1ZDgwLi5hOGFhZGFk
ZmQxNzQyYWI0ZTExZjdjYjgxM2EyOWNmOWFmZWQyMzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAK
QEAgLTM4LDEwICszOCwxMCBAQCBib29sIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6aGFzRXhl
Y3V0ZWRBdE9mZnNldChpbnRwdHJfdCBpZCwgdW5zaWduZWQgb2Zmc2V0KQogICAgIFJhbmdlTWFw
JiBtYXAgPSBtX3JhbmdlTWFwLmZpbmQoaWQpLT5zZWNvbmQ7CiAgICAgdW5zaWduZWQgZGlzdGFu
Y2UgPSBVSU5UX01BWDsKICAgICBib29sIGhhc0V4ZWN1dGVkID0gZmFsc2U7Ci0gICAgZm9yIChh
dXRvIGl0ZXIgPSBtYXAuYmVnaW4oKSwgZW5kID0gbWFwLmVuZCgpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgIGNvbnN0IEZ1bmN0aW9uUmFuZ2UmIHJhbmdlID0gaXRlci0+Zmlyc3Q7
CisgICAgZm9yIChhdXRvJiBwYWlyIDogbWFwKSB7CisgICAgICAgIGNvbnN0IEZ1bmN0aW9uUmFu
Z2UmIHJhbmdlID0gcGFpci5maXJzdDsKICAgICAgICAgaWYgKHJhbmdlLm1fc3RhcnQgPD0gb2Zm
c2V0ICYmIG9mZnNldCA8PSByYW5nZS5tX2VuZCAmJiByYW5nZS5tX2VuZCAtIHJhbmdlLm1fc3Rh
cnQgPCBkaXN0YW5jZSkgewotICAgICAgICAgICAgaGFzRXhlY3V0ZWQgPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgICAgICBoYXNFeGVjdXRlZCA9IHBhaXIuc2Vjb25kOwogICAgICAgICAgICAgZGlz
dGFuY2UgPSByYW5nZS5tX2VuZCAtIHJhbmdlLm1fc3RhcnQ7CiAgICAgICAgIH0KICAgICB9CkBA
IC04OCw5ICs4OCw5IEBAIFZlY3RvcjxzdGQ6OnR1cGxlPGJvb2wsIHVuc2lnbmVkLCB1bnNpZ25l
ZD4+IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6Z2V0RnVuY3RpCiAgICAgICAgIHJldHVybiBy
YW5nZXM7CiAKICAgICBSYW5nZU1hcCYgbWFwID0gbV9yYW5nZU1hcC5maW5kKGlkKS0+c2Vjb25k
OwotICAgIGZvciAoYXV0byBpdGVyID0gbWFwLmJlZ2luKCksIGVuZCA9IG1hcC5lbmQoKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBjb25zdCBGdW5jdGlvblJhbmdlJiByYW5nZSA9
IGl0ZXItPmZpcnN0OwotICAgICAgICBib29sIGhhc0V4ZWN1dGVkID0gaXRlci0+c2Vjb25kOwor
ICAgIGZvciAoYXV0byYgcGFpciA6IG1hcCkgeworICAgICAgICBjb25zdCBGdW5jdGlvblJhbmdl
JiByYW5nZSA9IHBhaXIuZmlyc3Q7CisgICAgICAgIGJvb2wgaGFzRXhlY3V0ZWQgPSBwYWlyLnNl
Y29uZDsKICAgICAgICAgcmFuZ2VzLmFwcGVuZChzdGQ6OnR1cGxlPGJvb2wsIHVuc2lnbmVkLCB1
bnNpZ25lZD4oaGFzRXhlY3V0ZWQsIHJhbmdlLm1fc3RhcnQsIHJhbmdlLm1fZW5kKSk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAppbmRleCA5YTM5ZThjNzU3ODllODJlNjQxN2I0YTVmYzE2
OGRmMzYzY2QzZWMxLi42N2VmZGY3YmJmZTAzNzVkNzRmNGVjMTUxN2QxYWE2ZDhlYzVhYWU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAKQEAgLTkxLDggKzkxLDggQEAgdm9pZCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqPihjZWxsKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0aGlzT2JqZWN0
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9wcm9wZXJ0eU5h
bWVzLnNpemUoKTsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3By
b3BlcnR5TmFtZXNbaV0pOworICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVj
dC0+bV9wcm9wZXJ0eU5hbWVzKQorICAgICAgICB2aXNpdG9yLmFwcGVuZChwcm9wZXJ0eU5hbWUp
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvdG90eXBlQ2hhaW4pOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAppbmRl
eCBhYjk3NDkyOGI4ZDExOGE2ODY5ZjUyMjBmMmQ0OTA1NTY1NzcwMGMwLi5lMzE1YzQxMmI5MzMz
MGIwNWFmNjY0MDcwY2ExMTZjZDUzZTkyZGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAKQEAgLTEyMiw4ICsxMjIsNyBAQCBUeXBlTG9jYXRp
b24qIFR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBz
b3VyY2VJRCwgVHlwZQogICAgIFZlY3RvcjxUeXBlTG9jYXRpb24qPiYgYnVja2V0ID0gbV9idWNr
ZXRNYXAuZmluZChzb3VyY2VJRCktPnZhbHVlOwogICAgIFR5cGVMb2NhdGlvbiogYmVzdE1hdGNo
ID0gbnVsbHB0cjsKICAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IFVJTlRfTUFYOyAvLyBCZWNhdXNl
IGFzc2lnbm1lbnRzIG1heSBiZSBuZXN0ZWQsIG1ha2Ugc3VyZSB3ZSBmaW5kIHRoZSBjbG9zZXN0
IGVuY2xvc2luZyBhc3NpZ25tZW50IHRvIHRoaXMgY2hhcmFjdGVyIG9mZnNldC4KLSAgICBmb3Ig
KHNpemVfdCBpID0gMCwgc2l6ZSA9IGJ1Y2tldC5zaXplKCk7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGJ1Y2tldC5hdChpKTsKKyAgICBmb3IgKGF1
dG8qIGxvY2F0aW9uIDogYnVja2V0KSB7CiAgICAgICAgIC8vIFdlIGZvdW5kIHRoZSB0eXBlIGxv
Y2F0aW9uIHRoYXQgY29ycmVsYXRlcyB0byB0aGUgY29udmVyZ2VuY2Ugb2YgYWxsIHJldHVybiBz
dGF0ZW1lbnRzIGluIGEgZnVuY3Rpb24uCiAgICAgICAgIC8vIFRoaXMgdGV4dCBvZmZzZXQgaXMg
dGhlIG9mZnNldCBvZiB0aGUgb3BlbmluZyBicmFjZSBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9u
LgogICAgICAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9y
RnVuY3Rpb25SZXR1cm4gJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBUeXBlUHJv
ZmlsZXJSZXR1cm5TdGF0ZW1lbnQgJiYgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNl
dElmUmV0dXJuU3RhdGVtZW50ID09IGRpdm90KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlU2V0LmNwcAppbmRleCAxZjYzOGMwNmEzMmEwYjY1YjNlOGNjMjBlMTkyNWVmOTA5M2Fj
OGZiLi4zMWVhN2RmMzRmYzQwNGY5OGU1YjY0ZGE5ZWY0MjNlNjYzNDk1YzE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcApAQCAtNTgsOCArNTgsNyBAQCB2b2lk
IFR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSB0eXBlLCBQYXNzUmVmUHRy
PFN0cnVjdHVyZVNoYXBlPiBwcgogICAgICAgICAgICAgLy8gICBwcm90b3R5cGUgY2hhaW4sIHRo
ZXkgd2lsbCBiZSBtZXJnZWQgaW50byBvbmUgc2hhcGUuCiAgICAgICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CiAgICAgICAgICAgICBTdHJpbmcgaGFzaCA9IG5ld1NoYXBlLT5wcm9wZXJ0eUhh
c2goKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0
b3J5LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBl
PiYgc2VlblNoYXBlID0gbV9zdHJ1Y3R1cmVIaXN0b3J5LmF0KGkpOworICAgICAgICAgICAgZm9y
IChhdXRvJiBzZWVuU2hhcGUgOiBtX3N0cnVjdHVyZUhpc3RvcnkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoc2VlblNoYXBlLT5wcm9wZXJ0eUhhc2goKSA9PSBoYXNoKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTQs
MTYgKzExMywxNSBAQCBTdHJpbmcgVHlwZVNldDo6ZHVtcFR5cGVzKCkgY29uc3QKICAgICBpZiAo
bV9zZWVuVHlwZXMgJiBUeXBlU3ltYm9sKQogICAgICAgICBzZWVuLmFwcGVuZExpdGVyYWwoIlN5
bWJvbCAiKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUgPSBt
X3N0cnVjdHVyZUhpc3RvcnkuYXQoaSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzaGFwZSA6IG1f
c3RydWN0dXJlSGlzdG9yeSkgewogICAgICAgICBzZWVuLmFwcGVuZChzaGFwZS0+bV9jb25zdHJ1
Y3Rvck5hbWUpOwogICAgICAgICBzZWVuLmFwcGVuZCgnICcpOwogICAgIH0KIAogICAgIGlmICht
X3N0cnVjdHVyZUhpc3Rvcnkuc2l6ZSgpKSAKICAgICAgICAgc2Vlbi5hcHBlbmRMaXRlcmFsKCJc
blN0cnVjdHVyZXM6WyAiKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJl
SGlzdG9yeS5zaXplKCk7IGkrKykgewotICAgICAgICBzZWVuLmFwcGVuZChtX3N0cnVjdHVyZUhp
c3RvcnkuYXQoaSktPnN0cmluZ1JlcHJlc2VudGF0aW9uKCkpOworICAgIGZvciAoY29uc3QgYXV0
byYgc2hhcGUgOiBtX3N0cnVjdHVyZUhpc3RvcnkpIHsKKyAgICAgICAgc2Vlbi5hcHBlbmQoc2hh
cGUtPnN0cmluZ1JlcHJlc2VudGF0aW9uKCkpOwogICAgICAgICBzZWVuLmFwcGVuZCgnICcpOwog
ICAgIH0KICAgICBpZiAobV9zdHJ1Y3R1cmVIaXN0b3J5LnNpemUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAppbmRleCA1MWQyMzA1YzIyODU0ZjdkMDUyYWIyNzJiYmUxNzNlMGQ0
M2JmZTkxLi4yMTNmY2FlMzBkM2IwZWM3ZTQ0YmNkODgzNzQxYmE5ZjJjZDdmY2FkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC02OTksOCArNjk5LDcgQEAgaW5saW5lIHZv
aWQgVk06OnVwZGF0ZVN0YWNrTGltaXRzKCkKICNpZiBFTkFCTEUoREZHX0pJVCkKIHZvaWQgVk06
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVS
b290cykKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBzY3JhdGNo
QnVmZmVyc1tpXTsKKyAgICBmb3IgKGF1dG8qIHNjcmF0Y2hCdWZmZXIgOiBzY3JhdGNoQnVmZmVy
cykgewogICAgICAgICBpZiAoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoKCkpIHsKICAgICAg
ICAgICAgIHZvaWQqIGJ1ZmZlclN0YXJ0ID0gc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpOwog
ICAgICAgICAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJ1ZmZlclN0YXJ0LCBzdGF0aWNfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlclN0YXJ0KSArIHNjcmF0Y2hCdWZmZXIt
PmFjdGl2ZUxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
TWFwRGF0YS5jcHAKaW5kZXggZWJhODMxZTk1YTcyNTQ3YzkxYjYyNWM0YzZlMDkxOTllNmRiM2Ey
Ny4uMTZkNjUwMDNiZTczOGMzMWJhMTlhZGFhNjliMDZhMGYzYmM3OTllMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcApAQCAtMTA4LDExICsxMDgs
MTEgQEAgdm9pZCBXZWFrTWFwRGF0YTo6Y2xlYXIoKQogdm9pZCBXZWFrTWFwRGF0YTo6RGVhZEtl
eUNsZWFuZXI6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgbV9saXZlS2V5Q291bnQgPSAwOwotICAgIGZvciAoYXV0byBpdCA9IG1fdGFyZ2V0LT5tX21h
cC5iZWdpbigpLCBlbmQgPSBtX3RhcmdldC0+bV9tYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGl0LT5rZXkpKQorICAgIGZvciAoYXV0byYg
cGFpciA6IG1fdGFyZ2V0LT5tX21hcCkgeworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHBh
aXIua2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBtX2xpdmVLZXlDb3VudCsr
OwotICAgICAgICB2aXNpdG9yLmFwcGVuZChpdC0+dmFsdWUpOworICAgICAgICB2aXNpdG9yLmFw
cGVuZChwYWlyLnZhbHVlKTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlQobV9saXZlS2V5Q291
bnQgPD0gbV90YXJnZXQtPm1fbWFwLnNpemUoKSk7CiB9CkBAIC0xMjYsMTkgKzEyNiwxOSBAQCB2
b2lkIFdlYWtNYXBEYXRhOjpEZWFkS2V5Q2xlYW5lcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBWZWN0b3I8SlNPYmplY3QqPiBkZWFkRW50
cmllczsKICAgICAgICAgZGVhZEVudHJpZXMucmVzZXJ2ZUNhcGFjaXR5KGRlYWRDb3VudCk7Ci0g
ICAgICAgIGZvciAoYXV0byBpdCA9IG1fdGFyZ2V0LT5tX21hcC5iZWdpbigpLCBlbmQgPSBtX3Rh
cmdldC0+bV9tYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKEhl
YXA6OmlzTWFya2VkKGl0LT5rZXkpKQorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Rhcmdl
dC0+bV9tYXApIHsKKyAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChwYWlyLmtleSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBkZWFkRW50cmllcy51bmNoZWNr
ZWRBcHBlbmQoaXQtPmtleSk7CisgICAgICAgICAgICBkZWFkRW50cmllcy51bmNoZWNrZWRBcHBl
bmQocGFpci5rZXkpOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZGVhZEVudHJpZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBtX3RhcmdldC0+bV9tYXAucmVt
b3ZlKGRlYWRFbnRyaWVzW2ldKTsKKyAgICAgICAgZm9yIChhdXRvJiBkZWFkRW50cnkgOiBkZWFk
RW50cmllcykKKyAgICAgICAgICAgIG1fdGFyZ2V0LT5tX21hcC5yZW1vdmUoZGVhZEVudHJ5KTsK
ICAgICB9IGVsc2UgewogICAgICAgICBNYXBUeXBlIG5ld01hcDsKLSAgICAgICAgZm9yIChhdXRv
IGl0ID0gbV90YXJnZXQtPm1fbWFwLmJlZ2luKCksIGVuZCA9IG1fdGFyZ2V0LT5tX21hcC5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGl0
LT5rZXkpKQorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3RhcmdldC0+bV9tYXApIHsKKyAg
ICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocGFpci5rZXkpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgbmV3TWFwLmFkZChpdC0+a2V5LCBpdC0+dmFsdWUpOwor
ICAgICAgICAgICAgbmV3TWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgbV90YXJnZXQtPm1fbWFwLnN3YXAobmV3TWFwKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKaW5kZXggMThmZWE3NzNlNzg5
MmQyNmJlY2Y1YmE5NWViZDE0YzUyMTNjNjgwZi4uNjZmNDE1NDg5NDEyOWJkYzI4YjJkMGUzM2Q0
YTQzNDI5MWRlYTM0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1By
b2ZpbGVUcmVlTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxl
VHJlZU5vZGUuaApAQCAtODgsOSArODgsNyBAQCBwcml2YXRlOgogICAgICAgICBxc29ydChlbnRy
aWVzLmJlZ2luKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVu
dHJpZXMpOwogCiAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgY2hpbGRyZW4gaW4gc2FtcGxl
LWZyZXF1ZW5jeSBvcmRlci4KLSAgICAgICAgZm9yIChzaXplX3QgZSA9IDA7IGUgPCBlbnRyaWVz
LnNpemUoKTsgKytlKSB7Ci0gICAgICAgICAgICBNYXBFbnRyeSogZW50cnkgPSBlbnRyaWVzW2Vd
OwotCisgICAgICAgIGZvciAoYXV0byogZW50cnkgOiBlbnRyaWVzKSB7CiAgICAgICAgICAgICAv
LyBQcmludCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMsIHRoZSBuYW1lIG9mIHRoaXMgbm9kZSwgYW5k
IHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBzdGFjay10b3AKICAgICAgICAgICAgIC8v
IGluIHRoaXMgbm9kZSAoc2FtcGxlcyBkaXJlY3RseSB3aXRoaW4gdGhpcyBub2RlLCBleGNsdWRp
bmcgc2FtcGxlcyBpbiBjaGlsZHJlbi4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbmRlbnQ7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJJbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50
ZXJwcmV0ZXIuY3BwCmluZGV4IDBhOWZkODJjMjQxOWJmODY1MDEwZjliZDE2MTIwNTViNWNhZWZi
MmUuLmIxNmUyNGQ5N2ZlMDVjMjZlOWQ4ZDY0Njc0M2Q4YjA4NGIxZjhkYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcApAQCAtMTk0Myw5ICsx
OTQzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGN1cnJlbnRDb3VudEFscmVhZHlDaGVj
a2VkICs9IGNvdW50VG9DaGVjazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFsdGVybmF0aXZlLT5tX3Rlcm1zLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBhbHRlcm5hdGl2ZS0+bV90ZXJtc1tp
XTsKLQorICAgICAgICAgICAgZm9yIChhdXRvJiB0ZXJtIDogYWx0ZXJuYXRpdmUtPm1fdGVybXMp
IHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRlcm0udHlwZSkgewogICAgICAgICAgICAgICAg
IGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25CT0w6CiAgICAgICAgICAgICAgICAgICAg
IGFzc2VydGlvbkJPTChjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCAtIHRlcm0uaW5wdXRQb3Np
dGlvbik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>